Поэтому я начинаю работать в платформе Zend и планирую внедрить сеанс «User» на сайте. Я могу легко получить доступ со всех модулей / контроллеров в приложении.
Я хотел бы, должен ли я создать новое пространство имен в библиотеке и расширить контроллер, например:
class MYCUSTOMLIB_Controller_Action extends Zend_Controller_Action { protected $_userSession; function preDispatch(Zend_Controller_Request_Abstract $req) { $this->_userSession = new Zend_Session_Namespace('user'); } }
А затем у меня все мои контроллеры / модули / etc?
Или я должен создать плагин или что? Как бы вы решили сделать этот плагин для передачи пользовательского сеанса контроллеру?
Или я делаю это в бутстрапе? Опять как пройти к контроллеру?
Также следует использовать Zend_Session_Namespace или Zend_Http_Cookie, а также как мне шифровать и xss чистить файл cookie или это делается автоматически?
Я бы тоже инициализировал в бутстрапе:
//Bootstrap.php protected function _initUserSession() { return new Zend_Session_Namespace('user'); }
Тогда я использовал бы помощник действий:
// library/App/Controller/Action/Helper/Session.php class App_Controller_Action_Helper_Session extends Zend_Controller_Action_Helper_Abstract { function direct() { return $this->getFrontController()->getParam('userSession'); } }
Вы получаете доступ к нему в своем контроллере следующим образом:
function indexAction() { $session = $this->_helper->session; }
Вы должны инициализировать сеанс в начальной загрузке. Вы можете либо поместить его в Zend_Registry, либо получить доступ к нему таким образом, либо с ваших контроллеров, вы можете получить доступ к вашему загрузочному блоку, вызвав $ this-> getInvokeArg ('bootstrap').
// in your controllers public function init() { $bootstrap = $this->getInvokeArg('bootstrap'); $this->_session = $bootstrap->getResource('session'); }