Используйте сессию в статическом методе (cakephp 4 и 3.6+) - PullRequest
0 голосов
/ 30 апреля 2019

Если я попробую это класс со статическими методами:

public static function chkLog($role)
{
    $userrole = $this->getRequest()->getSession()->read('userrole');
   return $userrole;
   /// more code

Даже пробовал:

    public static function chkLog($role)
{
    $userrole = Session::read('userrole');
   return $userrole;
   /// more code

В Laravel я могу:

public static function userRole($role = null)
{
    $userrole = Auth::user()->role;
    $checkrole = explode(',', $userrole);
    if (in_array($role, $checkrole)) {
        return $role;
    }
    return false;
}

использование

public function scopegetPets($query, $petsearch = '')
{
    $petsearch = $petsearch . "%";
    $query = Pet::where('petname', 'like', $petsearch);
    if (ChkAuth::userRole('admin') === false) {
        $userid = Auth::user()->id;
        $query->where('ownerid', '=', $userid);
    }
    $results = $query->orderBy('petname', 'asc')->paginate(5);
    return $results;
}

Но для того, чтобы звонить статически, мне нужно было написать это:

    public static function __callStatic($method, $params)
{
    $instance = ChkAuth::class;
    $c = new $instance;
    return $c->$method(...array_values($params));
}

Чтобы позвонить по этому номеру:

public function userRole($role = null)
{
    $userrole = $this->getRequest()->getSession()->read('userrole');
    $checkrole = explode(',', $userrole);
    if (in_array($role, $checkrole)) {
        return $role;
    }
    return false;
    // more

И использование:

   public function getPets($offset = "", $rowsperpage = "", $petsearch = "")
{
    $pagingQuery = "LIMIT {$offset}, {$rowsperpage}";
    $petsearch = $petsearch . "%";
    if (Auth::chkRole('admin') === true) {
        return DB::select("SELECT * FROM " . PREFIX . "pets " . $pagingQuery);
    }
    $authid = Auth::authId();
    return DB::select("SELECT * FROM " . PREFIX . "pets WHERE ownerid = :authid " . $pagingQuery, ["authid" => $authid]);
}

Так что в основном я пытаюсь выяснить, как использовать сессию в торт php внутри статического метода.

Обратите внимание, что __callStatic работает, но как работа раунд.

1 Ответ

0 голосов
/ 30 апреля 2019
Класс

CakePHP Router включает статическую функцию для возврата объекта запроса.Объект запроса включает функцию для возврата сеанса.Итак:

Router::getRequest()->session()

или, начиная с версии 3.5:

Router::getRequest()->getSession()
...