在Laravel

时间:2016-09-16 19:32:56

标签: php git bash laravel automation

我使用的是Laravel 5.2,我遇到了以下工作流程问题:

对于我正在开发的应用的登录,我使用我的自定义AuthenticatesUsers方法在Laravel开箱即用的vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php下自定义了特征login()。< / p>

git正在跟踪这些变化。当我提交,推送然后在登录到我的服务器时提取更改时,问题就出现了。

我的问题如下。当我使用默认包文件执行AuthenticatesUsers.php(因为我在我的登台服务器中)时,composer update --no-dev文件被覆盖,丢弃了我对{{1}所做的所有自定义方法。

我想通过创建一个&#34; postUpdate&#34;来尝试自动化覆盖文件的过程。作曲家剧本。或者可以使用bash脚本?每次我更新我的作曲家依赖项后,我都厌倦了用git手动覆盖文件。

有什么建议吗?

提前感谢您的帮助。

干杯!

1 个答案:

答案 0 :(得分:0)

您的AuthController使用AuthenticatesAndRegistersUsers,但这并不意味着您不能覆盖控制器中的方法,或者使用您自己的AuthenticatesAndRegistersUsers(复制)版本的文件。

您不想修改供应商目录中的任何内容(包括Illuminate)。这些是供应商包。作曲家覆盖供应商套餐是有原因的;它不是您修改的代码,它允许软件包维护者为您提供安全修复和错误修正等更新。由于其他文件中包中的依赖项的其他更改,覆盖供应商包中的文件可能会中断。

因此,不是修改供应商包,而是扩展类和/或覆盖方法。您可以查看AuthenticatesUsers并将方法postLogin复制到控制器中,例如:

AuthController extends Controller
{

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    public function __construct(){
        $this->middleware('guest', ['except' => 'getLogout']);
    }

    public function postLogin(Request $request)
    {
        $this->validate($request, [
            $this->loginUsername() => 'required', 'password' => 'required',
        ]);

        $throttles = $this->isUsingThrottlesLoginsTrait();

        if ($throttles && $this->hasTooManyLoginAttempts($request)) {
            return $this->sendLockoutResponse($request);
        }

        $credentials = $this->getCredentials($request);

        if (Auth::attempt($credentials, $request->has('remember'))) {
            return $this->handleUserWasAuthenticated($request, $throttles);
        }

        if ($throttles) {
            $this->incrementLoginAttempts($request);
        }

        // Overriding the postLogin to deliver 401 unauthorized instead of redirecting back to login with errors
        abort(401, "Oh no you don't");

        // return redirect($this->loginPath())
        //     ->withInput($request->only($this->loginUsername(), 'remember'))
        //     ->withErrors([
        //         $this->loginUsername() => $this->getFailedLoginMessage(),
        //     ]);
    }

}