Symfony 2 вызов функции в методе контроллера
У меня есть метод в контроллере, скажем так. На самом деле, мне нужно объявить функцию checkLogin, чтобы я мог использовать в нескольких контроллерах метод, как показано ниже:
class DefaultController extends Controller
{
/**
* @Route("/test")
* @Template()
*/
public function testAction()
{
if (checkLogin()){}
else {}
exit;
}
public static function checkLogin()
{
return 1;
}
}
В приведенном выше случае, когда я делаю это так, я получаю следующую ошибку:
Фатальная ошибка: вызов неопределенной функции NouPeiWebSiteBundleControllercheckLogin () в /home/noor/noupei/website/WebSiteBundle/Controller / DefaultController.php on line 142
4 ответов:
Для управления учетными записями в Symfony 2 следует использовать управление безопасностью symfony 2 (здесь). Вы сможете проверить логин пользователя следующим образом:
public function indexAction() { // show different content to admin users if ($this->get('security.context')->isGranted('ADMIN')) { // Load admin content here } // load other regular content here }Если вы не хотите использовать Symfony 2 security management, вы должны использовать services, чтобы сделать методы доступными для всех контроллеров.
Есть несколько способов сделать это:
Используйте брандмауэр, предоставляемый Symfony. Вы можете настроить его в app / config / security.в формате YML под access_control: - { path: ^ / anyurl-form / pattern$, role: ROLE_USER }
Используя этот метод: symfony будет тем, кто проверит валидность сеанса. и если сеанс недействителен, он автоматически перенаправит пользователя на страницу входа, и не прошедший проверку подлинности пользователь никогда не сможет посетить эти страницы. страницы, если не логгедин.
Реализация этого метода также имеет несколько вариантов, прежде чем он будет работать. Возможно, Вам потребуется создать свой собственный провайдер или использовать и существующий, который я рекомендую FOSUserBundle. В этом пакете есть множество способов управления пользователем. Другой вариант-создание собственного поставщика , если вы хотите проверить внешнюю проверку специально, когда вы используете api (SOA) для проверки подлинности пользователя.
Если вы хотите добавить метод это будет использоваться для всех контроллеров. Либо вы создаете класс, который расширяет контроллер Symfony:
Класс BaseController расширяет контроллер { защищенная функция checkLogin(){} }
Класс DefaultController расширяет BaseController { публичное функциональное тестирование() { $loggedIn = $this - > checkLogin(); } }
Или вы можете создать признак и включить его в свой контроллер.
trait ControllerTrait { protected function checkLogin(){} } class DefaultController extends BaseController { use ControllerTrait; public function testAction() { $loggedIn = $this->checkLogin(); } }Но я настоятельно рекомендую использовать брандмауэр для обеспечения безопасности. цели и он предлагает много функциональности и проверки безопасности.
Comments