2013-08-20 3 views
0

В моем приложении у меня есть главный контроллер, в котором у меня есть несколько методов. Один из них проверяет, если пользователь вошел в систему, и если не перенаправляет пользователя войти в форму и т.д.Контроллер Zend простирается от двух классов

class FA_Controller_Auth extends Zend_Controller_Action { 
    public function preDispatch() { 
    //chceck user is login 
    } 
} 

а и все контроллеры простираются от этого основного класса

IndexController extends FA_Controller_Auth{} 

но теперь я строю мульти платеж gatwey из Zend_Payment_Controllerso Payment_GatewayController должен распространяться от Zend_Payment_Controller. Но мне нужно Chack, если пользователь вошел в систему или нет, и я ищу Somthing как несколько расширить

Payment_GatewayController extends Zend_Payment_Controller, FA_Controller_Auth 

Я знаю, что нет никакого способа, чтобы использовать несколько расширить класс в PHP, но может быть, есть лучший способ сделать это, помощник действий или плагин для проверки авторизации? С уважением.

С уважением.

ответ

1

Вы можете расширить только один класс. Именно поэтому использование класса базового контроллера считается плохой практикой, поскольку оно несколько ограничивает вас. Вместо этого вы должны переместить логику для обеих проверок в плагины контроллера.

+0

спасибо большое, что было очень полезно! Но контроллер плагин запускается для каждого контроллера и действия, но некоторые действия не должны быть проверены на наличие разрешения, так что я должен сделать это отключена проверка авторизации для этого действия: класс 'SilverCms_Controller_Plugin_Auth расширяет Zend_Controller_Plugin_Abstract { общественная функция dispatchLoopStartup (Zend_Controller_Request_Abstract $ oRequest) { $ sAction = strtolower ($ oRequest-> getActionName()); if ($ sAction === 'confirmEmail') { return; }} ' Возможно, есть лучший способ сделать это? –

+1

Нет, как вы это делаете, это лучший способ. –

+0

хорошо, спасибо за помощь! –

Смежные вопросы