CakePHP: Tips & tricks CakePHP #2
В связи с выходом пре-беты 1.2 второй выпуск tips&tricks. Продолжаем знакомить Вас с идеями и проблемами версии 1.2, особенностями пре-беты, с которыми мы встретились в процессе разработки социальной сети.
Кроме того, мы завели себе блог на Хабре - присоединяйтесь, задавайте вопросы. Думаю, нам есть что обсудить.
Новый core.php!
Самое главное измение пре-беты – это новый формат файла core.php! Замените обязательно при обновлении этот файл и настройте его по усмотрению. В принципе, все описание параметров там уже есть.
Кстати, в database.php нормально заработало
'encoding' => 'utf8'
И никаких Вам изощрений с AppModel или mysql.php ;)
Sanitize->clean
Наконец-то привели в нормальный вид метод Sanitize – clean. Ранее он был ненастраиваемым и резал все, что можно в массивах. Теперь у метода появились параметры. Правда, в первой версии фильтр odd_spaces из-за недоработки не работал в первоначальной версии пре-беты, но благодаря автору статью и системы тикетов проблема решена ;)
Итак, теперь легко настроить фильтры для очистки массивов от мусора.
Рассмотрим пример:
uses('sanitize');
$sanitize = new Sanitize();
$options = array(
'connection' => 'default',
'odd_spaces' => true,
'encode' => false,
'dollar' => true,
'carriage' => true,
'unicode' => true,
'escape' => false,
'backslash' => true
);
$array = $sanitize->clean($array, $options);
Вот так, все просто. Выставляете параметры, которые нужно задействовать, как true, а остальное как false.
Кстати, раз уж мы заговорили о Санитайзе, предложу вам довольно логичную конструкцию, которая быстро и просто защищает сайт.
Sanitize в Appcontroller
Поскольку все поступающие данные из форм поступают через $this->data, а над всеми контроллерами существует надстройка Appcontroller, то логично прокрутить следующий финт в beforeFilter:
class AppController extends Controller
{
var $components = array('RequestHandler');
var $helpers=array('javascript', 'ajax','navigation');
function beforeFilter() {
if(!empty($this->data)) {
uses('sanitize');
$sanitize = new Sanitize();
$options = array(
'connection' => 'default',
'odd_spaces' => true,
'encode' => false,
'dollar' => true,
'carriage' => true,
'unicode' => true,
'escape' => false,
'backslash' => true
);
$this->data = $sanitize->clean($this->data, $options);
}
}
}
Все, теперь все данные из форм режутся автоматически ;) Правда, тут на пути истинном встает новая фича версии 1.2 – passedArgs.
Named arguments
Новая фича arguments Args – это способ передачи информации через GET-запросы, т.е. через строку запроса, с помощью рутера. Некоторые простые переменные, которые Вам в каком-либо случае понадобились, можно теперь передавать так:
http://cakephp.org/posts/index/page:2/so…
Соответственно, у нас где-то должны быть созданы переменные page со значением 2 и sort со значением title.
Оказывается, из контроллера их очень легко получить:
$this->passedArgs[‘page’];.
$this->passedArgs[‘sort’];
Здесь, правда, возникает проблема, которая мной пока не исследована – что можно передавать таким образом? Не слабое ли это место в защите. Если да, то passedArgs имеет смысл также засунуть в sanitize, чтобы он эти аргументы хорошенько почистил :)
Класс Set
Эта удобная фича поможет в одну строчку разобрать целый массив, например, $this->data.
Предположим, Вы получили из БД таблицу users. Соответственно, массив данных выглядит так:
$users = array
(
0 => array
(
'User' => array
(
'id' => 1
, 'name' => 'Felix'
)
)
, 1 => array
(
'User' => array
(
'id' => 2
, 'name' => 'Bob'
)
)
, 2 => array
(
'User' => array
(
'id' => 3
, 'name' => 'Jim'
)
)
);
Хотите получить только имена пользователей? Да запросто:
$userNames = Set::extract($users, '{n}.User.name');
Как видите, {n} есть некий идентификатор скалярного массива. Соответственно, {n} можно помещать в различные места строки, меняя местонахождение этого скалярного массива в иерархии массива, содержащего скалярный.
Сам класс можно посмотреть отдельно, поскольку дело не ограничивается одним лишь extract. Есть merge, diff, contains, normalize. В общем, как всегда не хватает хелпа ;), а API здесь:
https://trac.cakephp.org/browser/branche…
Мануал
Таки мануал для 1.2 был снова возвращен на место. Правда, еще есть много недопечатанного, но, видимо, его постоянно дополняют.
В открытом доступе в html-виде можно прочитать здесь:
http://getbits.info/wp-go.php?url=http://tempdocs.cakephp.org/
Ждем Ваших замечаний и предложений. Также помните, что найденные проблемы можно оставить в виде тикета на сайте Кейка.
- PHP: Tips & tricks CakePHP Для тех, кто уже успел познакомиться с фреймворком.Гибкое управление связями По умолчанию, при поиске всех представителей модели, Cake ищет и все связанные с ней подмодели. Что бывает часто неудобно, поскольку число запросов резко увеличивается, как и число бесполезной информации. Это, конечно, можно решить стандартными средствами, типа $this->recursive в размере количества необходимых подуровней поиска (до 3 по умолчанию), но и это часто не помогает, т.к. бывает, что некоторые субмодели нужны
- Я умный: CodeIgniter vs. CakePHP Ниже находится переводстатьиДжонатана Снука (Jonathan Snook) о преимуществах и недостатках двух популярных PHP фреймворков CakePHP и CodeIgniter. Прежде чем публиковать такого рода публикации, я обычно опасаюсь за всякого рода фанатиков, которые неадекватно реагируют на подобные сравнения. Поэтому стараюсь максимально объективно подойти к повествованию. Все выводы в статье сделаны только на основании фактов. Я сопоставляю эти две платформы друг против друга, но безоговорочного победителя здесь
- Web-разработка: Разберемся раз и навсегда: AJAX, «кириллические символы», кодировки, prototype.js, jQuery, JsHttpRequest AJAX, — это технология. Одной из часто используемых техник этой технологии является посылка запросов при помощи объекта класса XMLHttpRequest. Как же посылать и принимать AJAX запросы в нужной нам кодировке, нужно ли использовать однобайтовые кодировки или не обойтись без UTF-8. На все эти вопросы раз и навсегда ответит эта статья. Кстати, перепечатка с моего. И ещё, классов-то, конечно, в JavaScript нет, но для удобства будем пользоваться такой терминологией. В документации на XMLHttpRequest с
- PHP: Введение в Zend_Auth В статье приведен обзор возможностей компоненты Zend_Auth, дающий общее представление о реализации пользовательской авторизации в приложениях на базе Zend Framework. В качестве основы приводимых примеров, использованы материалы статьи «Введение в Zend Framework». Примеры протестированы на Zend Framework версий 0.9, 0.9.1 и 0.9.2, и скорее всего будут работать с более поздними версиями, но не с более ранними. Автop: Рoб Алeн, http://akrabat.comОpигинaл:http://akrabat.com/zend-auth-tutorialПepe
- Ajax: AJAX для новичков Сейчас в сети Интернет наблюдается очень активное развитие (и даже использование) новых технологий. Одна из таких технологий - AJAX.Что такое AJAX? AJAX - это аббревиатура, которая означает Asynchronous Javascript and XML. На самом деле, AJAX не является новой технологией, так как и Javascript, и XML существуют уже довольно продолжительное время, а AJAX - это синтез обозначенных технологий. AJAX чаще всего ассоцириуется с термином Web 2.0 и преподносится как новейшее Web-приложение. При исполь
- PHP: Программируем стартап Веб 2.0 на PHP Итак, вы воодушевлены идеей стартапа Веб 2.0. Вы полагаете, что придумали что-то оригинальное и свежее. Вам видится эффектная реализация вашей идеи. Вы верите, что ваш проект произведет революцию на рынке. Если именно такие мысли занимают вас, самое время заняться бизнес-планом. Планирование бизнеса – это отдельная дисциплина и об этом можно найти множество литературы. Впрочем, если вы не имеете опыта составления бизнес-планов, лучше прибегнуть к помощи профессионалов. Чем хуже спрогнозирован
- PHP: Введение в Zend Framework (продолжение) Продолжаем рассказ о Zend Framework. В первой части статьи была описана концепция программной архитектуры MVC, рассмотрена структура типового веб-приложения, базирующегося на Zend Framework и выполнена демонстрационная реализация контроллера и вида на его основе. Во второй части будет раскрыта тема модели и приведен пример взаимодействия приложения с базой данных. Для печaти рекомендуется использовaть полную версию стaтьи в формaте PDF: zend-fw-intro.pdfАвтор: Роб Ален, http://akrabat.comОриги
- Web-разработка: Яндекс-like поиск своими руками. Редкий веб-программист не сталкивался с задачей написания поиска для своего сайта. независимо от того – делалось ли это для собственной CMS или для первого сайта, сделанного фирме двоюродного дяди топориком на коленке в 10 классе.Зачастую, задача поиска по сайту решается использованием простого SQL-запроса вида where `content` like ‘%семенович%’, при котором искомая фраза разбивается на слова и каждое ищется средствами SQL среди строк в БД. Несмотря на простоту этого решения, качество результат
- Я умный: Выбор хостинга: кому можно доверять? Два года назад у меня появилась идея сделать хобби-проект про музыку, выложить записей. В ту пору, да и сейчас, хороших академических ресурсов было совсем не много. Сайт Аркадия Чубрика весьма хорош, только вот беда — он один в своем роде. Решил, выбрал хостинг, наверстал, оцифровал, выложил. Получился ArtOfPiano.ru. Ссылки на меня поставили, проект зажил. Поисковики меня полюбили, пользователи шлют »спасибо«. Казалось бы, сайту ничего не мешает... Признаю честно, сайтом год не занимался
- PHP: Безопасный метод авторизации на PHP Примечание: мини-статья написана для новичков Давайте посмотрим вокруг: форумы, интернет магазины, гостевые книги и т.д. используют регистрацию и последующую авторизацию пользователей. Можно даже сказать, что это почти необходимая функция каждого сайта (только если это не домашняя страничка Васи Пупкина или не визитная карточка, какой-нибудь небольшой компании). Сегодня я хочу поделиться со всеми новичками информацией, о том, как лучше это все реализовать. 1. Модель (клиент) Регистрация - логин