Статьи
Портфолио
Друзья
Контакты

Последние статьи

15.10.2011 Zend Framework Day 2011, 12 ноября, Киев (0)

27.09.2011 MSSQL, XML и PHP. Как заставить это работать из под *nix? (0)

22.06.2011 Zend Framework, MSSQL и UTF-8 - проблемы с кодировками (5)

Все

Категории

PHP (2)

Zend Framework (32)

Javascript (4)

Другое (13)

Книги (1)

Все

RSS

Статьи

Комментарии

Портфолио

Облако тегов

программирование  open search  портфолио  php  zend framework  Zend_Db  Smarty  Zend_Form  паттерны  javascript  niceforms  jQuery  Zend_Mail  веб  Google  Zend_Rest  Zend_View_Helper  zend casts  Zend_View  Zend_Layout  speedUp  интернет  Загрузчик фотографий  Flash  ВКонтакте  zend  localization  zend_translate  gettext  Я читаю  Книги  sphinx  софт  массовые рассылки  хранение данных 

Все

Статистика



Поставки магазин туристического снаряжения Привал.
душевая кабина

Главная > Статьи > Zend Framework > Введение в Zend Framework: часть третья
08.08.08 Введение в Zend Framework: часть третья

Здравствуйте. В предыдущей части я Вам рассказывал о работе с базами данных с помощью Zend Framework.

 

А в этой части статьи я расскажу Вам о том, как можно удобно сделать вывод необходимых нам данных в нужном виде на экран. Для этого предназначен класс Zend_View, с помощью которого можно легко реализовать «вид» из паттерна MVC (model-view-controller или модель-вид-контроллер).

 

Будьте внимательны и наберитесь терпения: нам предстоит закончить наше приложение и начать развивать его!

 


Работая над Zend_View


 

Zend_View — это класс PHP фреймворка Zend Framework, призванный отделить программную часть разработки сайта от его дизайна. Тоесть сначала пишется программная часть, а потом оформляются скрипты вида, где мы будем использовать минимум программного кода.

 

Работа с Zend_View заключается в создании переменных внутри экземпляра класса Zend_View и использование этих переменных в скриптах вида. По-умолчанию, Zend_View включён и он обрабатывает скрипты вида из папки «/application/views/scripts/{controller}/{action}.phtml». Каждый скрипт вида это обычный html документ с вставками php кода.

 

Давайте модифицируем наше приложение для работы с Zend_View и напишем вывод всех новостей сайта, а странички для создания и редактирования новостей сайта Вы потом создадите сами (для лучшего освоения материалла).

 

Итак, создайте файл «index.phtml» в папке «/application/views/scripts/news/» и напишите в нём такой код:


В выше приведённом коде объект $this это и есть наш объект Zend_View, в котором мы создали несколько переменных из контроллера. В коде я использовал сокращенные конструкции PHP, для удобства работы. Например, проще записать

нежели:

Примечание: короткие конструкции работают только если в настройках сервера включена директива short_open_tags. Но на данный момент short_open_tags=off — редкость.


Видите как просто оформить подобный  проект, для того, чтобы изучить весь функционал Zend_View читайте официальный мануал (мне просто лень описывать всё подряд, когда в мануале доходчиво расписано). Zend_View позволяет разбивать Ваши странички на небольшие кусочки, например, шапку можно написать один раз для всех страниц сайта, а потом подключать её в разных скриптах вида. Такой подход даёт много преимуществ:

  • при изменении шапки не прийдётся редактировать все скрипты;
  • предотвращается дублирование часто использоваемого кода;
  • ничего лишнего не путается в Ваших скриптах. Вы работаете только над оформлением тела документа!

Не забудьте написать следующий код в нашем контроллере, иначе наш проект работать не будет:

С предыдущей статьи изменений почти нет. Были добавлены только строчки, где я работаю с Zend_View. Они очень тривиальны и понять их работу опираясь на уже изложенный материал очень просто. В качестве «домашнего задания» рекомендую

 

