Gebruik van meerdere controllerdirectory's met Zend Framework

Ik bouw een CMS met Zend Framework en mijn thema's kunnen aangepaste lay-out, weergave en controllers ondersteunen.

Als een thema een aangepaste lay-out heeft, stel ik de lay-outmap in op themamap. Als een thema aangepaste weergaven gebruikt, stel ik de weergavemap in op de themamap.

Maar ik zit vast met contollers, omdat ik mijn standaardcontrollers als fallback wil gebruiken. Een thema heeft alleen zijn eigen controllers, niet elke controller. Als het bijvoorbeeld de Image Gallery-functie ondersteunt, moet er een ImageGalleryController.php-bestand zijn, maar geen IndexController- of ErrorController-controllers.

Samenvattend: een thema kan controllers overschrijven als een controller in de themamap het gebruikt, anders de standaard gebruiken.

Hoe kan ik dit doen? Bedankt.

1
Ik denk niet dat dit te maken heeft met routes.
toegevoegd de auteur cnkt, de bron
Heb je gekeken naar het gebruik van Routes?
toegevoegd de auteur Jake N, de bron

1 antwoord

Ik weet niet zeker of ik het volledig begrijp, maar ik denk dat je misschien op zoek bent naar modules? Bijv.

Application/
    Configs/
    Modules/
        default/
            controllers/
            layouts/
            other standard folders (like views, models etc)
        othermodule/
            controllers/
            layouts/
            other standard folders (like views, models etc)
        etc/
            controllers/
            layouts/
            other standard folders (like views, models etc)

Vervolgens maakt u gewoon een mooie plug-in en wisselt u van lay-out. Iets zoals dit:

<?php
/**
 * This class will change the layout per modular basis. If a layout is not found, it will use the specified modular layout.
 *
 * @author Elliott Websites
 */
class App_Modular_layout extends Zend_Controller_Plugin_Abstract
{

    public function preDispatch( Zend_Controller_Request_Abstract $request )
    {
        $module = $request->getModuleName();
        $layout = Zend_Layout::getMvcInstance();

        $defaultLayout = APPLICATION_PATH . '/modules/default/layouts';
        $defaultLayoutName = 'default';

        if( file_exists( APPLICATION_PATH . '/modules/' . $module . '/layouts/' . $module . '.phtml' ) )
        {
            $layout->setLayoutPath( APPLICATION_PATH . '/modules/' . $module . '/layouts' )
                           -> setLayout( $module );
        } else {
            $layout->setLayoutPath( $defaultLayout )
                           ->setLayout( $defaultLayoutName );
        }
    }

}
0
toegevoegd
bedankt voor je inspanningen maar zoals ik al zei in mijn vraag kan ik dit doen. Geen probleem voor lay-outs en weergaven. Ik heb iets nodig zoals je deed, maar voor controllers.
toegevoegd de auteur cnkt, de bron
Dat zou dan tegen het hele MVC-model ingaan? Denk dat het misschien eenvoudiger is om uw eigen raamwerk te bouwen met de Zend-componenten.
toegevoegd de auteur elliottwebsites, de bron