2015-04-18 2 views
3

Я использую Symfony 2.6.6. И моя структура папокЗафиксируйте все URL-адреса в Symfony2

ExampleBundle 
    Controller 
     LoginController.php 
     Other1Controller.php 
     Other2Controller.php 
     ... 

LoginController имеет loginAction() и loginCheckAction()
LoginAction() покажет регистрационную форму и loginCheckAction() для проверки того, что.

Я вижу учебник для создания LoginController.php. После авторизации пользователя путем проверки я установил:

$session->set('login', $login); 

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

Но на моем сайте много контроллеров и действий (страниц).

Моя идея: проверка сеанса «входа» существует во всех действиях всех контроллеров и перенаправление на действие входа, если не существует.

Но я думаю, что это слишком руководство. Каков наилучший способ сделать это с Symfony?

Update 1:
После этого я пытаюсь добавить некоторый код в мой security.yml файл. Он перенаправляется на страницу входа в систему, если пользователь не зарегистрирован, но всегда перенаправляется на страницу входа. Я хочу, чтобы пользователь входил в систему (имеет раздел «login»), он может обращаться к другим страницам. как сделать что благодаря

# .../security.html 
security: 
    firewalls: 
     ex_login: 
      pattern: ^/ex/login$ 
      anonymous: ~ 
      security: false 
     secured_area: 
      pattern: ^/ex 
      form_login: 
       check_path: /ex/logincheck 
       login_path: /ex/login 
      logout: 
       path: /ex/logout 
       target: /ex 

обновления 2
Вот мой Login Controller

 loginAction() { 
      $session = $this->getRequest()->getSession(); 
      if ($session->has('login')) { 
       //redirect to home/index 
      }else { 
       //render login form 
      } 
     } 
     logincheckAction(Request $request) { 
      if($request->getMethod()=='POST') { 
       // check user input (username && password) in database 
       if (ok){ 
        $session->set('login', 'true'); 
        //redirect to home/index 
       } 
       else { 
        //redirect to login/index 
       } 
      }else { 
       //redirect to login/index 
      } 
     } 
     logoutAction() { 
      //remove login session 
      // redirect to login/index 
     } 

Вот мой Other1Controller.php

indexAction(){ 
    echo 'page1'; 
} 

Он всегда Перенаправление на страницу входа в систему. После того, как я заполнил свое поле и прошу войти в систему, он все же перенаправляется на страницу входа? как я могу исправить это.

+1

почему нет компонента использовать безопасности в Symfony ? – ghanbari

+1

прочитайте эту книгу: http://symfony.com/doc/current/book/security.html – ghanbari

+0

@ghanbari Вы имеете в виду, что я делаю правильный путь, но используя security.yml вместо Моя идея? PLZ дать мне правильный пример. B/C у меня есть много контроллеров – DeLe

ответ

-1

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

The official documentation

+1

plz дайте мне пример для того, чтобы каждый пользователь должен был войти в систему перед доступом ко всем методам Other1 и Other2 Controller thanks – DeLe

2

Моя идея заключается в том, чтобы защитить все URLs, если только некоторые первой необходимости URLs как логин и выход из системы

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/, role: ROLE_ADMIN } 
    - { path: ^/, role: ROLE_USER } 

Убедитесь, что каждый пользователь имеет по крайней мере ROLE_USER

+1

Вы можете использовать 'IS_AUTHENTICATED_FULLY' вместо' ROLE_USER', чтобы избежать необходимости иметь 'ROLE_USER' для каждого пользователя. – Jeet

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

  • Нет связанных вопросов^_^