我试图通过遵循这个问题中的建议来覆盖Laravel 5中的注册函数。然而,在我的例子中,我并没有试图从注册页面重定向用户。相反,我只想注册新用户,但保持当前(管理员)用户登录。默认函数验证并登录新用户,然后重定向到“主页”。下面是我尝试添加到AuthController的内容。php:
// OVERRIDE FUNCTION IN AuthenticatesAndRegistersUsers (located under /Illuminate/Foundation/Auth)
public function postRegister(Request $request) {
$validator = $this->registrar->validator($request->all());
if ($validator->fails())
{
$this->throwValidationException(
$request, $validator
);
}
//$this->auth->login($this->registrar->create($request->all()));
$this->registrar->create($request->all());
return redirect('admin');
}
我认为我很聪明,只是创建了新帐户,然后将当前用户重定向到管理页面。但是,没有创建任何用户,也没有发生重定向。任何想法都将不胜感激!
您可能希望更改的另一个默认行为是在注册表之后立即自动登录。您可能希望将用户重定向到单独的“成功”页面,并期望他们稍后手动登录。
为此,需要重写trait registerUsers的register()方法。
我们上面讨论的控制器,寄存器控制器,使用这个重要的特性:
class RegisterController extends Controller
{
use RegistersUsers;
// ... all other code of controller
This trait performs all the “dirty work” of registration. It is part of the core
framework, located in
vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php:
trait RegistersUsers
{
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
// ... A few other methods
}
要禁用自动登录,您需要删除此特定行:
$this->guard()->login($user);
但您不能直接编辑Laravel core或其内部/供应商的任何部分。您可以做的是重写相同的方法并将其放入RegisterController中,如下所示:
namespace App\Http\Controllers\Auth;
// DON'T FORGET TO ADD THESE TWO!
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
// ... Other methods
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
}
最后,注意重定向到参数或方法,如前一个技巧中所示,这样您的注册用户将登录到正确的页面。
看看artisan rout:list,在哪里调用postRegister?
您需要重写寄存器函数。
如果我是你,我宁愿在我的模型中使用“创建”静态方法,例如:对于注册,我使用“用户”模型,然后我只需使用:
User::create($data = array());
它只将数据存储到用户模型中的表中。然后简单地说:
return redirect('admin');
新用户将不会登录到该站点。它只是将数据存储到数据库中的表中。
问题内容: 场景: 该代码不起作用,而且我找不到像继承那样来调用trait函数的方法。我打过电话,,,和以下内容: 没用。 有没有办法使它起作用,或者我必须完全重写特质函数,它比这要复杂得多:) 问题答案: 您的最后一个快到了: 特质不是阶级。您不能直接访问其成员。基本上只是自动复制和粘贴…
我在将应用程序从Java镜像到Kotlin时遇到了一些问题。我用java编写了这个类,效果很好: 在IntelijiIdea中自动转换后,它开始变成这样 但编译器告诉我 意外重写:以下声明具有相同的JVM签名(to boolean(Ljava/lang/String;)Z): fun toBoolean(p0: String?):在my . util . booleanutils fun to B
问题内容: 我正在使用内置的django登录和注销。在我的Project / urls.py中,我添加了用于登录和注销的URL。 我的帐户应用程序文件夹中有模板文件夹。我有这样的目录结构 我已经阅读了django文档,其中说对于login()默认模板是registration / login.html,这在我的项目中工作正常,而logout()默认模板是registration / logged_
问题内容: 有没有一种方法可以使类函数不可重写?类似于java的关键字。即,任何覆盖的类都不能覆盖该方法。 问题答案: 问题是您正在尝试使用Java哲学来用Python编写。有些东西会延续,但不是全部。在Python中,您可以执行以下操作,这非常好,但是完全违反了Java对对象的看法。 如果您确实需要,可以尝试此处发布的代码。但是正如您所看到的,有很多代码可以让它执行您想要的操作。还应注意,即使是
问题内容: 是否有可能覆盖 全局 功能,从而在一定程度上影响 全局 功能? 据我所知,该函数在包装NodeJS脚本的函数中作为参数提供: 有什么方法可以修改功能吗? 这可能只会影响脚本所在的脚本。 我们如何在流程级别进行修改? 问题答案:
问题内容: 有什么方法可以防止子类覆盖基类中的方法? 我的猜测是没有,但是我来自.NET界,并且我正试图使我的API尽可能健壮,因此,任何输入都将不胜感激。 可以强制执行吗?我知道编译器无济于事,所以也许通过一些运行时检查来解决?还是这不是一种处理事情的Python方法? 问题答案: 您是对的:您的尝试与Python的结构及其文化背道而驰。 记录您的API,并教育您的用户如何使用它。这是他们的程序