Я использую zend.
Я хочу определить приведенный ниже код за пределами класса контроллера и доступа в разных действиях.
$user = new Zend_Session_Namespace('user'); $logInArray = array(); $logInArray['userId'] = $user->userid; $logInArray['orgId'] = $user->authOrgId; class VerifierController extends SystemadminController { public function indexAction() { // action body print_r($logInArray); } }
Но он не печатает этот массив в функции индекса, с другой стороны, он показывает этот массив вне класса.
Как это возможно. Благодарю.
Чтобы получить доступ к глобальной переменной изнутри метода / функции, вы должны объявить ее global
как внутри метода / функции:
class VerifierController extends SystemadminController { public function indexAction() { global $logInArray; // action body print_r($logInArray); } }
В руководстве см. Раздел « Область переменной» .
Тем не менее, обратите внимание, что использование глобальных переменных не является довольно хорошей практикой: в этом случае ваш класс больше не является независимым: он полагается на наличие и правильное определение внешней переменной – что плохо .
Возможно, решение будет состоять в следующем:
print_r ($ GLOBALS [ 'logInArray']);
Вы можете хранить пользователя разными способами и получать доступ к нему более чистым способом. Вы можете сохранить его в Zend_Registry, а затем использовать Zend_Registry :: get ('user'), где вам нужно получить пользователя. Вы также можете сохранить его как параметр объекта запроса, а затем в контроллере просто выполните $ user = $ this -> _ getParam ('user');
Если вам нужен доступ к массиву пользователей во многих контроллерах, которые наследуются от SystemadminController, то вы можете сохранить его как защищенное свойство SystemadminController (например, protected $ _user). Тогда все, что вам нужно сделать в дочерних контроллерах, – это $ this -> _ user.