这是我的代码:
我正在尝试在ServiceProvider上实现它,但我没有任何运气。
//Contact.php
class Contact extends \Eloquent {
protected $fillable = array('email', 'name', 'subject', 'msg');
public static $rules = array(
'email' => 'required|email',
'name' => 'required',
'subject' => 'required',
'msg' => 'required'
);
public static function validate($input) {
return Validator::make($input, static::$rules);
}
}
//Registration .php
class Registration extends \Eloquent {
protected $fillable = array('name', 'address', 'birthdate', 'gender', 'civil_status', 'nationality', 'contact_number', 'email', 'invited');
protected $guarded = array('id');
public static $rules = array(
"name" => "required|alpha_spaces",
"address" => "required",
"contact_number" => "required|numeric",
"email" => "required|email|unique:registrations"
);
public static function validate($input) {
return Validator::make($input, static::$rules);
}
}
class HomeController extends BaseController
{
public function postContactForm()
{
return Contact::validate(Input::all());
}
public function postRegistrationForm()
{
return Registration ::validate(Input::all());
}
}
我可以像这样实现它吗?
$this->validate-check(Input::all());
我正在尝试重构我的代码,并且还使用laravel 4也是新的。
谢谢,
答案 0 :(得分:0)
Aldren,
我认为服务提供商对此任务有点矫枉过正。您可以创建类似验证服务的内容。让我解释一下:
假设您将自定义文件放在app/src
下,并使用composer自动加载那里的类。
创建一个抽象的Validator
类。这样,您可以为需要验证的每个模型扩展此类:
<?php namespace Foo\Services\Validation;
abstract class Validator {
protected $errors;
public function check($validator)
{
if ($validator->fails()) {
$this->errors = $validator->messages();
return false;
}
return true;
}
public function isValidForCreation($input)
{
$validator = \Validator::make($input, static::$insertRules);
return $this->check($validator);
}
public function isValidForUpdate($input)
{
$validator = \Validator::make($input, static::$updateRules);
return $this->check($validator);
}
public function errors()
{
return $this->errors;
}
}
现在,假设您要验证Contact
模型输入,对吧?然后,您可以创建一个ContactValidator
类来扩展我们的Validator
抽象类:
<?php namespace Foo\Services\Validation;
class ContactValidator extends Validator
{
static $insertRules = [
'name' => 'required'
];
static $updateRules = [
'name' => 'required'
];
}
好的,现在我们完成了样板。现在,我们转到ContactsController
来实施新的ContactValidator
。
首先,我们需要在控制器中注入验证器。恕我直言,最好的方法是在控制器构造函数中。
所以,让我们走吧:
<?php
use Foo\Services\Validation\ContactValidator as Validator;
class ContactsController extends \BaseController {
protected $validator;
function __construct(Validator $validator)
{
$this->validator = $validator;
}
大!现在我们注入了它。接下来,我们必须确保在尝试存储ContactValidator
时调用Contact
。假设您的方法称为store()
。
public function store()
{
if(!$this->validator->isValidForCreation(Input::all()))
{
return Redirect::back()->withErrors($this->validator->errors())->withInput();
}
else
{
//store your data here.
}
}
您可以使用$this->validator->isValidForCreation
或$this->validator->isValidForUpdate
来检查您对Validator服务的输入。
我希望你能理解一切,如果你有任何疑问,请告诉我。
干杯和良好的编码:D
答案 1 :(得分:0)
感谢输入GustavoR,我在这里得到你想解释的内容。但是可以在一个控制器中实现$this->validator
吗?
use Foo\Services\Validation\MainValidator as Validator;
class HomeController extends BaseController
{
protected $validator;
public function __construct(Validator $validator)
{
$this->validator = $validator;
}
public function postContactForm()
{
return ( $this->validator->isValidForCreation(Input::all()) );
}
public function postRegistrationForm()
{
return ( $this->validator->isValidForCreation(Input::all()) );
}
}
再次感谢输入:)