среда, 6 августа 2008 г.

Zend Framework. Модули и URL

Началось все с этой CMS/CMF на базе ZF. Очень мне понравилась (и нравится до сих пор) ее трех модульная структура - Main, Ajax, Admin. Причем в URL, которые мы формируем для этих модулей, явно указывать имя требуется во всех, кроме Main. Т.е. у нас нет URL такого вида:

http://bashmach.blogspot.com/main/messages/history
http://bashmach.blogspot.com/admin/messages/mgmt

а есть такие, более красивые (как по мне):

http://bashmach.blogspot.com/messages/history
http://bashmach.blogspot.com/admin/messages/mgmt

Решил я в целях skill up-a реализовать подобное на ZF.

Для начала "насетапим" ZF и определимся с файловой структурой.
Я сделал так:


В корне в папке application создал директорию modules в которой разместил свои модули. Важно! При добавлении контроллеров следует помнить, что в имя класса контроллера необходимо добавить префикс-имя модуля (для всех, кроме модуля по умолчанию).

require_once 'Zend/Controller/Action.php';

class Admin_IndexController extends Zend_Controller_Action
{
public function init()
{
$this->view->title = 'Module :: Admin';
}

public function indexAction()
{
$this->view->content = 'Module :: Admin :: Content';
}
}


Теперь нужно добавить пути к модулям и контроллерам, а также задать маршруты.
Глубоко не вдаваясь в инициализацию всего приложения:

$frontController = Zend_Controller_Front::getInstance();
$frontController->addModuleDirectory(self::$paths->modules);

$frontController->setControllerDirectory(array(
'admin' => self::$paths->modules . 'admin/controllers',
'main' => self::$paths->modules . 'main/controllers',
'ajax' => self::$paths->modules . 'ajax/controllers',
));

$request = new Zend_Controller_Request_Http();
$router = new Zend_Controller_Router_Rewrite();

$router->addRoutes(array(
'main' => new Zend_Controller_Router_Route('/:controller/:action/*', array('module' => 'main', 'controller' => 'index', 'action' => 'index')),
'admin' => new Zend_Controller_Router_Route('/admin/:controller/:action/*', array('module' => 'admin', 'controller' => 'index', 'action' => 'index')),
'ajax' => new Zend_Controller_Router_Route('/ajax/:controller/:action/*', array('module' => 'ajax', 'controller' => 'index', 'action' => 'index'))
));

$frontController->setDefaultModule('main');
$frontController->setDefaultControllerName('index');
$frontController->setRequest($request);
$frontController->setRouter($router);

$frontController->dispatch();

И вот что у меня получилось:
echo $this->url(array('controller' => 'foo', 'action' => 'index'))
// http://bashmach.blogspot.com/foo
echo $this->url(array('controller' => 'foo', 'action' => 'test'), 'admin')
// http://bashmach.blogspot.com/admin/foo/test

вторник, 5 августа 2008 г.

А вы согласны работать за еду?



Однако боюсь, что даже на еду с такой зарплатой не хватит :)

суббота, 2 августа 2008 г.

5 советов по именованию переменных

Данный пост - вольный перевод статьи Яна Хикмена "5 rules of variable naming".

1. Лет 10 назад, мой преподаватель рекомендовал мне, чтобы я не давал слишком длинные имена переменным потому, что «мои пальцы устанут их набирать», однако сейчас почти каждая современная IDE автодополняет имена переменных за пользователя. А использование длинных имен предотвращает неясность коротких и загадочных переменных.
2. Добавляйте единицы измерений в имена ваших переменные.
Например, если вы разрабатываете инженерное приложений, то вам просто необходимо использовать единицы измерений в именах ваших переменных.
Например:
distanceInMM;
3. Если вы используете CamelCase стиль, то не нужно разделять имена переменных на «подслова».
Пример:
Callback – хорошо.
callBack – плохо.
CamelCase (русск. Верблю́жийРеги́стр) — стиль написания составных слов, при котором несколько слов пишутся слитно без пробелов, при этом каждое слово пишется с большой буквы. Стиль получил название CamelCase, поскольку заглавные буквы внутри слова напоминают горбы верблюда (англ. Camel).
Примеры CamelCase-написания:
• BackColor
• backColor
• CamelCase

4. Никода не присваивайте имя переменной temp. Единственным исключение может быть случай, когда в функции нужно поменять значения переменных.
5. В циклах переменным-счетчикам желательно присваивать имена i, j, x, y.

Хотелось бы услышать комментарии гуру.