我正在制作一个在一个文件中处理无聊的auth东西的课程 但是我在调用auth函数方面遇到的问题很小。
我遇到的第一个问题是这个功能:
hasTooManyLoginAttempts
代码
if ($this->hasTooManyLoginAttempts($request)) {
触发错误:
Using $this when not in object context
当我更改$ this->自我::
if (self::hasTooManyLoginAttempts($request)) {
触发器
Non-static method My\AuthClass::hasTooManyLoginAttempts() should not be called statically
示例课程I尝试使用
namespace My\AuthClass;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
class AuthClass
{
use AuthenticatesUsers;
public static function doLogin(Request $request)
{
// Validate login
// Has too many login attempts?
if (self::hasTooManyLoginAttempts($request)) {
self::fireLockoutEvent($request);
return redirect()->route('login.show')->with('error', 'You have tried to login too many times in short amount of time. Please try again later.');
}
// Try authenticate
// Send login error
}
}
帮助表示赞赏!
答案 0 :(得分:1)
public static function doLogin(Request $request)
显然是静态函数,而hasTooManyLoginAttempts
则不是。
您不能使用双冒号调用它,也不能在静态上下文中使用$this
。相当困境。
您必须创建一种解决方法:
class AuthClass
{
use AuthenticatesUsers;
private static $instance = null;
public static function doLogin(Request $request)
{
// Validate login
$self = self::init();
// Has too many login attempts?
if ($self->hasTooManyLoginAttempts($request)) {
$self->fireLockoutEvent($request);
return redirect()->route('login.show')->with('error', 'You have tried to login too many times in short amount of time. Please try again later.');
}
// Try authenticate
// Send login error
}
public static function init() {
if(null === self::$instance) {
self::$instance = new self;
}
return self::$instance;
}
}
这里的重要部分是新的init()
功能(您可以根据需要为其命名)。它将创建当前类的新实例,并允许您在“静态”上下文中使用->
(它不是真正的静态)。
正如用户Tuim在评论中指出的那样,门面也可以起作用,但“技巧”大致相同。