Php Laravel 5.6-登记表不起作用且未显示任何错误
在我最近的一个项目中,自定义注册表单不起作用。当我单击register按钮时,它会重新加载注册表,不会打印任何错误,也不会将任何数据插入数据库。以下是登记表的外观: 以下是迁移文件代码:Php Laravel 5.6-登记表不起作用且未显示任何错误,php,laravel,laravel-5.6,Php,Laravel,Laravel 5.6,在我最近的一个项目中,自定义注册表单不起作用。当我单击register按钮时,它会重新加载注册表,不会打印任何错误,也不会将任何数据插入数据库。以下是登记表的外观: 以下是迁移文件代码: public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('fname');
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('fname');
$table->string('lname');
$table->string('email')->unique();
$table->string('contact');
$table->string('password');
$table->string('created_by');
$table->string('modified_by')->nullable();
$table->string('userrole');
$table->rememberToken();
$table->timestamps();
});
}
以下是用户型号的代码:
protected $fillable = [
'fname', 'lname', 'email', 'password', 'contact', 'created_by', 'userrole',
];
protected $hidden = [
'password', 'remember_token', 'modified_by',
];
以下是注册表控制器的代码:
protected function create(array $data)
{
return User::create([
'fname' => $data['fname'],
'lname' => $data['lname'],
'email' => $data['email'],
'contact' => $data['contact'],
'created_by' => $data['email'],
'userrole' => Config::get('constants.ROLE_USER'),
'password' => Hash::make($data['password']),
]);
}
以下是constants.php的代码,它位于config文件夹中:
<?php
return array(
'ROLE_ADMIN' => 'ROLE_ADMIN',
'ROLE_USER' => 'ROLE_USER'
);
这可能是因为您有@csrf
而没有{{csrf\u field}}
,所以没有发布csrf令牌
此外,为了进行测试,您可以尝试将以下内容添加到刀片:
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
但是请注意可能正在对操作执行任何验证的任何请求
s,这是因为您正在控制器中返回User::create
。您必须重定向到某个页面,如主页或其他页面
如果你有一个主页,你可以在你的控制器中这样做
protected function create(Request $request)
{
$data = $request->all();
$user = User::create([
'fname' => $data['fname'],
'lname' => $data['lname'],
'email' => $data['email'],
'contact' => $data['contact'],
'created_by' => $data['email'],
'userrole' => Config::get('constants.ROLE_USER'),
'password' => Hash::make($data['password']),
]);
return redirect('home')->with('message', 'User registered!');;
}
并使用此代码在主页上获取消息
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
@if(会话('status'))
{{session('status')}
@恩迪夫
以下是RegisterController的代码:
protected function validator(array $data)
{
return Validator::make($data, [
'fname' => 'required|string|max:255',
'lname' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
protected function create(array $data)
{
return User::create([
'fname' => $data['fname'],
'lname' => $data['lname'],
'email' => $data['email'],
'contact' => $data['contact'],
'created_by' => $data['email'],
'userrole' => Config::get('constants.ROLE_USER'),
'password' => Hash::make($data['password']),
]);
}
public function register(Request $request)
{
$validation = $this->validator($request->all());
if ($validation->fails()) {
return redirect()->back()->with(['errors'=>$validation->errors()->toArray()]);
}
else{
$user = $this->create($request->all());
Auth::login($user);
return redirect('/dashboard')->with(['message'=>'Account Successfully Created.']);
}
}
在您的刀片视图中:
@if (count($errors) > 0)
@foreach ($errors->all() as $error)
<p class="alert alert-danger alert-dismissible fade show" role="alert">{{ $error }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</p>
@endforeach
@endif
@if (session()->has('message'))
<p class="alert alert-success alert-dismissible fade show" role="alert">{{ session('message') }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</p>
@endif
@if(计数($errors)>0)
@foreach($errors->all()作为$error)
{{{$error}
&时代;
@endforeach
@恩迪夫
@如果(session()->has('message'))
{{{session('message')}
&时代;
@恩迪夫
单击“注册”按钮后,如果您不想重新加载页面,而是想将您重定向到其他地方并打印消息,请尝试以下操作:
protected function create(array $data)
{
$user = User::create([
'fname' => $data['fname'],
'lname' => $data['lname'],
'email' => $data['email'],
'contact' => $data['contact'],
'created_by' => $data['email'],
'userrole' => Config::get('constants.ROLE_USER'),
'password' => Hash::make($data['password']),
]);
session()->flash('message', 'Thank you for registering!');
return redirect()->home();
}
有几件事你必须改变<代码>创建
控制器应具有公共可见性。使用Request$Request
作为参数,而不是array$data
。我希望这能帮助您:发现在寄存器刀片上添加@dump($errors)有助于找出错误的确切原因。在不久前的某个地方看到这个,使用它,它帮助我快速前进。在Laravel 5.6中,我认为@csrf相当于{{csrf_field}。完全相同。@Shimul,如果你已经解决了这个问题。请接受答案,以便其他人知道此问题已得到回答。感谢您的替代解决方案,但这不是我想要的实际解决方案。到目前为止,我对Laravel默认流[注册&而不是自动登录]很满意。这是一个验证错误,默认情况下搜索名称字段,但我将名称扩展为fname和lname,这就是错误发生的原因。谢谢您,我同意这是解决上述查询的正确方法
@if (count($errors) > 0)
@foreach ($errors->all() as $error)
<p class="alert alert-danger alert-dismissible fade show" role="alert">{{ $error }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</p>
@endforeach
@endif
@if (session()->has('message'))
<p class="alert alert-success alert-dismissible fade show" role="alert">{{ session('message') }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</p>
@endif
protected function create(array $data)
{
$user = User::create([
'fname' => $data['fname'],
'lname' => $data['lname'],
'email' => $data['email'],
'contact' => $data['contact'],
'created_by' => $data['email'],
'userrole' => Config::get('constants.ROLE_USER'),
'password' => Hash::make($data['password']),
]);
session()->flash('message', 'Thank you for registering!');
return redirect()->home();
}