Symfony 2 вызов функции в методе контроллера - PullRequest
9 голосов
/ 24 января 2012

У меня есть метод в контроллере, скажите как это. На самом деле мне нужно объявить функцию checkLogin, чтобы я мог использовать ее в нескольких методах контроллера, как показано ниже:

class DefaultController extends Controller
{
 /**
     * @Route("/test")
     * @Template()
     */
    public function testAction()
    {

        if (checkLogin()){}
            else {}
        exit;
    }

    public static function checkLogin()
    {
        return 1;
    }
}

В приведенном выше случае, когда я делаю это следующим образом, я получаю следующую ошибку:

Неустранимая ошибка: вызов неопределенной функции NouPei \ WebSiteBundle \ Controller \ checkLogin () в /home/noor/noupei/website/WebSiteBundle/Controller/DefaultController.php в строке 142

Ответы [ 4 ]

26 голосов
/ 24 января 2012

Это метод, а не функция:

if (self::checkLogin()){}
17 голосов
/ 24 января 2012

Вы можете вызвать функцию следующим образом:

$this->checkLogin();
5 голосов
/ 24 января 2012

Для управления учетными записями в 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, вы должны использовать services , чтобы сделать методы доступными для каждого контроллера.

2 голосов
/ 07 марта 2014

Есть несколько способов сделать это:

  1. Использовать брандмауэр, предоставленный Symfony.Вы можете настроить его в app / config / security.yml в access_control: - {путь: ^ / anyurl-форма / шаблон $, роль: ROLE_USER}

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

    Реализация этого метода также имеет несколько параметров, прежде чем он будет работать.Возможно, вам придется создать своего собственного провайдера или использовать существующего, которого я рекомендую FOSUserBundle .Этот пакет имеет множество способов управления пользователем.Другим вариантом является создание собственного провайдера , если вы хотите проводить внешнюю проверку, особенно если вы используете API (SOA) для проверки подлинности пользователя.

  2. Если вы хотите добавить метод, который будет использоваться для всех контроллеров.Либо вы создаете класс, расширяющий контроллер Symfony:

    класс BaseController расширяет контроллер {защищенная функция checkLogin () {}}

    класс DefaultController расширяет BaseController {открытая функция testAction () {$ loggedIn =$ this-> checkLogin ();}}

Или вы можете создать черту и включить ее в свой контроллер.

trait ControllerTrait
{
   protected function checkLogin(){}
}

class DefaultController extends BaseController
{
      use ControllerTrait;

      public function testAction() 
      {
        $loggedIn = $this->checkLogin();
      }
}

Но я настоятельно рекомендую использовать брандмауэр в целях безопасности, и он предлагаетмного проверки функциональности и безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...