Laravel 5.1具有以下代码:
public function postEmail(Request $request)
{
$this->validate($request, ['email' => 'required|email']);
$response = Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject($this->getEmailSubject());
});
switch ($response) {
case Password::RESET_LINK_SENT:
return redirect()->back()->with('status', trans($response));/*I HAVE TO CHANGE THIS*/
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
}
}
该代码来自特征:
app\vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords.php
我需要用其他代码更改带有注释的行:
return redirect()->route('login')->with(['message' => 'Se ha enviado a su email el link del reseteo, por favor verifique.',]);
但这是供应商文件。我怎样才能做到这一点?覆盖另一个文件中的方法?在哪里?
答案 0 :(得分:1)
一个稍微有点棘手的解决方案是复制您需要编辑的类,然后将其与原始名称空间和类名一起放在smartphonebrand
中。然后添加到composer.json:
somedir/fixed_class.php
不过,最好还是以某种方式尝试扩展类并使用自己的改进版本(或为原始的composer模块提交错误修正/功能请求)。
答案 1 :(得分:0)
back()
函数将检查请求中的referer
标头,因此您可以编写将其更改为url(route('login'))
的中间件。
如果未设置该标头,则可以调用$request->setPreviousUrl(url(route('login')))
;
所以基本上您的中间件代码可以是这样的
public function handle($request, Closure $next) {
if (/* request is the reset password */) {
if ($request->headers->has('referer')) {
$request->headers->set('referer', url(route('login')));
} else {
$request->setPreviousUrl(url(route('login')));
}
}
}