【问题标题】:Overriding a trait method in Laravel controller在 Laravel 控制器中覆盖 trait 方法
【发布时间】:2016-06-10 06:42:48
【问题描述】:

我无法在我的 Controller 类中覆盖 trait 的方法。这是我的 trait 方法的一个示例:

protected function resetPassword($user, $password)
{
    $user->password = bcrypt($password);

    $user->save();

    Auth::login($user);
}

这是我的控制器:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;

use Illuminate\Foundation\Auth\ResetsPasswords;


class PasswordController extends Controller
{
    use ResetsPasswords {
        resetPassword as newReset;
    }

    /**
     * Create a new password controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    protected function resetPassword($user, $password)
    {

    }
}

我找到了一个例子,但我不确定我的方法是否正确。

【问题讨论】:

标签: php laravel laravel-5 traits


【解决方案1】:

由于您已经自己完成了,您需要为 framework trait 的 resetPassword 方法起别名,然后实现自己的:

namespace App\Http\Controllers\Auth;

use Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller
{
    use ResetsPasswords {
        resetPassword as frameworkResetPassword;
    }

    protected function resetPassword($user, $password)
    {
        // Do your custom password reset logic here
        $user->password = bcrypt($password);
        $user->save();
        Auth::login($user);

        // Then you can pass the work over to framework's implementation
        // if that's needed.
        // $this->frameworkResetPassword($user, $password);
    }
}

顺便说一下,Laravel 自己的password reset functionality 支持登录用户。

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多