2012-09-20 17 views
6

In quali file è necessario apportare modifiche per aggiungere un nuovo controller nel modulo e richiamarlo tramite l'URL.zend framework 2 aggiungi un nuovo controller

C'è un modo in cui aggiungiamo un nuovo file controller e lo chiamiamo tramite url senza modificare altri file di configurazione.

Come sarà molto noioso apportare modifiche ai file di configurazione su ogni aggiunta o modifica nei file del controller.

risposta

4

Per creare un nuovo controller, di avere almeno per

  • creare la classe controller
  • fare in modo di avere un percorso di corrispondenza che soddisfa il vostro scopo (si può prendere quelle esistenti e creane uno nuovo per scopi speciali)
  • crea una voce controllers.invokables nel modulo module.config.php.

Non c'è modo di aggirare questi tre semplici passaggi. Non vedo perché dovrebbe essere un problema adattare lo module.config.php quando si aggiunge un controller: ecco a cosa servono i file di configurazione. Compresa l'apertura, il risparmio e la chiusura, questo richiede ca. 10-15 secondi. Non creerai centinaia di controller, vero?

+6

zf1 wasnt newbei ready, zf2 ancora più difficile :))) – SMka

+0

Non lo direi. Non ho usato ZF1 ma ZF2 ha tanti aspetti carini che ZF1 non ha (secondo l'opinione di altre persone). –

+0

funziona con zf1 per cinque anni. zf2 - davvero, davvero buono :) – SMka

9

Aggiungo un piccolo chiarimento a ciò che Daniel ha detto "assicurati di avere un percorso corrispondente che soddisfi il tuo scopo ...". Per il mio scopo stavo cercando di sistemare percorsi a modulo/Applicazione/src/Applicazione/Controller/IndexController.php e modulo/Applicazione/src/Applicazione/Controller/ProfileController.php, tuttavia ho faticato a risolvere qualsiasi cosa sul mio ProfileController. Inoltre, non era chiaro se ZF2 potesse ospitare più controller in un singolo modulo. Ho pensato che sicuramente doveva e lo è! Considerati i due controller di cui sopra, questo è il modo in cui ho creato il mio array 'router' all'interno di module/Application/config/module.config.php.

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'Application\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     'application' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/application', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'default' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/[:controller[/:action]]', 
         'constraints' => array(
          'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
         ), 
        ), 
       ), 
      ), 
     ), 

     'profile' => array(
      'type' => 'literal', 
      'options' => array(
       'route' => '/profile', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Profile', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
    ), 
), 

Anche questo è ciò che i miei invocabili 'controller' si presentano in modules.config.php in seguito al successo.

'controllers' => array(
    'invokables' => array(
     'Application\Controller\Index' => 'Application\Controller\IndexController', 
     'Application\Controller\Profile' => 'Application\Controller\ProfileController' 
    ), 
), 
+4

Zend 2 non è davvero fattibile ... Non dovrei passare attraverso questo tipo di circuiti per aggiungere un controller. Solo la mia opinione. – aserwin

+0

@ user1815615, spiegazione perfetta :) +1 – SagarPPanchal

-1

Da Zend Framework 2 riferimento

Abbiamo informare l'applicazione sui controller ci aspettiamo di avere nell'applicazione . Questo serve a impedire che qualcuno richieda un servizio che il ServiceManager conosce nel tentativo di interrompere l'applicazione. Il dispatcher utilizza un contenitore speciale con ambito che estrarrà solo i controllori che sono specificatamente registrati con esso, come classi invocate o tramite fabbriche.

src: http://framework.zend.com/manual/2.0/en/modules/zend.mvc.quick-start.html#create-a-route

Aggiungendo i controllori non è correlato al routing, tranne tangenzialmente causa sviluppatori vogliono essere in grado di specificare il controller nella URL . È un problema di sicurezza, poiché trattiamo i controller come servizi.

Questo è uno sforzo (a) per essere espliciti su quali controller sono disponibili e (b) per essere protetti per impostazione predefinita.

Come detto da Matthew Weier O'Phinney.