Перенаправление Cakephp 3.x не работает в том же контроллере, используя другой метод в той же функции

Я использую cakephp 3.x, и у меня есть функция edit в моем контроллере, в которой я проверяю, есть ли идентификатор в строке запроса или нет, а также есть ли он существует в записи базы данных или нет. Ниже приведен мой код, который отлично работает.

UsersController.php

public function edit($id = null)    
{

    // first checking whether id sent or not .. 
    if(empty($this->request->params['pass']))
    {
        $this->Flash->error('Invalid Action');
        return $this->redirect(['action' => 'index']);
    }        


    // Now checking whether this user id exists or 

    $check_user = $this->Users
                    ->find()
                    ->where(['user_id' => $id])
                    ->toArray();
    if(!$check_user)
    {
         $this->Flash->error('Invalid Id, User not found');
        return $this->redirect(['action' => 'index']);
    }

    $user = $this->Users->get($id); 

    // And so on 
 }

Дело в том, что я использую этот же код во многих других функциях, чтобы проверить то же самое, поэтому я придумал создать общую функцию в том же контроллере и использовать ее в нескольких функциях, как показано ниже.

UsersController.php (обновлено)

public function checkId($id)
{
    // first checking whether id sent or not .. 
    if(empty($this->request->params['pass']))
    {
        $this->Flash->error('Invalid Action');
        return $this->redirect(['action' => 'index']);
    }        


    // Now checking whether this user id exists or 

    $check_user = $this->Users
                    ->find()
                    ->where(['user_id' => $id])
                    ->toArray();
    if(!$check_user)
    {
         $this->Flash->error('Invalid Id, User not found');
        return $this->redirect(['action' => 'index']);
    }
}

public function edit($id = null)    
{
    $this->checkId($id);
}

Теперь, если я выполню URL-адрес в своем браузере http://localhost/5p_group/users/edit/ я получаю сообщение об ошибке Запись не найдена в таблице «пользователи» с первичным ключом [NULL]

Может ли кто-нибудь подсказать мне, как выполнить оба этих 2 условия (проверить идентификатор в URL-адресе или нет, а также является ли он действительным идентификатором или нет), используя общую функцию, которую я создал выше.. она работает абсолютно нормально, если я поместил этот код внутри моя та же функция edit().

Любая помощь или предложение будут высоко оценены.

Спасибо


person Mittul At TechnoBrave    schedule 06.10.2016    source источник
comment
Проблема в том, что это вообще не перенаправление... если я поставлю die('test'); в свою функцию edit() сразу после этого кода $ this-›checkId($id); показывает это сообщение, но этого не должно быть .. оно должно перенаправлять, так как я не ввел id в самом URL-адресе, который отлично работает, если я поставлю тот же код в моей функции edit.   -  person Mittul At TechnoBrave    schedule 06.10.2016


Ответы (1)


В своем коде вы забыли добавить параметр функции $id, вы уже используете его в запросе

public function checkId()

изменить на

public function checkId($id)

[Обновлять]

Вот также проблема с возвратом функции

if(empty($id))
{
    $this->Flash->error('Invalid Action');
    return $this->redirect(['action' => 'index']);
}

изменить на >>

if(empty($id))
{
    $this->Flash->error('Invalid Action');
    $this->response = $this->redirect(['action' => 'index']) ;
    $this->response->send () ;
    die () ;
}
person tarikul05    schedule 06.10.2016
comment
я обновил свой код в своем вопросе выше .. но он все еще не работает для меня. Имея ту же ошибку. - person Mittul At TechnoBrave; 06.10.2016
comment
может быть, вы не поняли мое требование должным образом, я боюсь. - person Mittul At TechnoBrave; 06.10.2016
comment
если вы не передали идентификатор пользователя в URL, то $this-›checkId($id); здесь идентификатор будет нулевым, и вы получите пользователей с ошибкой с первичным ключом [NULL] - person tarikul05; 06.10.2016
comment
но это то, что я проверяю, используя if(empty($this-›request-›params['pass'])) в своем коде. - person Mittul At TechnoBrave; 06.10.2016
comment
у вас есть еще одно несоответствие в if(empty($this-›request-›params['pass'])) не работает, просто используйте if(empty($id)) - person tarikul05; 06.10.2016
comment
Давайте продолжим это обсуждение в чате. - person Mittul At TechnoBrave; 06.10.2016