Zend Framework - Automatyczne ustawianie ścieżki dla katalogu "models"

Artykuł dodany: 12 czerwca 2008. Ostatnia modyfikacja: 12 sierpnia 2009.

Stopień trudności (1 - dla początkujących, 5 - dla ekspertów): 2

Wyobraźmy sobie sytuację w której wykorzystujemy w naszym projekcie kilka różnych modułów np. blog, galeria, forum. Struktura katalogowa może prezentować się w sposób następujący:

/application
    /config (opcjonalnie)
    /default
        /config (opcjonalnie)
        /controllers
        /models
        /views
    /gallery
        /controllers
        /models
        /views
    /forum
        /controllers
        /models
        /views
/htdocs
    /images
    /scripts
    /styles
    index.php
/library
    /Zend
    /(inne biblioteki)
/tmp
    /sessions
    /cache
    /view_compiles

Problem w tym, że nie jesteśmy teraz w stanie łatwo dołączać klas modelu z katalogu ‘application/module/models’. Musielibyśmy jawnie definiować regułę (przykładowo):

require_once '../application/gallery/models/jakisPlik.php';

Możemy jednak zautomatyzować cały proces dodając do kontrolera nowy plugin.

<?php

require_once 'Zend/Controller/Plugin/Abstract.php';

class NaszeKlasy_Controller_Plugin_SetModelPath extends Zend_Controller_Plugin_Abstract {

  public function preDispatch(Zend_Controller_Request_Abstract $request) {
    $moduleName = ($request->getModuleName()) ? $request->getModuleName() : 'default';
    ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'../application/'.$moduleName.'/models/');
  }

}

Następnie należy plugin zarejestrować:

$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin(new NaszeKlasy_Controller_Plugin_SetModelPath());

Gdy wykorzystujemy Zend_Loader::registerAutoload() możemy bezpośrednio utworzyć nowy obiekt.

Oczywiście istnieją również inne sposoby jednak ten ma tą zaletę, iż ścieżka ustawiana jest dla aktualnie wczytanego modułu. Nie zachodzi kolizja nazw i nie rejestrujemy niepotrzebnych w danej chwili plików z innego modułu.

Komentarze

Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?

Dodaj komentarz

*
Nazwa zostanie wyświetlona wraz z komentarzem. Możesz też utworzyć nowe konto w serwisie, dzięki czemu uzyskasz dodatkową funkcjonalność.
*
Akceptowana jest ograniczona składnia Textile. Wszystkie tagi HTML zostaną usunięte.