2013-05-08 107 views
0

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

我的表单输入是:

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

我控制器

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; 
} 
} 

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

+0

您是否尝试过调试此功能以查看其完全失败的位置?当它不应该失败或不应该失败时它通过吗?运行验证后尝试转储'Validator'对象。 – 2013-05-09 00:56:12

+0

验证错误是需要电子邮件,这意味着我的问题和验证不通过规则,但我不明白为什么会发生这种情况? – 2013-05-09 08:01:34

回答

1

我相信这可能是因为你没有传入一组属性(或基本上是一组数据)。请使用compact函数来生成这样的数组。

array('email' => $email); 

下面是你应该怎么做。

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

是的,你是如此的正确。伟大和自我记录的Laravel说make方法中的$属性是一个数组。这就是为什么在我所做的所有其他更复杂的表单中,验证没有问题,因为我有多个通过数组传递的属性。 – 2013-05-09 17:15:00