Zend FrameworkСтарт вместе с ZendFramework(продолженние)

Чтобы пути выглядели красиво воспльзуемся Zend_Route.
Переделаем public/users/register и public/users/login в public/register и public/login соответственно.
Отредактируем файл Bootstrap.php следующим образом:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
	//эта ф-ия выполняется каждый раз при запусе Bootstrap
	//Bootstrap же загружает наше приложения,запуская контроллер и action
	public function run()
	{
		//Получаем доступ в FrontController'у
		$front   = $this->getResource('FrontController');		
		//получаем...
		$router = $this->setRouter();
		//... и устанавливаем наши роуты
		$front->setRouter($router);
		parent::run();
	}
    public function setRouter ()
    {
        require '../application/configs/routes.php';        
        if (!($router instanceof Zend_Controller_Router_Abstract)) {
            throw new Exception('Incorrect config file: routes');
        }
        return $router;
    }
}

Теперь все роуты мы можеи прописать в файле '../application/configs/routes.php'
<?php 
$router = new Zend_Controller_Router_Rewrite();
$router->addRoute('register',new Zend_Controller_Router_Route('register',
 array('controller'=>'users','action'=>'register')));
$router->addRoute('login',new Zend_Controller_Router_Route('login',
 array('controller'=>'users','action'=>'login')));

Приступаем к контрллеру Tasks
<?php
//application/controllers/TaskController.php
class TasksController extends Zend_Controller_Action
{
protected $auth = null;
public function init()
{
	$this->_redirector = $this->_helper->getHelper('Redirector');
	$this->auth = Zend_Auth::getInstance();
}
public function indexAction()
{
	//к этому экшену имеет доступ только вошедший юзер
	if ($this->auth->hasIdentity()){
	//форма для добавления задачи
	$form = new Form_Addtask();
	if($this->_request->isPost())
		{
			if($form->isValid($this->_getAllParams()))
			{
				$data = array(
					"user_id"=>$this->auth->getIdentity()->id,
					"task"=>$form->getValue('task'),
				);
				$model = new Model_Tasks();
				$model->insert($data);
				$this->_redirector->gotoSimple ( 'index', 'tasks' );
			}
		}
	else{	
	//получем id пользователя
    $userId = $this->auth->getIdentity()->id;	
	$model = new Model_Tasks();
	//получаем задачи текущего пользователя
	$tasks = $model->getTasks($userId);
	//и передаем в вид	
	$this->view->tasks = $tasks;
	}
	$this->view->form = $form;
	}//если пользователь не зашел - перенаправляем на вход
	else $this->_redirector->gotoSimple ( 'login', 'users' );
}
public function delAction()
{
	$id = $this->_getParam('id');
	$model = new Model_Tasks();
	$model->del($id);
	$this->_redirector->gotoSimple ( 'index', 'tasks' );
}
}

Сделаем форму для доабления задачи application\models\Form\Addtask.php
<?php
class Form_Addtask extends Zend_Form
{
	public function init()
	{
		parent::init();
		$task = new Zend_Form_Element_Text('task',array(
			'required'=>true,
			'label'=>'Добавить:',
			));
		$submit = new Zend_Form_Element_Submit('submit',array(
		'label'=>'Добавить'));
		$this->addElements(array($task,$submit));		
	}
}

Делаем модель application\models\Model\Tasks.php
<?php
class Model_Tasks extends Zend_Db_Table_Abstract
{
protected $_name = 'tasks';
public function getTasks($userId)
{
	//получаем адаптер и делаем выборку
	$select = $this->getAdapter()->select()
	//из нашей таблицы
            ->from($this->_name)
			->where("tasks.user_id = ?",$userId);
	//выполняем запрос и получаем массив обектов
		$stmt = $this->getAdapter()->query($select);
		$result = $stmt->fetchAll(Zend_Db::FETCH_OBJ);
	return $result;
}
public function del($id)
{
	$where = $this->getAdapter()->quoteInto('id = ?', $id);
	$this->delete($where);
}
}

Осталось самое малое — создать вид:
application\views\scripts\tasks\index.phtml
<?php 
//выводим форму
print $this->form;
?>
<ul>
<?php
//выводим задачи
if(!empty($this->tasks)):
foreach ( $this->tasks as $task ):?>
<li><?php print $task->task?> <a href="tasks/del/id/<?=$task->id?>">X</a></li>
<?php endforeach;?>
<?php endif;?>
</ul>

Наш маленький проект готов!
Жду ваших вопросов и дополнений!
PS архив с исходниками(zend нужно скачать отдельно)
  • +8
  • nuclear
  • 12 июля 2009, 13:04

Комментарии (18)

большое спасибо, если возможно добавьте пожалуйста ссылку на архив с исходниками, разобранного в статье, примера.
ссылка добавлена
благодарю -)
щас сам проект у себя напишу и создам архивчик =)
спасибо за продолжение!
Предлагаю автору написать цикл статей о ZF. Как видите, многим здесь это нужно, поэтому не думаю что подобный контент здесь бедет лишним. Тем более это подчёркивает концепции Open Source, так как ZF имеет открытые исходники.
В принципе, время есть, знаний набираюсь. Нужно только одно: идеи по проекту для обучения. Не знаю что можно писать =)
А хочется не просто отрывки кода, а именно проект, когда с каждой статьей мы будем его дорабатывать.
Как насчёт написания движка, подобного LiveStreet?
Если честно, то разработкой движков на базе зенда не разу не занимался.
Мне легче все сделать на зенде, а часто повторяющиеся функции и классы вынести в свою библиотеку.
Так что жду предложений по разработке именно сайта =)
Ну тогда сайт типа open-life или habrahabr =)
Как насчёт написания движка, подобного LiveStreet?

Если честно, то разработкой движков на базе зенда не разу не занимался...

Внизу-справа open-life.org написано «Сайт работает на базе движка LiveStreet».
Так я про то же самое и говорю =)
Можно писать различные мини-приложения. Например, новостной блок, гостевая книга и т д.
вы это к чему? я знаю что такое LiveStreet и то что опен-лайф на нем работает.
Я просто пытаюсь подойти к данному вопросу с разных сторон =)
я не вам, я frichx'у
Написал не Вам, а Istergul'у.
Он писал:
Как насчёт написания движка, подобного LiveStreet?

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

Istergul снова пишет:
Ну тогда сайт типа open-life...

А open-life на ДВИЖКЕ, а Вы писали, что:
разработкой движков на базе зенда не разу не занимался.
Мне легче все сделать на зенде...


P.S. Я не имел ввиду, что Вы не знаете, что Опен-лайф на ЛивСтрите.
Спс, теперь все на своих местах :)
Но написать сайт и движок на котором работают это разные вещи.
Движок, в моем понимании, предполагает некую структуру которую можно было бы дорабатывать под конкретный проект.
Над проектом все еще думаю…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.