2012-09-20 33 views
6

En qué archivos necesitamos hacer cambios para agregar un nuevo controlador en el Módulo y llamarlo a través de la URL.zend framework 2 add new controller

Hay una manera en que agregamos un nuevo archivo de controlador y lo llamamos a través de url sin cambiar ningún otro archivo de configuración.

Como será muy tedioso hacer cambios en los archivos de configuración en cada complemento o edición en los archivos del controlador.

Respuesta

4

Para crear un nuevo controlador, que tiene al menos a

  • crear la clase del controlador
  • asegurarse de que tienes una ruta coincidente que satisface su propósito (se puede tomar los existentes, así como cree uno nuevo para fines especiales)
  • cree una entrada controllers.invokables en el módulo module.config.php.

No hay forma de evitar estos tres sencillos pasos. No veo por qué debería ser un problema adaptar el module.config.php cuando agrega un controlador: para eso están los archivos de configuración. Incluyendo abrir, guardar y cerrar, esto lleva aprox. 10-15 segundos. No vas a crear cientos de controladores, ¿verdad?

+6

zf1 wasnt newbei ready, zf2 aún más difícil :))) – SMka

+0

No diría eso. No he usado ZF1 pero ZF2 tiene tantos aspectos agradables que ZF1 no tiene (de acuerdo con la opinión de otras personas). –

+0

trabajando con zf1 durante cinco años. zf2: realmente muy bueno :) – SMka

9

Agrego un poco de aclaración a lo que dijo Daniel sobre "asegúrese de tener una ruta que satisfaga su propósito ...". Para mi propósito, estaba tratando de acomodar rutas al módulo/Application/src/Application/Controller/IndexController.php y module/Application/src/Application/Controller/ProfileController.php, sin embargo tuve problemas para resolver cualquier cosa con mi ProfileController. Tampoco estaba claro si ZF2 podría acomodar múltiples controladores en un solo módulo. ¡Pensé que seguramente debe y lo hace! Dado los dos controladores anteriores, así es como diseñé mi matriz 'enrutador' dentro del módulo/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', 
       ), 
      ), 
     ), 
    ), 
), 

También esto es lo invokables mis 'controladores' se ve como en modules.config.php siguiente éxito.

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

Zend 2 realmente no es tan funcional ... No debería tener que pasar por aros así para agregar un controlador. Solo es mi opinión. – aserwin

+0

@ user1815615, explicación perfecta :) +1 – SagarPPanchal

-1

De Zend Framework 2 referencia

Nos informar a la aplicación sobre los controladores que esperan tener en la aplicación . Esto es para evitar que alguien solicite cualquier servicio que el ServiceManager conozca en un intento de romper la aplicación. El despachador utiliza un contenedor especial de ámbito que solo extraerá los controladores que estén específicamente registrados con él, ya sea como clases invokables o mediante fábricas.

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

Adición de los controladores no está relacionado con el enrutamiento, excepto tangencialmente debido a los desarrolladores que desean ser capaces de especificar el controlador en el URL . Es un problema de seguridad, debido al hecho de que tratamos los controladores como servicios.

Este es un esfuerzo (a) para ser explícito sobre qué controladores están disponibles, y (b) para estar seguros de forma predeterminada.

Según lo dicho por Matthew Weier O'Phinney.

Cuestiones relacionadas