© 2010 - 2011 /home/sinkler/

Немного фактов о CakePHP
Open Source веб-фреймворк CakePHP, реализующий популярный паттерн MVC (Модель-Вид-Контроллер), в последнее время набирает все большую популярность. Множество студий (в том числе и у нас в России) перешли на разработку сайтов именно на этой СМF. Изначально Cake создавался как клон Ruby on Rails, первая его версия называлась Rapid Application Framework и была написана в 2005 году Михаэлем Татариновичем. Создатель опубликовал RAF под лицензией MIT и переименовал его в Cake. Сегодня разработкой фреймворка занимается компания Cake Software Foundation.
Некоторые прелести CakePHP:
- Совместимость с PHP4 и PHP5
- Скаффолдинг приложений
- Генератор кода
- Архитектура Model-View-Controller (MVC)
- Диспетчер запросов, с возможностью создавать и использовать человеко-понятные ссылки (ЧПУ)
- Встроенная верификация данных
- Быстрое и гибкое шаблонизирование (PHP синтаксис, с хелперами)
- Хелперы, выполняющие за вас рутину по работе с AJAX, Javascript, формами HTML и многим другим
- Компоненты безопасности, сессий, и обработки запросов
- Гибкие списки контроля доступа (Access Control Lists)
- Обработка данных
- Гибкое кеширование отображений (View Caching)
- Работает из любой поддиректории веб-сайта, без вовлечения конфигурации Apache
Если вы еще не работали с CakePHP, советую посмотреть сайт book.cakephp.org, на нем есть отличный пример создания блога (http://book.cakephp.org/view/219/Blog), который поможет вам понять, как работать с этим фреймворком.
Текущая стабильная версия CakePHP - 1.2.6, но уже вышла версия 1.3 beta, а так же в разгаре разработка CakePHP 2.0 (обновление 1.х с переходом на строгую совместимость с PHP5, вследствие отказа от поддержки PHP4 - прибавление производительности примерно на 25%) и CakePHP 3.0 (полностью переписан на PHP5.3).
Все примеры из этой статьи написаны для CakePHP 1.2.x.
Хелперы
Хелперы в CakePHP предназначены для быстрого представления и форматирования ваших данных удобным способом, они значительно убыстряют разработку приложений, делают её менее монотонной. CakePHP 1.2 по умолчанию включает 12 хелперов, имеющих огромное количество всевозможных методов. Два хелпера, которые вы будете наиболее часто использовать (или уже используете) в своих проектах - это Html и Form. Хелпер Html помогает быстро использовать повторяющиеся разделы html-кода, например, создавать ссылки, списки, вставлять изображения в ваши отображения. Form-хелпер поможет вам быстро создавать формы.
Как исползовать хелперы? Первым делом, подключите необходимых помощников в контроллере, используя переменную $helpers.
var $helpers = array('Html, Form');
Теперь вы можете использовать их в своих отображенях, например
echo $html->link('Гугль', 'http://google.ru/');
Но, с течением времени и с развитием ваших приложений, вам наверняка захочется создать своих помощников.
Например, на ваших страницах очень часто используется форма с выпадающим списоком для выбора одного из предложенных цветов и с кнопкой "выбрать":
<form method="post" action="/cake/blog/colors/set/">
<div class="input select">
<label for="ColorColor">Выберите цвет</label>
<select name="data[Color][color]" id="ColorColor">
<option value="green">Зеленый</option>
<option value="red">Красный</option>
<option value="white">Белый</option>
</select>
</div>
<div class="submit"><input type="submit" value="Выбрать" /></div>
</form>
Конечно, можно каждый раз создавать эту форму с помощью хелпера Form, а можно создать своего помощника и добавить в него метод, который будет делать это за вас.
Создаем свой хелпер
Итак, начинаем делать свой хелпер, назовем его Help.
Создаем в папке app/views/helpers/ файл help.php
<?php
class HelpHelper extends AppHelper {
//наш новый хелпер будет использовать стандартный хелпер Form
//добавить его поддержку очень просто, делается это так же, как и в контроллерах
var $helpers = array('Form');
}
?>
Теперь добавим метод setColor, который будет cоздавать нашу форму. Сделаем его универсальным: если вызывать метод без параметров, то он будет выводить три цвета по умолчанию (зеленый, красный, белый), а если же вызвать его, указав параметром массив, содержащий названия цветов (например, array('blue'=>'Синий')), то будет выводить еще и цвета из массива.
<?php
class HelpHelper extends AppHelper {
var $helpers = array('Form');
/**
* @return string
* @param array $colors массив дополнительных цветов для вывода в поле colors формы Color
* @desc Создает форму с выпадающим списком для выбора цветов
*/
function setColor($colors = array()) {
//создаем массив цветов по умолчанию
$options = array('green'=>'Зеленый', 'red'=>'Красный', 'white'=>'Белый');
//если параметр $color не пустой, объединяем его с массивом цветов по умолчанию
if (!empty($colors)) $options = array_merge($options, $colors);
//в строку $output будем записывать то что мы должны получить на выходе
//обратите внимание, используя стандартные хелперы здесь, необходимо писать названия их переменных с большой буквы
//создаем форму
$output = $this->Form->create('Color', array('url'=>'/colors/set/', 'type'=>'get'))."\n";
//выводим список с цветами
$output .= $this->Form->input('colors', array('type'=>'select', 'options'=>$options, 'label'=>'Выберите цвет'))."\n";
//закрываем форму
$output .= $this->Form->end('Выбрать');
//и, наконец, возвращаем все, что получилось
return $this->output($output);
}
}
?>
Просто, не правда ли? Теперь попробуем новый хелпер в деле. Подключаем его в контроллере:
var $helpers = array('Help');//тут, естественно, могут присутствовать другие хелперы, кроме нашего
И используем метод setColor в нашем представлении:
echo $help->setColor();
echo "\n<br />\n";
echo $help->setColor(array('blue'=>'Синий', 'orange'=>'Оранжевый'));
На выходе этот пример выдаст следующее:
<form method="get" action="/cake/blog/colors/set/"> <div class="input select"><label for="ColorColors">Выберите цвет</label><select name="colors" id="ColorColors"> <option value="green">Зеленый</option> <option value="red">Красный</option> <option value="white">Белый</option> </select></div> <div class="submit"><input type="submit" value="Выбрать" /></div></form> <br /> <form method="get" action="/cake/blog/colors/set/"> <div class="input select"><label for="ColorColors">Выберите цвет</label><select name="colors" id="ColorColors"> <option value="green">Зеленый</option> <option value="red">Красный</option> <option value="white">Белый</option> <option value="blue">Синий</option> <option value="orange">Оранжевый</option> </select></div> <div class="submit"><input type="submit" value="Выбрать" /></div></form>
Вы можете добавить сколько угодно методов в свой хелпер, все зависит от нужд и фантазии.
Как видите, создать своего помощника - очень просто. Впоследствии он сохранит вам огромное количество времени, особенно, если вы пишете разные проекты на CakePHP: создайте один раз хелпер и используете его во всех своих приложениях ;)
Заключение
Помните, что создавая хелпер, его необходимо постоянно подключать вручную, поэтому имеет смысл создавать хелпер, когда в нем содержится хотя бы три-четыре метода. И еще один недостаток: если вы работаете в команде, то ваши верстальшики не могут изменить разметку данных, которые возврашает любой метод помощника.
Если требуется четкое разделение верстки от данных или необходимо создать какой-либо мелкий элемент страницы, для которого не имеет смысл создавать хелпер, (например, меню навигации), то лучше использовать элементы.
Комментарии
А мою рекламу че ты убрал....Шурш не порядок)))
Триал-период размещения вашей рекламы истек. Заплатите всего лишь $50 и ваша реклама будет вновь радовать посетителей этого сайта =DDDD
Что-то пусто у тебя, но пишешь нормальные статьи, молодец
Troy, пара статей в черновиках лежит, времени и сил всё нет довести до ума. Но, думаю, буду исправлять это в ближайшем времени =)
перечитал весь блог, довольно неплохо
Prayemsmoonry, да тут и читать-то нечего толком =)
*по прежнему жду свободного времени*
Действительно оказалось очень просто, но для полноты картины (только начал использовать cake и юзаю 1.3.3, а не 2x ветку) я всё таки прочитал ещё статью и на book.cakephp.org :)
rusik, да, сам уже давно на 1.3 занимаюсь выпечкой)))
но общий смысл тот же