Domanda

Sto utilizzando Zend Framework per il mio sito web, e appena creato un modulo speciale "api" per creare ... Beh, un'API.

Ora, ho un sacco di controllori a mio modulo e mi piacerebbe creare sottodirectory in questa directory regolatori al fine di "mettere ordine" esso. La mia nuova struttura sarebbe qualcosa di simile a questo:

 - controllers/
 - controllers/contents/[controllers]
 - controllers/users/[controllers]
 - controllers/misc/[controllers]

Comunque, mi trovo totalmente in grado di trovare che tipo di URL e redirezioni utilizzando Zend_Controller_Router_Route potrebbe mappare questi controller. E 'possibile fare questo in qualche modo o devo solo tornare alla struttura normale e mettere tutti i miei controller nella stessa directory?


Ho provato ad utilizzare i separatori _ come suggerito da smack0007 e come sembrava logico dato come Zend Framework di solito si riferisce alle sottodirectory, ma ho ottenuto un errore.


Edit: Rimosso il lungo testo di errore in quanto non era legato alla questione perché era solo un problema perché non ho usato il caso propre, credendo ho dovuto mettere un maiuscolo per la prima lettera della directory. Tutto funziona bene ora.

È stato utile?

Soluzione

Ho fatto questo nel progetto di nuovo nella versione 1.5, ma non so se funzionerà più.

È necessario anteporre i controller con "{FOLDER} _" e quindi utilizzare il nome completo del URL.

Quindi nel tuo caso si avrebbe un controller denominato:

contents_FooController

e un percorso:

/contents_foo/index

Altri suggerimenti

Stavo cercando di realizzare più livelli presso l'URL di una vecchia applicazione ed evitando di usare un sacco di roules url. Così ho pensato di raggruppare i controller in sottodirectory e la definizione di un roule URL per esso.

Per una struttura

modules
 --test
   --controllers
     --sub
        -- OtherController.php
     --DefaultController.php

Nel bootstrap.php del modulo ho aggiunto:

public function __construct($application)
    {
        parent::__construct($application);
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->addControllerDirectory(__DIR__ . '/controllers',
            'test');
        $frontController->addControllerDirectory(__DIR__ . '/controllers/sub',
            'test_sub');
    }

DefaultController.php è

class Test_DefaultController extends Zend_Controller_Action {
     public function subAction()
    {
         $level1 = $this->getRequest()->getParam('level1');
         $level2 = $this->getRequest()->getParam('level2');
         return $this->_forward($level2, $level1, 'test_sub');
    }

Quindi questo inoltrerà al nostro controller nella sottodirectory.

Infine, ha aggiunto il percorso:

new Zend_Controller_Router_Route_Regex('([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)',
    array(),
    array(1 => 'module', 2 => 'controller', 3 => 'action', 4 => 'level1', 5 => 'level2'),
    '%s/%s/%s/%s/%s'
)

Ora, con una richiesta di test / default / sub / altro / index, è possibile chiamare l'indexAction in OtherController.php

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top