Вопрос о компоненте Set() в cakePHP

Я использую торт PHP 1.26.
В контроллере я получил функцию:

function testing(){
$userinfo=$this->Test->findAllByuser_id();
$this->set('userinfo',$userinfo);
}

Я обнаружил, что переменная "userinfo", которая содержит некоторые данные массива, была доступна только в testing.ctp.
чтобы сделать переменную userinfo доступной для других файлов.ctp, я использовал этот помощник:

 $this->Session->write('userinfo', $userinfo);     

Тем не менее, я не уверен, почему переменная, определенная функцией Set(), не может быть доступна другим файлам.ctp, но Session может.
Есть ли лучший способ сделать то же самое, используя другой метод вместо использования сеанса?
Пожалуйста, порекомендуйте.

2 ответа

Решение

Вы также можете инкапсулировать функцию в модели.

В пользовательской модели

function getUserinfo($id)
{
    return $this->findByUser_id($id);
}

Затем вы вызываете его в другом контроллере с инициализацией модели пользователя.

/*in another controller*/
function someAction($uid)
{
    $this->User = ClassRegistry::init("User"); // or you can use `$uses = array('User');`
    $this->set("userinfo",$this->User->getUserInfo($uid));
}

Вообще говоря, каждый метод контроллера взаимодействует только с его представлением (то есть ctp файл, расположенный в папке с именем в соответствии с именем контроллера и именем в соответствии с именем метода). Если этот контроллер называется Testsтогда переменные set() в его testing() метод будет доступен только для ctp файл идентифицирован как views/tests/testing.ctp,

Чтобы сделать эту информацию доступной в другом месте, вы должны либо сохранить ее - как вы делаете в сеансе - либо запустить контроллер с помощью "внешнего" метода, такого как requestAction(),

Для начала просто поймите, что данный метод контроллера напрямую совпадает с одним и только одним представлением (опять же, с риском упрощения).

Другие вопросы по тегам