为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel,我如何覆盖供应商的代码

Laravel,我如何覆盖供应商的代码

PHP
海绵宝宝撒 2021-07-01 14:51:37
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.',]);但它是一个供应商文件。我怎样才能做到这一点?覆盖另一个文件中的方法?在哪里?
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

一种稍微有点麻烦的解决方案是复制您需要编辑的类,并将其放入somedir/fixed_class.php原始命名空间和类名中。然后添加到 composer.json:


"autoload": {

     "files": ["somedir/fixed_class.php"]

  }

但是,您最好以某种方式尝试扩展该类并使用您自己的改进版本(或为原始作曲家模块提交错误修复/功能请求)。


查看完整回答
反对 回复 2021-07-09
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

该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')));

        }


    }

}


查看完整回答
反对 回复 2021-07-09
  • 2 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信