laravel表格发布到新路线

时间:2019-02-20 17:04:24

标签: php laravel

我从从路由加载的刀片password.blade.php开始

Route::get('password/email', 'Auth\PasswordController@getEmail')
->name('auth.password.email');

在刀片中,我有一张要发布到路线的表格:

Route::post('password/change', 'User\UserController@password')
->name('user.password.change');

像这样:

{!! Form::open(array('method' => 'POST', 'url' => route('user.password.change'))) !!}
     <div class="form-group">
         <label for="email">Email Address</label>
         <input type="email" class="form-control" name="email" id="email" value="{{ old('email') }}">
     </div>
     <button type="submit" class="btn btn-primary btn-block">Send Email</button>
{!! Form::close() !!}

但是,如果可行,看来它仍在发布到获取起始刀片的“密码/电子邮件”路由中。

如何确保它发布到user.password.change路由?

1 个答案:

答案 0 :(得分:2)

route()不得返回URL

如果您未发布到正确的路由,则路由必须返回false或null。这意味着您没有传递所有必要的参数,或者所讨论的路由存在问题。问题变成了“为什么?”

路由缓存

一种可能性是路由缓存需要更新。这可以通过artisan命令完成:

php artisan route:cache

预期的通过用户

“问题”中的路由似乎并非如此,但是,如果您的UsersController函数需要一个User $ user,则需要确保您的路由和表单能够反映出来。

假设您使用的是Laravel或Laravel集合的较旧版本。问题出在您的form open中。您没有传递要更改密码的用户,如果使用Auth :: user(),则可能不需要传递该参数(此外,请确保路由检查您是否未更改密码)在另一个帐户上)

{!! Form::open(array('method' => 'POST', 'route' => ['user.password.change,'user'=>$user->id]])) !!}

OR

{!! Form::open(array('method' => 'POST', 'url' => 'user/' . $user->id . 'password/change'])) !!}

避免陷入困境

此外,除非您有充分的理由不这样做,否则您无需自己进行身份验证。 Laravel有一个auth package available,您可以将其添加到任何运行Laravel 5.4+的项目中。