首页 > 解决方案 > Laravel,我如何覆盖供应商的代码

问题描述

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.',]);

但这是一个供应商文件。我怎样才能做到这一点?覆盖另一个文件中的方法?在哪里?

标签: phplaravel

解决方案


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

"autoload": {
     "files": ["somedir/fixed_class.php"]
  }

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


推荐阅读