Laravel 3单个输入表单的验证


Laravel 3 Validation of a single input form

我正在使用壮观的Laravel框架,但我有一个验证问题,我无法以任何方式解决试图验证单个电子邮件字段。

我的表单输入是:

{{ Form::email('email', Input::old('email'), array('id' => 'email', 'class' => 'span4', 'placeholder' => Lang::line('newsletter.email')->get($lang), 'novalidate' => 'novalidate')) }}

My controller

public function post_newsletter() {
    $email = Input::get('email');
    $v = Newsletter::validator($email, Newsletter::$rules);
    if($v !== true)
    { ... }
    else 
    { ... }
}

和我的模型

class Newsletter extends Eloquent {
/**
 * Newsletter validation rules
 */
public static $rules = array(
    'email' => 'required|email|unique:newsletters'
);
/**
 * Input validation
 */
public static function validator($attributes, $rules) {
    $v = Validator::make($attributes, $rules);
    return $v->fails() ? $v : true;
}
}

我已经这样做了很多次,成功了很多复杂的形式,但现在即使我输入一个有效的电子邮件,我得到一个关于所需的错误信息等我错过了什么?也许是事实,我试图验证只是一个单一的领域?我真不明白为什么会这样。

我认为这可能是因为您没有传入一个属性数组(或者基本上是一个数据数组)。

尝试使用compact函数来生成这样的数组。

array('email' => $email);

你应该这样做。

$v = Newsletter::validator(compact('email'), Newsletter::$rules);