Вопрос о компоненте 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()
,
Для начала просто поймите, что данный метод контроллера напрямую совпадает с одним и только одним представлением (опять же, с риском упрощения).