Zend Framework: где хранить свои классы?

Zend Framework
При разработке своего веб-приложения, Вам наверняка приходилось использовать свои классы. И Вы, скорее всего, уже задавались вопросом «Где же их хранить?», ну а если это и не так, то в ближайшее время Вас наверняка постигнет этот вопрос. Можно их конечно положить в controllers и все будет работать, но это как-то не эстетично. Рыба должна лежать отдельно от мяса 🙂

Поэтому я решил хранить их в отдельной директории classes. Ну а для того, чтобы Zend Framework самостоятельно подгрузил наши классы, нужно добавить в Bootstrap.php следующий код.

protected function _initAutoload() {
        $this->bootstrap("frontController");
        $front = $this->frontController;

        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->setFallbackAutoloader(true);

        $modules = $front->getControllerDirectory();
        $default = $front->getDefaultModule();

        foreach (array_keys($modules) as $module) {
            if ($module === $default) {
                continue;
            }
        }
        $autoloader->pushAutoloader(new Zend_Application_Module_Autoloader(array(
                    "namespace" => ucwords($module),
                    "basePath" => $front->getModuleDirectory($module),
                )));
        $loader = new Zend_Loader_Autoloader_Resource(array(
                    'namespace' => '',
                    'basePath' => $front->getModuleDirectory($module),
                ));
        $loader->addResourceType('classes_type', 'classes', $module.'_Class');
        return $autoloader;
    }

Хочу обратить ваше внимание на строку
$loader->addResourceType('classes_type', 'classes', $module.'_Class'); Первый аргумент указывает тип Ваших классов.
Второй аргумент — имя директории, в которой они будут располагаться.
Третий — префикс имени класса.

Таким образом Вы подгрузите все классы для текущего модуля.
Ну и небольшой пример класса:

<?php
class Default_Class_Geo
{
    private $radius;
    private $coordinatesType;

    public function __construct() {
        //...
    }
    public function convertCoordinates($point, $from, $to) {
        //...
    }
}

Если Вам нужна уникальная программа программа под ваши нужды, Вы можете заказать программу у профессионалов, эти ребята знают свое дело: сделают все качественно и в кратчайшие строки.

Stas Kuryan

Web developer. Перфекционист в написании кода.

4 комментария

  1. Ольга     

    Очень интересный и полезный пост. Пока с программированием я ещё разбираюсь мало но теперь хоть имею представление что ещё ждёт впереди.Буду знать где искать ответы.

    • Stafox        Автор

      Ну что же, желаю удачи в этом нелегком деле 🙂

  2. Suvitruf     

    Мне в зенде порой эти префиксы не особо по душе.

    Поэтому, свои классы именую типо Geo, но в конфиге указываю путь до классов.

    Тут, правда, трабл с конфликтом имён может быть с классами из либы. Тогда можно класс назвать MyGeo (:

    • Stafox        Автор

      А мне наоборот нравится, так по имени класса можно определить к какому модулю он относится.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *