我在Laravel中遇到此问题,并基于路由控制器和使用x.blade.php文件构建表单。页面显示正常,我可以输入数据并测试规则,这一切都很好。问题在于提交数据,我点击提交并且错误返回"电子邮件地址是必需的"。
当我点击提交时,电子邮件地址中包含数据,当$rules
和$validation
在路径文件中时,我告诉你我有这个工作。我只是不明白它是如何看不到电子邮件领域的数据的
数据库中有一个名为users的表,其中包含相应的字段。
路由文件:
Route::get('register', 'LoginController@getRegistration');
Route::post('logging', 'LoginController@postCreate');
User.php文件:
<?php
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface
{
public static $rules = array(
'email' => 'required|email|unique:users',
'password' => 'required|alpha_num|between:6,20|same:password_confirm',
'password_confirm' => 'required'
);
//user.php default values
}
LoginController.php文件:
<?php
class LoginController extends BaseController
{
public function __construct()
{
$this->beforeFilter('csrf', array('on'=>'post'));
}
public $layout = 'layout.registration';
public function getRegistration()
{
//
}
public function postCreate()
{
$validation = Validator::make(Input::all(), User::$rules);
if ($validation->fails())
{
return Redirect::to('register')->withErrors($validation)->withInput();
}
$users = new User;
$users->email = Input::get('email');
$users-password = Hash::make(Input::get('password'));
if ($users->save())
{
Auth::loginUsingId($users->id);
return Redirect::to('profile');
}
return Redirect::to('register')-withInput();
}
}
registration.blade.php文件:
<h2>New Registeration</h2>
<?php $messages = $errors-all('<p style="color:red">:message</p> ?>
<?php foreach ($messages as $msg): ?>
</= $msg ?>
<?php endforeach; ?>
<?= Form::open(array('action'=>'LoginController@postCreate')) ?>
<?= Form::label('email', 'Email Address: ') ?>
<?= Form::text('text', Input::old('email')) ?>
<br />
<?= Form::label('password', 'Password: ') ?>
<?= Form::password('password') ?>
<br />
<?= Form::label('password_confirm', 'Password Confirm: ') ?>
<?= Form::password('password_confirm') ?>
<br />
<?= Form::submit('Submit') ?>
<?= Form::close() ?>
答案 0 :(得分:1)
您没有email
字段。您有一个电子邮件字段的标签,但是当您实际输出字段本身时,您将其名称设置为text
。
请尝试<?= Form::text('email', Input::old('email')) ?>
。
并且为了让你后来有些头疼,正如评论的那样,你拼错了你的构造函数。就像现在一样,它永远不会达到csrf
验证。