Вам создать скрипты вида для добавления и редактирования новостей. Для удаления новости скрипт вида не нужен, поскольку в конце мы перенаправляем браузер на другой адрес (если хотите можете что-то и вывести пользователю, убрав редирект :) ). Если Вам что-то непонятно, то пишите в комментарии - с удовольствием объясню :)

 

Happy End


 

Поздравляю Вас. Вы прошли моё хилинькое :) введение в Zend Framework. Это введение меня сильно утомило, потому, что очень хочется писать о более интересных вещах. И в дальнейшем я именно этим и займусь, я покажу Вам ещё много других вкусностей этого фреймворка. А со временем Вы и сами поймёте: Zend Framework - очень мощный и ефективный инструмент в руках проффесионала!

 

Удачи Вам в Ваших начинаниях!!!

Теги:  программирование, php, zend framework

Другие категории:

■ PHP ■ Zend Framework ■ Javascript ■ Другое ■ Книги
Комментарии к статье
  Kupuyc

01.09.08 11:42:08

На правах ответного визита с web-dev.info. Лично я уверен, что конструктивна только критика, поэтому, не обижайтесь, пожалуйста. Поправьте стили для вывода кода, в FF2 (может еще где) происходит наезжание строк друг на друга. Имеют место быть орфографические ошибки - несколько портят впечатление от материала (називают. предидущий, програмную, ефектывный).

Навскидку не помню точно, но, емнип, методы действий контроллеров принято писать в camelCase нотации. Смайлы, имхо, это башорговское - у вас серьезный материал, стоит ли подавать его в стиле комедийного рассказа? Немножко повнимательнее - во вступлении статьи опечатка в имени класса Zend_View. Главный контроллер сайта News?

С почином, уставайте меньше.

  illusive

02.09.08 06:31:12

Спасибо за критику. Материал доработаю, а за ошибки извините - я родился и вырос на западной Украине, где общаются только на украинском языке, вот и русская орфография еще пока хромает Хмурый

А с выводом кода - пока проблема. Я сейчас переписываю весь движок сайта, так как он перестал меня устраивать. Вот и времени на окончательную доработку самого сайта и материала не хватает.

Спасибо, именно критики мне и нехватало! Мне нужен был человек, который указал бы на все мои недочеты и высказал свое критическое мнение - это мой стимул двигаться дальше!

  illusive

02.09.08 08:25:15

Ошибки подправил. Спасибо. Насчет наложения строк не особо понял: этого никогда не наблюдал. Опечатки в имени класса Zend_View небыло. А в каком стиле писать статьи - решать мне (я и не подавал рассказ в комедийном стиле, просто в конце введения немножко подшутил над собой). Спасибо еще раз, помогли, поправили, хоть и не вся критика (ИМХО) была объективной

  Александр

15.11.08 12:45:42

Хорошо пишете. Я бы конечно некоторые моменты оспорил, ну да ладно.

  illusive

16.11.08 07:29:11

Хорошо пишете. Я бы конечно некоторые моменты оспорил, ну да ладно.

Спасибо. Я бы с удовольствием поучавствовал в споре с Вами :))) Так что оспаривайте!

  fra

06.12.08 09:43:26

Непойму, зачем писать статьи в которых говорить: "... прочитайте в документачии к фреймверку".

  illusive

07.12.08 10:55:05

Непойму, зачем писать статьи в которых говорить: «... прочитайте в документачии к фреймверку»

А зачем повторяться, если в документации доходчиво расписано? Я пишу про те вещи, которые являются интересными или с которыми могут возникнуть трудности. Переписывать мануал — не вижу смысла.

  Lesswipse

11.12.08 15:43:54

Огромное человеческое спасибочки !

  illusive

14.12.08 13:19:01

Огромное человеческое спасибочки !

Пожалуйста Подмигивает

  Dr0n

