1.4 Zend Framework — Быстрый старт. Создание модели и таблицы базы данных |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Для начала, давайте рассмотрим: где находяться эти классы, и каким образом мы найдем их? По умолчанию в проекте, который мы создали, присутствует экземпляр автозагрузчика (autoloader). Мы можем подключать и другие автозагрузчики, таким образом, что бы он знал где искать разные классы. Обычно, мы хотим наши различные классы MVC группировать в одном и том же каталоге -- в нашем случае, application/ -- и чаще всего используем общий префикс.
Zend_Controller_Front имеет понятие "модули" ("modules"), которые являються отдельными мини-приложениями. Модули повторяют структуру каталогов, которую инструменты zf устанавливают в application/, и все классы находящиеся внутри, предполагается, что начинаются с общего префикса, имени модуля. application/ сам есть модуль -- модуль "default" или "application". По сути, мы устанавливаем автозагрузку для ресурсов на эту директории.
Zend_Application_Module_Autoloader обеспечивает функциональностью необходимой для сопоставления различных ресурсов модуля и соответствующих каталогов, а так же обеспечивает стандартный механизм именования. Экземпляр класса создаеться по умолчанию во время инициализации объекта загрузчика (bootstrap object); ваш загрузчик приложения будет по умолчанию использовать префикс модуля "Application". По сути, наши модули, формы, и классы таблиц все начинаются с префикса класса "Application_".
Теперь, давайте рассмотрим что представляет из себя гостевая книга. Как правило, это просто список записей с коментариями, меткой времени (timestamp), и, зачастую, email-адресом. Допустим мы будем хранить их в базе данных, нам так же необходим уникальный идендификатор для каждой записи. Нам, вероятней всего, будет необходимо иметь возможность сохранять запись, выбирать отдельные записи, и извлекать все записи. По сути, API модели простой гостевой книги может выглядеть примерно так:
01. // application/models/Guestbook.php
02.
03. class Application_Model_Guestbook
04. {
05. protected $_comment;
06. protected $_created;
07. protected $_email;
08. protected $_id;
09.
10. public function __set($name, $value);
11. public function __get($name);
12.
13. public function setComment($text);
14. public function getComment();
15.
16. public function setEmail($email);
17. public function getEmail();
18.
19. public function setCreated($ts);
20. public function getCreated();
21.
22. public function setId($id);
23. public function getId();
24. }
25.
26. class Application_Model_GuestbookMapper
27. {
28. public function save(Application_Model_Guestbook $guestbook);
29. public function find($id);
30. public function fetchAll();
31. }
__get() и __set() обеспечивает удобный механизм для доступа к отдельным свойствам записей, и посредник (proxy) для других геттеров (getters) и сеттеров (setters). Они так же помогут гарантировать что только свойства из рекомендованого списка (whitelist) будут доступны в объекте.
find() и fetchAll() обеспечивают возможность извлекать одну запись и все записи, в то время как save() заботиться о сохранении записи в хранилище данных.
Теперь с этого места, мы можем начинать думать о настройке нашей базы данных.
Во-первых мы должны инициализировать наш ресурс БД. В равной степенни с ресурсом Layout и View, мы можем обеспечить конфигурирование ресурса БД. Мы можем сделать это с помощью команды zf configure db-adapter:
01. % zf configure db-adapter \
02. > 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook.db"' \
03. > production
04. A db configuration for the production has been written to the application config file.
05.
06. % zf configure db-adapter \
07. > 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook-testing.db"' \
08. > testing
09. A db configuration for the production has been written to the application config file.
10.
11. % zf configure db-adapter \
12. > 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook-dev.db"' \
13. > development
14. A db configuration for the production has been written to the application config file.
Теперь отредактируйте ваш файл application/configs/application.ini, где вы увидите следующие строки добавленые в соответствующие секции.
01. ; application/configs/application.ini
02.
03. [production]
04. ; ...
05. resources.db.adapter = "PDO_SQLITE"
06. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook.db"
07.
08. [testing : production]
09. ; ...
10. resources.db.adapter = "PDO_SQLITE"
11. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-testing.db"
12.
13. [development : production]
14. ; ...
15. resources.db.adapter = "PDO_SQLITE"
16. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-dev.db"
Ваш конечный файл конфигурации должен выглядеть следующим образом:
01. ; application/configs/application.ini
02.
03. [production]
04. phpSettings.display_startup_errors = 0
05. phpSettings.display_errors = 0
06. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
07. bootstrap.class = "Bootstrap"
08. appnamespace = "Application"
09. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
10. resources.frontController.params.displayExceptions = 0
11. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
12. resources.view[] =
13. resources.db.adapter = "PDO_SQLITE"
14. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook.db"
15.
16. [staging : production]
17.
18. [testing : production]
19. phpSettings.display_startup_errors = 1
20. phpSettings.display_errors = 1
21. resources.db.adapter = "PDO_SQLITE"
22. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-testing.db"
23.
24. [development : production]
25. phpSettings.display_startup_errors = 1
26. phpSettings.display_errors = 1
27. resources.db.adapter = "PDO_SQLITE"
28. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-dev.db"
Заметьте, что база(ы) данных будет храниться в data/db/. Создайте эти каталоги, и сделайте их доступными для записи. На unix-подобных системах, вы можете сделать это следующим образом:
Original (English): Zend Framework Quick Start. Create a Model and Database Table
