2012-01-24 179 views
8

Tengo un método en un controlador decir de esta manera. De hecho, estoy en la necesidad de declarar una función checkLogin de modo que pueda usar en varias método de controlador, como a continuación:Symfony 2 Llamar a una función en un método de controlador

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

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

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

En el caso anterior, cuando lo estoy haciendo así, que estoy recibiendo el error siguiente:

Fatal error: Llamada a función no definida NouPei \ WebSiteBundle \ Controller \ checkLogin() en /home/noor/noupei/website/WebSiteBundle/Controller/DefaultController.php en la línea 142

+4

Eso es un mal diseño de software. No deberías colocar eso en un controlador. –

Respuesta

21

Es un método, no una función:

if (self::checkLogin()){} 
5

para la cuenta administración en Symfony 2, debe usar la administración de seguridad de Symfony 2 (here). Podrá comprobar la conexión del usuario así:

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 
} 

Source

Si no desea utilizar la gestión de seguridad de Symfony 2, se debe utilizar para hacer services métodos disponibles para cada controladores.

+0

no olvide el inicio de sesión, quiero poder llamar a otra función dentro de un método – Noor

+0

Usted siempre puede llamar funciones dentro de un método ... No entiendo lo que quiere decir – BlackCharly

17

puede llamar a la función como esta:

$this->checkLogin(); 
1

Hay varias maneras de hacer esto:

  1. Uso el firewall proporcionado por Symfony. Se puede configurar en app/config/security.yml bajo la access_control: - {ruta: ^/anyurl forma/patrón $, papel: ROLE_USER}

    usando este método: Symfony habrá el de verificar la validez de la sesión. y si la sesión no es válida, redirigirá al usuario automáticamente a la página de inicio de sesión y un usuario no autenticado nunca podrá visitar estas páginas si no está conectado.

    La implementación de este método también tiene varias opciones antes de que funcione. Es posible que necesite crear su propio Proveedor o Uso y uno existente. Recomiendo FOSUserBundle. Este paquete tiene una variedad sobre cómo administrar al usuario. Otra opción es crear su propio Provider si desea validar externamente especialmente cuando usa el (SOA) de la API para verificar la autenticidad del usuario.

  2. Si desea agregar un método que se utilizará para todos los Controladores.Está bien que crear una clase que se extiende Controlador de Symfony:

    BaseController clase extiende controlador { protegida función checkLogin() {} }

    defaultController clase extiende BaseController { función pública testAction() { $ loggedIn = $ this-> checkLogin(); }}

O puede crear un rasgo e incluirlo en su controlador.

trait ControllerTrait 
{ 
    protected function checkLogin(){} 
} 

class DefaultController extends BaseController 
{ 
     use ControllerTrait; 

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

Pero recomiendo usar el firewall por razones de seguridad y ofrece mucha funcionalidad y control de seguridad.

Cuestiones relacionadas