Zend Framework → Старт вместе с ZendFramework
В статье описывается создания менеджера задач на ZendFramework.
Во-первых, скачиваем фреймворк .
Если вам, как и мне, не нужны dojo и примеры(или жалко трафик) скачиваем minimal-версию.
Разархивируйте в любую удобную для вас папку. Открываем консоль и пишем(команды для linux и win аналогичны):
Копируем папку library из архива в корень проекта todo.
Далее все будем делать вручную, но некторые шаги можно было бы выполнить через консоль.
Сразу же настроим zf в файле todo\application\configs\application.ini
Создаем файл layouts\scripts\layout.phtml с примерно таким содержимым:
Вот структура нашей БД:
Базу создаем ручками, например, через phpMyAdmin.
Для того чтобы наши формы и модели подгружались автоматически в public\index.php прописываем
Начнем из далека, с контроллера Users.
Создадим файл application\controllers\UsersController.php, где Users — имя контроллера с большой буквы.
Теперь нам надо создать модель для пользователей. Создаем файл application\models\Model\Users.php
Осталось создать формы. Если разобраться формы регистрации и логина почти одинаковы и для того чтобы несколь раз не печатать одно и тоже, выделим общую часть в отдельный класс.
Теперь создадим сами формы логина и регистрации
Ну и создадим виды views\scripts\users\register.php и login.php с одинаковым содержимым:
А теперь самое главное — написание самого менеджера задач будет в ;)
PS Если кому показалось данная статья интересной, просьба опубликовать статьюссылку на хабре
Во-первых, скачиваем фреймворк .
Если вам, как и мне, не нужны dojo и примеры(или жалко трафик) скачиваем minimal-версию.
Разархивируйте в любую удобную для вас папку. Открываем консоль и пишем(команды для linux и win аналогичны):
zf create project todoКопируем папку library из архива в корень проекта todo.
Далее все будем делать вручную, но некторые шаги можно было бы выполнить через консоль.
Сразу же настроим zf в файле todo\application\configs\application.ini
#устанавливаем папку для layout'ов - каркаса наших видов
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
#активируем использование видов
resources.view[] =
#настраиваем подключение к базе
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = "pass"
resources.db.params.dbname = "todo"
resources.db.isDefaultTableAdapter = true
Создаем файл layouts\scripts\layout.phtml с примерно таким содержимым:
<?php
// application/layouts/scripts/layout.phtml
echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zend Framework ToDo Application</title>
<?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
</head>
<body>
<div id="header" style="background-color: #EEEEEE; height: 30px;">
<div id="header-logo" style="float: left">
<b>ZF Quickstart Application</b>
</div>
<div id="header-navigation" style="float: right">
<a href="<?php echo $this->url(
array('controller'=>'tasks'),
'default',
true) ?>">ToDo</a>
</div>
</div>
<?php echo $this->layout()->messages; ?>
<?php echo $this->layout()->content; ?>
</body>
</html>
Вот структура нашей БД:
users: id: int a-i username: varchar 255 password: varchar 255 jid: varchar 255 tasks: id: int a-i task: varchar 255
Базу создаем ручками, например, через phpMyAdmin.
Для того чтобы наши формы и модели подгружались автоматически в public\index.php прописываем
\\...
\\эти 4 строки заменяем
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
'../application/models', get_include_path(),
)));
\\а эти добавляем
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
/** Zend_Application */
\\...
Начнем из далека, с контроллера Users.
Создадим файл application\controllers\UsersController.php, где Users — имя контроллера с большой буквы.
<?php
//наследуемся от Zend_Controller_Action
//т.е. класс находится в файле library/Zend/Controller/Action.php
class UsersController extends Zend_Controller_Action
{
//все что находится в этой ф-ии будет выполнено при использовании контроллера
public function init()
{
//подключаем помошник для перенаправления
$this->_redirector = $this->_helper->getHelper('Redirector');
//подключаем Zend_Auth для работы с пользователями
$this->auth = Zend_Auth::getInstance();
}
//создаем action для регистрации
public function registerAction()
{
//создаем форму
$form = new Form_Register();
//если это Post запрос, то продолжаем
if ($this->_request->isPost ()) {
//проверяем правильность введенных значений из запроса
if ($form->isValid ( $this->_getAllParams () )) {
//создаем обьект класса Model_Users
$table = new Model_Users ( );
//засовываем все значения в массив...
$data = array ('username' => $form->getValue ( 'name' ), 'password' => md5 ( $form->getValue ( 'password' ) ), 'jid' => $form->getValue ( 'jit' ) );
//...и вставляем в таблицу
$table->insert ( $data );
//перенаправляем на главную, где index - действие,а tasks - контроллер
$this->_redirector->gotoSimple ( 'index', 'tasks' );
}
}
//передаем контроллер в view
$this->view->form = $form;
}
//action для входа
public function loginAction()
{
$form = new Form_Login ();
if ($this->_request->isPost ()) {
if ($form->isValid ( $this->_getAllParams () )) {
$table = new Model_Users ( );
$data = array ('username' => $form->getValue ( 'name' ), 'password' => md5 ( $form->getValue ( 'password' ) ) );
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('users');
$authAdapter->setIdentityColumn('username');
$authAdapter->setCredentialColumn('password');
$authAdapter->setIdentity($form->getValue('name'));
$authAdapter->setCredential(hash('md5', $form->getValue('password')));
$result = $this->auth->authenticate ( $authAdapter );
if (!$result->isValid()) { // Invalid credentials
$form->setDescription('Invalid credentials provided');
$this->view->form = $form;
$this->render('users'); // re-render the login form
}
$currentUser = $authAdapter->getResultRowObject ();
$this->auth->getStorage()->write ( $currentUser ); //записали юзера в auth, теперь он везде доступен - только для чтения
$this->_redirector->gotoSimple ( 'index', 'tasks' );
}
}
$this->view->form = $form;
}
//action для выхода пользователя
public function logoutAction()
{
$this->auth->clearIdentity();
$this->_redirector->gotoSimple ( 'index', 'tasks' );
}
}
//закрывающий тег в конце ставить _не_ надо
Теперь нам надо создать модель для пользователей. Создаем файл application\models\Model\Users.php
<?php
//наследуемся
class Model_Users extends Zend_Db_Table
{
//$_name это название нашей таблицы
protected $_name = 'users';
}
Осталось создать формы. Если разобраться формы регистрации и логина почти одинаковы и для того чтобы несколь раз не печатать одно и тоже, выделим общую часть в отдельный класс.
<?php
//application\models\Form\Auth.php
class Form_Auth extends Zend_Form
{
public function init()
{
parent::init();
$this->setMethod('post');
$name = new Zend_Form_Element_Text('name',array(
'required'=> true,
'label' => 'Имя:',
'maxlength' => '30',
'validators'=>array(
array('Alnum',true,array(true)),
array('StringLength',true,array(0,30))
),
'filters'=>array('StringTrim'),
));
$this->addElement($name);
$name->setName('name');
$password = new Zend_Form_Element_Password('password',array(
'required'=>true,
'label'=>'Пароль:',
'maxlength'=>'30',
));
$this->addElement($password);
}
}
Теперь создадим сами формы логина и регистрации
<?php
class Form_Register extends Form_Auth
{
public function init()
{
parent::init();
$this->setAction('register');
$about = new Zend_Form_Element_Text('about',array(
'required'=>true,
'label'=>'Jabber:',
'rows'=>'5',
'cols'=>'45',
'validators'=>array(
array('StringLength',true,array(0,100))),
'filters'=>array('StringTrim'),
));
$this->addElement($about);
$submit = new Zend_Form_Element_Submit('submit',array(
'label'=>'Зарегистрироваться',
));
$submit->setDecorators(array('ViewHelper'));
$this->addElement($submit);
}
}
<?php
class Form_Login extends Form_Auth
{
public function init()
{
parent::init();
$this->setAction('login');
$submit = new Zend_Form_Element_Submit('submit',array(
'label'=>'Войти',
));
$submit->setDecorators(array('ViewHelper'));
$this->addElement($submit);
}
}
Ну и создадим виды views\scripts\users\register.php и login.php с одинаковым содержимым:
<?=$this->form?>
А теперь самое главное — написание самого менеджера задач будет в ;)
PS Если кому показалось данная статья интересной, просьба опубликовать статьюссылку на хабре
- +13
- nuclear
- 11 июля 2009, 19:44
А Zend_Routes был запланирован =)
это не перевод, это моя статья