我不能在类方法中使用属性

时间:2018-05-20 22:12:13

标签: php oop

我想查看我的请求他们是否有csrf令牌。所以我创建了几个类来检查它。

在我的第一堂课中,我检查了请求并获得了令牌

$this->token

然后我用CSRF类检查请求。问题是,我无法在checkToken()方法中使用public function handle($request, Closure $next) { $lang = SystemSetting::find('System Language'); \App::setLocale($lang->value); return $next($request); } ,它表示null,但是当我在__construct中使用var_dump时,它也会为我提供令牌..

为什么这个hapennig?我该如何解决这个问题?我尝试使用checkToken()方法将$ token作为参数传递,但我得到了相同的结果..

2 个答案:

答案 0 :(得分:0)

问题不在于变量,而是if()语法只是错误。

你有两个选择,我强烈建议第一个:

if (in_array(current_method(),array('POST,'PUT','PATCH')){

 if (current_method() == "POST" || current_method() =="PUT" || current_method() == "PATCH") {

答案 1 :(得分:0)

史密斯回答说,你的语法错了。请参阅下面的代码的修改版本。

另外,关于良好编码实践的一点点,你的current_method()函数不清楚并且可能正在使用合理数量的资源(可能或可能不是)但在这种情况下,最好一次调用这些函数并且将返回值存储在变量

protected function checkToken()
{
    $currentMethod = current_method();
    if (in_array($currentMethod, ["POST", "PUT", "PATCH"])) {
        if (CSRF::verifyToken(@$_POST['token'])) {
            $this->checkPrefix();
        }
    } elseif (in_array($currentMethod, ["GET", "DELETE"])) {
        if (CSRF::verifyToken($this->token)) {
            $this->checkPrefix();
        }
    }
}

您也可以使用switch阻止这些:

protected function checkToken()
{
    $currentMethod = current_method();
    switch ($currentMethod) {
        case "POST":
        case "PUT":
        case "PATCH":
            if (CSRF::verifyToken(@$_POST['token'])) {
                $this->checkPrefix();
            }
            break;
        case "GET":
        case "DELETE":
            if (CSRF::verifyToken($this->token)) {
                $this->checkPrefix();
            }
            break;
        default:
            // may be something else?
    }
}