25.03.09 15:00:51

Спасибо, очень неплохо описано. Но не вижу описания layouta. На самом деле очень важный в момент 
в "понимании" работы данного фреймворка.

  illusive

27.03.09 09:52:44

Имхо, мое мнение, что для базовой реализации и описания Zend_View хватит для понимания основных принципов фреймворка, а Zend_Layout - это как бы более профессиональное решение, до которого еще нужно рости. Взвалить все и сразу на голову читателей не моя методика. Я лучше напишу со временем отдельную статью на эту тему, нежели сделаю "черти что и сбоку бантик" Смеётся.

Спасибо за внимание.

  Dr0n

30.03.09 11:05:36

Позвольте с вами не согласиться. Конечно, все целиком описывать и не надо, но для базового уровня знаний, необходимо понимать для чего нужен «макет». Т.к. в дальнейшем (при условии работы в данной среде) начинается такая каша Улыбается

ps. Очень бы хотелось прочитать будущую статью. Особенно интересна реализация “фронтенд” – “бекенд” частей т.е. возможность «автоматического» выбора шаблона.

  illusive

30.03.09 13:33:17

Очень бы хотелось прочитать будущую статью

Ваше желание выполнено!

 

Я с Вами частично согласен - понимание терминов "макет" и "шаблон" важны, но это выходило за рамки статьи. Вы знаете сколько еще в Зенде важных даже для новичка вещей?

  Дмитрий

15.11.09 18:37:54

вот я и на третей части туториала:)

Хочу заметить на несколько ошибок у Вас:

Итак, создайте файл «news.phtml».... Если такой файл создать,то надо и в NewsController.php indexAction() переименовать в newsAction()

Ну и в первом листинге, ошибки типа $val[''id''] а надо

$val['id'] или $val["id"]

А так пока всё хорошо!

 

  illusive

15.11.09 22:58:34

Спасибо, Дмитрий, за замечания. Поправлю, когда будет время.

  Роман

03.02.10 13:39:15

У меня вот проблемка. Если перейти по адресу slovar.loc/index/add/, то вызывается метод add из класса indexController. Так вот у меня почемуто пишет not found. А когда добавляю директорию index/add/index.php то файл находит в этой директории. Подскажите пожалуйста, в чем моя ошибка?

  illusive

03.02.10 14:12:37

Проверьте ваш .htaccess файл. Он должен находится в папке public_html. А что должно в нем быть читайте в мануале.

 

З.Ы. Если с этим все ок, то проверьте установлен ли у Вас mod_rewrite для Apache

  Роман

07.02.10 12:22:58

Спаибо за помощь! Разобрался!

  Роман

07.02.10 15:29:16

Мне вот не понятна одна вещь. Возмем к примеру адрес http://site.loc/index/add/ . Тут видно и понятно какой идет вызов метода в контроллере. А ели взять адрес http://site.loc/index/users/panels/3/ . Мне вот непонтна суть этого адреса, что метод а что контроллер. Может это конечно зависит и от самого кода программы, подскажите пожалуйста.

  illusive

08.02.10 00:25:18

Это все зависит от конфигурации роутов Улыбается

  Олег

29.05.10 00:28:13

Ну я как новичек в Zend откуда взялся обьек $val в пхтл файле непонимаю. Иногда нехватает коментариев кокретизирующих то или иное действие и его логику. Пхтмл каким файлом вызывается?
  illusive

31.05.10 10:17:06

Эта переменная появилась из цикла, который начался выше, будьте повнимательнее..

Скрипты вида вызываются компонентом Zend_View. По-моему все было расписано Улыбается

  Герман Клюшин

13.07.10 22:31:50

Функция editAction, вторая часть условного оператора:




Вопрос: ОТКУДА ВЗЯЛСЯ $id??

  illusive

13.07.10 23:23:44

Спасибо. Исправлено.

  Герман Клюшин

14.07.10 09:23:01

