【问题标题】:laravel foundation files. am I doing this correctly?laravel 基础文件。我这样做正确吗?
【发布时间】:2015-07-04 07:58:16
【问题描述】:

在 Laravel 5.1 中,我需要将一些数据传递给寄存器视图。 RegistersUsers trait 中的 getRegister() 函数负责返回视图。

起初我修改了函数以传递我的数据,但后来我意识到修改将在更新时被覆盖。

所以我创建了一个新的控制器registerController 并修改了getRegister 的路由,如下所示:Route::get('auth/register', 'Auth\RegisterController@getRegister')

在控制器内部,我重新定义了 getRegister 函数以返回带有我的附加数据的视图。 现在我在想..我这样做是正确的还是需要使用其他方法并以其他方式使用原始 AuthController?

此外,默认身份验证设置为使用电子邮件进行登录后,我如何将其更改为使用用户名而不触及基础文件?

这些都是关于“扩展框架”的事情吗?

谢谢

【问题讨论】:

    标签: php laravel routes laravel-5 registration


    【解决方案1】:

    首先,修改供应商文件总是一个坏主意,因为如果供应商包中有任何更新,更改将被覆盖。

    回答你的第一个问题:

    如果你想在注册视图中提供一些额外的数据,你可以做两件事。

    第一个是添加自己的getRegister()方法:

    public function getRegister()
    {
        return view('auth.register')->with(<parameter name>, <parameter value>);
    }
    

    此解决方案的缺点是,如果将来对 trait 的 getRegister 方法进行任何更改,这些更改将不会合并到您的控制器中。

    因此,更好的方法是在控制器中重用 trait 的 getRegister() 方法,并将参数添加到任何 trait 返回:

    在你的控制器中做:

    use RegistersUsers {
      RegistersUsers::getRegister as traitGetRegister;
    }
    
    public function getRegister()
    {
        return $this->traitGetRegister()->with(<parameter_name>, <parameter_value>);
    }
    

    回答你的第二个问题:

    Laravel 用于登录用户的 Auth::attempt() 方法使用 DatabaseUserProvider 从数据库加载用户,并且该提供程序足够灵活,可以使用您提供的任何凭据集。但是,如果您想使用 AuthenticatesUsers 特征来登录用户,则必须覆盖其 postLogin 方法,因为它会验证用户凭据:

    $this->validate($request, [
      'email' => 'required|email', 'password' => 'required',
    ]);
    

    LARAVEL 5.1 更新: 从 5.1 开始,无需重写 postLogin() 来更改用于从数据库中获取用户的列。将控制器中的 username 属性设置为列的名称就足够了:

    public $username = 'login';
    

    【讨论】:

    • 感谢您的回复,实际上我必须将从数据库获取的数据传递到寄存器视图。我正在尝试您的方法,但它不起作用,或者我无法使其工作。我的工作控制器是这样的:pastebin.com/qz828b0R
    • 忽略我最后的评论,我让它工作。关于登录问题,在 laravel 5.1 中验证器是不同的,看起来像这样:code$this-&gt;validate($request, [ $this-&gt;loginUsername() =&gt; 'required', 'password' =&gt; 'required', ]) 和用户名在 public function loginUsername() { return property_exists($this, 'username') ? $this-&gt;username : 'email'; } 中定义,所以我认为应该修改“用户名”中的“电子邮件”,但又一次,如果那样的话包被修改了?
    • 这是个好消息 - 无需重写 postLogin 方法。只需在您的控制器中将一个名为 username 的属性设置为您想要使用的任何字段而不是电子邮件。公共 $username = '用户名';
    • 哇,谢谢!它起作用了,我插入了 public $username = 'username';在 AuthController.php 中,它使用用户名而不是电子邮件记录我
    猜你喜欢
    • 2012-12-12
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多