在Laravel 5.1中,我需要将一些数据传递给寄存器视图。
RegistersUsers trait中的free(bar[0]); free(bar[1]); /* ... */
函数负责返回视图。
起初我修改了函数以传递我的数据但后来我意识到在更新时会覆盖修改。
所以我制作了一个新的控制器$taxonomy = 'category';
$param_type = 'category__in';
$cat_id = get_cat_ID('Makeup');
$term_args=array(
'orderby' => 'name',
'order' => 'ASC',
'child_of' => $cat_id,
'limit' => 6 );
$terms = get_terms($taxonomy,$term_args);
if ($terms) {
foreach( $terms as $term ) { ?>
<h4><?php echo $term->name;?></h4>
并修改了getRegister()
这样的路线:registerController
在控制器内部,我重新定义了getRegister函数,以使用我的附加数据返回视图。 现在我在想..我是正确地做这个还是我需要使用其他方法并使用其他方式使用原始的AuthController?
此外,默认身份验证设置为使用电子邮件进行登录,如何在不触及基础文件的情况下将其更改为使用用户名?
所有这些都与“扩展框架”有关吗?
由于
答案 0 :(得分:0)
首先,修改供应商文件总是一个坏主意,因为如果供应商包中有任何更新,更改将被覆盖。
回答你的第一个问题:
如果您想在注册视图中提供一些额外的数据,您可以做两件事。
首先是添加自己的getRegister()方法:
public function getRegister()
{
return view('auth.register')->with(<parameter name>, <parameter value>);
}
此解决方案的缺点是,如果将来特征 getRegister 方法发生任何变化,这些更改将不会合并到您的控制器中。
所以更好的方法是在控制器中重用trait的 getRegister()方法,并将参数添加到任何特征返回值中:
在您的控制器中执行:
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()来更改用于从数据库中获取用户的列。将控制器中的用户名属性设置为列名称就足够了:
public $username = 'login';