Сейчас контроллер сделан так, что редактирование можно вызвать только POST формой, а как сделать так, чтобы редактирование запускалось через ссылку?
Я так понимаю, что надо брать $id так же как в deleteAction:
$id = $this->_request->getParam('id', 0);
Но у меня вопрос: а как эту ссылку формировать? 

  illusive

15.07.10 23:05:47

Да, верно.

Ссылку можно сформировать так (в скрипте вида):

  Zender

15.08.10 16:51:58

Здравствуйте. Почему-то у меня не получается редактирование. Можете привести примерное содержание скрипта вида для редактирования новостей ?

  illusive

15.08.10 17:44:20

Если можно, сбросьте текст ошибки. которая возникает.

  Zender

16.08.10 19:48:05

Дело не в ошибке, я просто не могу понять, что написать в файле edit.phtml. Вроде как должен быть похож на содержимое файла add.phtml:

<form method="post">

<label>Title</label>
<input type=text name="title" /><p>
<label>Description</label>
<input type=text name="description" /><p>
<label>Full_Text</label>
<textarea name="full_text"></textarea><p>
<input type="submit" name="Edit"  value="Edit" />

</form>

как его подправить, чтобы для редактирования тоже работало ?

  illusive

16.08.10 23:41:16

Вроде бы все ок, но я бы Вам посоветовал еще попробовать дописать <form method="post" action="<?php echo $this->url()?>"> вместо, <form method="post">.

 

Таким образом Вы явно опишете куда форма должна слать данные, в данном случае на текущий URL.

 

P.S. Сейчас читаю свои же статьи годичной давности и улыбаюсь. Понимаю насколько повзрослел и что профессионально вырос. В общем, такие интересные чувства. Да, оно того стоит :)

  Zender

17.08.10 23:24:28

нет, все равно не получается. Может еще, что то я забыл ?

  illusive

18.08.10 10:33:23

Вышлите мне почтой Ваш проект illusive@meta.ua.

  illusive

19.08.10 20:47:33

Простите, уважаемые читатели. Нашел несколько опечаток в методе editAction класса. Код исправил.

Также хочу приложить код edit.phtml. а то многие не догадываются:

<title><?=$this->title?></title>

<div id="form">
<center><h3><?=$this->title?></h3></center>
<form action="<?php echo $this->url()?>" method="post">
<label>Title</label>
<input type=text name="title" value="<?php echo $this->oneNews['title']?>"/><p>
<label>Description</label>
<input type=text name="description" value="<?php echo $this->oneNews['description']?>" /><p>
<label>Full_Text</label>
<textarea name="full_text" value="<?php echo $this->oneNews['full_text']?>"></textarea><p>
<input type="submit" name="Edit"  value="Edit" />

</form>
</div>

  Zender

20.08.10 00:05:19

Другое дело, теперь все работает. Можно разбираться дальше. Еще раз огромное спасибо.

  Начинающий...

31.08.10 08:16:36

