2013-05-08 103 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