Вопрос о компоненте Set () в cakePHP - PullRequest
1 голос
/ 21 июля 2010

Я использую cakePHP 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 ]

2 голосов
/ 21 июля 2010

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

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

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

1 голос
/ 22 июля 2010

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

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

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));
}
...