Zend Framework: проблема с моделями.

Zend Framework: проблемы с моделями
Недавно столкнулся со следующей проблемой: при создании объекта класса модели или вызове методов описанных в модели возникала ошибка, которая полностью роняла приложение на пол.

Причина этого явления была в том, что конструктор не мог создать объект класса.

$userModel = new Default_Model_User();
$userModel->getUserByName($name);
Если Вы используете модули (module) и ваше приложение имеет схожую структуру
application/
    configs/
        application.ini
    layouts/
    modules/
        default/
            controllers/
            models/
            views/
            Bootstrap.php
   Bootstrap.php
library/
public/
tests/

Тогда достаточно добавить в 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),
         )));
        return $autoloader;
    }

Stas Kuryan

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

11 комментариев

  1. Suvitruf     

    Bootstrap’у монжо конфиг скормить.
    [php]$this->setConfig($config);[/php]

    А в конфиге что-то вроде:
    [php]
    $config = array (
    'paths' => array(
    'library' => APPLICATION_PATH.'/../library/',
    'layouts' => APPLICATION_PATH.'/layouts/scripts/',
    'views' => APPLICATION_PATH.'/views/',
    'configs' => APPLICATION_PATH.'/configs/',
    'models' => APPLICATION_PATH.'/models/',
    'controllers' => APPLICATION_PATH.'/controllers/',
    'gallery' => GALLERY_PATH,
    'forum' => FORUM_PATH),
    'bootstrap' => array(
    'path' =>APPLICATION_PATH.'/Bootstrap.php',
    'class' =>'Bootstrap'),

    'debug' => array (
    'on' => true),

    'db' => array (
    'adapter' => 'PDO_MYSQL',
    'params' => array(
    'host' => '127.0.0.1',
    'username' => 'root',
    'password' => 'root',
    'dbname' => 'lol',
    'driver_options'=> array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'),
    'profiler' => false,
    ),
    ),
    );
    [/php]
    Тут все настройки сразу.

    В ‘paths’ мы как раз путь до моделей задаём.

    • Stafox        Автор

      Согласен, можно. Даже нужно. Можно даже сравнить насколько приложении быстрее работать станет.

      • Suvitruf     

        Просто странно.

        Вроде как даже в офф. туториале используются настройки)

        • Stafox        Автор

          Да, в офф. мануале стараются побольше хранить в application.ini.

  2. Андрей     

    ZF платформенный?)))) Я не знал, что ZF внезапно стал исполняемой программой, а не скриптом для PHP. Давно это случилось?

    • Stafox        Автор

      Ну начнем с того, что ZF — это фреймворк, а не скрипт. Фреймворки, пишутся не только на PHP, но и на Java, C++ и других языках, что может потребовать определенных библиотек.
      Вот Вам ссылочка http://ru.wikipedia.org/wiki/Zend_Framework.

      Теперь будете знать.

  3. Андрей     

    Stafox, Вы серьезно? Я даже не знаю с каких основ Вам начать объяснять.
    Для начала разберитесь что такое фреймворк, а что такое скрипт.

    Мультиплатформенным может быть приложение, ПРОГРАММА. В конкретном случае такой программой является интерпретатор PHP (в Windows это php.exe, чтобы вам было понятнее). Без этой программы, ваш код — все лишь набор текста.
    Вот эта программа и является мультиплатформенной, она работает и под Windows и под Linux.
    То что вы пишите (и тот же ZF) — называется скриптом (от слова script — сценарий), это сценарий работы для программы PHP.
    Чувствуете разницу между программой и сценарием для программы?

    • Suvitruf     

      Так-то на Java когда пишешь, тоже без виртуалки не запустишь. Ну а в целом да, у php кросплатформенный интерпретатор, сами же скрипты — просто набор символов)

    • Stafox        Автор

      Не надо мне ничего объяснять. Мы смотрим с вами на одни и те же вещи, с разных сторон. И при этом Вы пытаетесь умничать.

      То что вы пишите (и тот же ZF) — называется скриптом (от слова script — сценарий), это сценарий работы для программы PHP.

      Для интерпретатора — да.
      Но! Если смотреть на это со стороны языка программирования PHP (а не интерпретатора), то ZF — это фреймворк (ПО, которое облегчает процесс разработки, и совмещает в себе большое количество различных компонентов). А ПО которое работает более чем на одной ОС является кроссплатформенным. Следуя всем законам логики, делаем вывод: ZF кроссплатформенный.
      Вот и все. Я прекрасно понимаю Вашу точку зрения, но прошу учесть и мою.
      Благодаря этим комментариям читатели разберуться с понятием кроссплатформенности. Спасибо.

  4. Andrew     

    Вы можете найти хоть один не кроссплатформенный фреймовк для php?

    • Stafox        Автор

      О таковых мне не известно.

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

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