2012-01-24 13 views
8

Ho un metodo in un controller dire in questo modo. In realtà, io sono in necessità di dichiarare una funzione checkLogin in modo che possa essere usata in diversi metodo di controllo come di seguito:Symfony 2 Chiamare una funzione in un metodo di controller

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

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

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

Nel caso di cui sopra, quando sto facendo in questo modo, mi sto il seguente errore:

Fatal error: Call to undefined function NouPei \ WebSiteBundle \ controller \ checkLogin() in /home/noor/noupei/website/WebSiteBundle/Controller/DefaultController.php on line 142

+4

Questa è una cattiva progettazione del software. Non dovresti metterlo in un controller. –

risposta

21

E 'un metodo, non una funzione:

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

per conto gestione in Symfony 2, è necessario utilizzare la gestione della sicurezza di symfony 2 (here). Sarete in grado di controllare l'accesso utente in questo modo:

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

Se non si desidera utilizzare Symfony 2 gestione della sicurezza, è necessario utilizzare services per rendere i metodi disponibili per ogni controller.

+0

non dimenticare il login, voglio essere in grado di chiamare un'altra funzione all'interno di un metodo – Noor

+0

Sei sempre in grado di chiamare le funzioni all'interno di un metodo ... Non capisco cosa intendi – BlackCharly

17

è possibile chiamare la funzione in questo modo:

$this->checkLogin(); 
1

Ci sono diversi modi per farlo:

  1. Usa il firewall fornito da Symfony. È possibile configurare in app/config/security.yml sotto la access_control: - {path: ^/anyurl-forma/modello $, ruolo: ROLE_USER}

    con questo metodo: symfony sarà quello per verificare la validità della sessione. e se la sessione non è valida, reindirizzerà automaticamente l'utente alla pagina di accesso e un utente non autenticato non potrà mai visitare queste pagine se non ha effettuato l'accesso.

    L'implementazione di questo metodo ha anche diverse opzioni prima che funzioni. Potrebbe essere necessario creare il proprio Provider o Usa e quello esistente che raccomando FOSUserBundle. Questo pacchetto ha una varietà su come gestire l'utente. Un'altra opzione è la creazione del proprio Provider se si desidera validare esternamente specialmente quando si utilizza l'API (SOA) per verificare l'autenticità dell'utente.

  2. Se si desidera aggiungere un metodo che verrà utilizzato per tutti i controller.E 'o si crea una classe che si estende controller di Symfony:

    classe BaseController estende controller { protetta funzione checkLogin() {} }

    classe DefaultController estende BaseController { funzione pubblica testAction() { $ loggedIn = $ this-> checkLogin(); }}

In alternativa è possibile creare un tratto e includerlo nel vostro controller.

trait ControllerTrait 
{ 
    protected function checkLogin(){} 
} 

class DefaultController extends BaseController 
{ 
     use ControllerTrait; 

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

Ma consiglio vivamente di utilizzare il firewall per motivi di sicurezza e offre molte funzionalità e controllo di sicurezza.

Problemi correlati