Zend Framework 2 non ha una nozione di routing ai moduli; tutti i mapping di routing sono tra un pattern URI (per route HTTP) e una classe controller specifica. Detto questo, Zend\Mvc
fornisce un listener di eventi (Zend\Mvc\ModuleRouteListener
) che consente di definire un pattern URI che si associa a più controller in base a un determinato pattern e pertanto emula il "routing del modulo". Per definire un tale percorso, si potrebbe inserire questo come la configurazione di routing:
'router' => array(
'routes' => array(
// This defines the hostname route which forms the base
// of each "child" route
'home' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'site.com',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// This Segment route captures the requested controller
// and action from the URI and, through ModuleRouteListener,
// selects the correct controller class to use
'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(
'controller' => 'Index',
'action' => 'index',
),
),
),
),
),
),
),
(Click here to see an example of this @ ZendSkeletonApplication)
Questa è solo metà dell'equazione, però. È inoltre necessario registrare ogni classe di controller nel modulo utilizzando un formato di denominazione specifico. Questo viene fatto anche attraverso lo stesso file di configurazione:
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController'
),
),
la chiave dell'array è l'alias ModuleRouteListener userà per trovare il controller a destra, e deve essere nel seguente formato:
<Namespace>\<Controller>\<Action>
Il valore assegnato a questa chiave dell'array è il nome completo della classe controller.
(Click here to see an example of this @ ZendSkeletonApplication)
Nota: se non si utilizza ZendSkeletonApplication, o ha rimosso del modulo applicazione predefinita, è necessario registrare il ModuleRouteListener in uno dei propri moduli. Click here to see an example of how ZendSkeletonApplication registers this listener
Grazie mille per le spiegazioni chiare e precise. Ho preso la tua soluzione. Ho faticato così tanto su questo. – Sapher
È stato grandioso, grazie. – cr125rider
uso mamp pro e creo un sottodominio sul mio nome host virtuale, quindi dopo aver usato reseller.myhost.com/test è okey ma se scrivo reseller.myhost.com va all'indice dell'applicazione non indexaction del mio modulo –