Здравствуйте!!! Я делал всё по вашим статьям но у меня вышла ошибка.... (((

по адресу - mysite/public :

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (index)' in /media/data/www/tmp.irk/library/Zend/Controller/Dispatcher/Standard.php:248 Stack trace: #0 /media/data/www/tmp.irk/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 /media/data/www/tmp.irk/public/index.php(25): Zend_Controller_Front->dispatch() #2 {main} thrown in /media/data/www/tmp.irk/library/Zend/Controller/Dispatcher/Standard.php on line 248

а если я проиду по адресу mysite/news - то адрес NOT FOUND

The requested URL /news was not found on this server.

Помогите кто знает!!!!

  illusive

31.08.10 10:42:51

Видимо у Вас не работает mod_rewrite на сервере

  Начинающий...

31.08.10 11:17:26

Работает!!! До этого выводил простое сообщение HELLO WORLD!! Работала а тут нет... в чём может быть причина?!?!

настройки .hacess:


  Начинающий...

31.08.10 12:13:11

ошибка именно  строчке $frontController->dispatch();

Если я поменяю её на строчку  Zend_Controller_Front::run('../application/controllers'), то выведится ошибка:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (index)' in /media/data/www/tmp.irk/library/Zend/Controller/Dispatcher/Standard.php:248 Stack trace: #0 /media/data/www/tmp.irk/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 /media/data/www/tmp.irk/library/Zend/Controller/Front.php(212): Zend_Controller_Front->dispatch() #2 /media/data/www/tmp.irk/public/index.php(25): Zend_Controller_Front::run('../application/...') #3 {main} thrown in /media/data/www/tmp.irk/library/Zend/Controller/Dispatcher/Standard.php on line 248

  Начинающий...

31.08.10 12:24:32

 

А весь файл index.php у меня выглядит так:

 

  illusive

31.08.10 13:55:36

Мне кажется, что ошибка здесь:


 
 А надо:

  Начинающий...

31.08.10 14:02:20

Я тоже так думал, но результат остаёться прежним!!!

  illusive

03.09.10 11:59:58

По статье контроллер называется news, чтобы четко показать зависимость от названия контроллера, поэтому все работает но по адресу /news/

  Начинающий...

06.09.10 08:35:30

Всё вышло..... Я так и не нашёл ошибку и решил сделать через layout и получилось.... спасиба за статьи!!!!

  Максим

06.09.10 15:16:29

У меня вопрос!!! Вот всё сделал!! Выводится... по адресу http://msite/public/news

Так и должно быть что я ввожу public!?!?!?!

  illusive

06.09.10 21:41:50

Видимо что-то не так, так быть не должно. Скорее всего у Вас не верно настроен веб-сервер или же Вы еще не совсем понимаете принципы его работы.

  Максим

07.09.10 06:27:35

Всё возможно!!! Буду разбиратся!!!!

  Слава

18.10.10 14:38:28

Почему ругается на эту функцию $this->_redirect('/news/');  ? Говорит, что заголовок уе отправлен. Если ее убрать все работает нормально.

  illusive

18.10.10 15:37:16

Попробуйте убрать закрывающиеся теги PHP в своих классах

  Слава

18.10.10 17:02:57

Помогло, спасибо.

  Serg

05.04.11 01:36:39

А где модель, если все делает контроллер? Насколько я читал то в контроллере вообще должно быть минимум кода, и на сколько я это все понял то контроллер должен отдавать данные на модель, а модель уже на вид, то есть контроллер у нас не отдает ничего на вид. Поправьте меня пожалуйста если я что-то не так написал.

  illusive

07.04.11 11:14:58

Моделей в данном примере нет, т.к. статья давняя + предназначена для людей, которые только начинают изучать Zend Framework.

Контроллер является связующим звеном. Он может передавать данные в вид, также как и модель. В статье показан пример т.н. "толстого контроллера" лишь для упрощения.

На самом деле очень прозрачно делить приложение на слои, согласно DDD. В таком случае получается еще интереснее :)

  Serg

08.04.11 05:20:34

Спасибо большое за ответ

  Oleg

01.07.11 22:31:48

У меня при создании файла .htaccess возникает ошибка.
Bad Request

Your browser sent a request that this server could not understand.

 Если убрать .htaccess то работает но не все. При вводе ссыки на создание новости меня перекидывает на несуществующую страницу. И action не вызывается. 

 

 

  illusive

03.07.11 00:32:17

Проверьте, установлен ли mod_rewite у Apache.

  Oleg

03.07.11 02:56:49

сори забыл отписатся. Я исправил ошибку. Как сказать не могу. Самому интересно. Бубен наверноэ помог

Оставить свой комментарий

 
Статьи | Портфолио | Друзья | Контакты
Идея и мозги: Васильев Андрей © 2008-2011 Web-Blog Кисточка и фантазия: Зелинский Богдан