CakePHP с нуля используем генератор Bake


Содержание

Печём пирожки или начало работы с CakePHP по-русски

Скоро товарищей, пишущих по старинке веб-страницы на голом php, можно будет показывать в зоопарках :) Наступает эра Фреймворков. И это хорошо, потому что программист избавлен от множества рутинных задач, и может сосредоточиться на создании логики приложения. В CakePHP используется подход MCV (Model — View — Controller). Теперь вместо одного файла *.php на одну страничку их будет целых три минимум %) — один для модели (описывает связь формы с базой данных, имеет расширение php), thtml файл будет описывать внешний вид страницы (view), третий (контроллер страницы с расширением php будет реализовывать логику формы и будет содержать методы, дополняющие функциональность родительского класса AppController.

Что ж, начнем печь приложения как пирожки :)) Но для этого придется преступить через себя и принять новый подход к программированию. Оно того стоит ^_^

Установка

Вам нужен Apache с установленным mod_rewrite и mod_php, php4 или php5, а также база данных (в нашем примере используется MySQL). Первым делом разживитесь на www.cakephp.org свежей версией CakePHP. Там же расположен неплохой мануал, которому я во многом буду следовать. Распакуйте архив в корневую директорию веб-сервера и наберите в браузере адрес сайта. Должна появиться приветственная страничка: Your database configuration file is not present.

Нужно прописать соединение с базой данных. Делается это в директории app/config — берем за основу database.php.default и переименовываем его в database.php. Прописываем в файле параметры соединения с базой. Если все ОК то CakePHP сообщит об этом. Your database configuration file is present. Cake is able to connect to the database.

Все готово для творчества.

Модуль новостей

Напишем простейший модуль новостей, чтобы проиллюстрировать технологию создания сайтов на Фреймворке. Создадим в базе данных таблицу posts, в которой будут храниться новости.CREATE TABLE `posts` ( `id` bigint(20) NOT NULL auto_increment, `post_date` date NOT NULL default ‘0000-00-00’, `post_header` varchar(255) NOT NULL default », `post_text` text NOT NULL, `archived` tinyint(4) NOT NULL default ‘0’, PRIMARY KEY (`id`) )

Вопрос: почему бы таблицу не назвать «news»? Таблица должна иметь имя сущности во множественном числе. В английском «новости» news всегда употребляется во множественном числе, тем более слово new является ключевым в php, что приводит к ошибке.

Модель

В папке app/models создадим файл модели post.php VALID_NOT_EMPTY, ‘post_text’ => VALID_NOT_EMPTY, ‘post_date’ => VALID_NOT_EMPTY ); > ?>

В массиве $validate описываются ограничения накладываемые логикой приложения на данные. Мы запретили пустые поля Текст, Заголовок и Дата.

Контроллер

В папке app/controllers создадим файл posts_controller.php. Создадим объект, который реализует основные функции модуля новостей: отображение списка (index), просмотр новости (view), удаление новости (delete), добавления новости (add).set(‘posts’, $this->Post->findAll()); // выборка всех
записей //из таблицы $this->pageTitle = ‘Новости’; > function view($id) // просмотр новости < $this->Post-> >set(‘post’, $this->Post->read()); > function add() // добавление новости < if (!empty($this->data)) < if ($this->Post->save($this->data)) < $this->flash(‘Новость была успешно добавлена’,’/posts’); // flash выдает сообщение пользователю в виде ссылки на страницу, указанной во втором аргументе функции > > > function delete($id) // удаление новости < $this->Post->del($id); $this->flash(‘Новость была удалена’, ‘/posts’); > function edit($ >data)) < $this->Post-> >data = $this->Post->read(); > else < if ($this->Post->save($this->data[‘Post’])) < $this->flash(‘Новость была отредактирована’,’/posts’); > > > > ?>

В папке app/views создадим папку posts. В этой папке необходимо создать файлы видов для каждой функции, кроме функции Delete, которая не требует своего вида, а использует только функцию flash.

app/views/posts/index.thtmlНовости >’; if (count($posts)>0) < ?>

Дата Заголовок Текст
= $news_teaser_length) < $last_word = $mes_words[$news_teaser_length -1]; for ($i = 0; $i link($text.$news_more_annex, '/posts/view/'.$post['Post']['id']); >else < echo $html->link($post[‘Post’][‘post_text’], ‘/posts/view/’.$post[‘Post’][‘id’]); > ?> link(‘Редактировать’, ‘/posts/edit/’.$post[‘Post’][‘id’]); ?> link(‘Удалить’, ‘/posts/delete/’.$post[‘Post’][‘id’]); ?>

Новостей пока нет»; > ?>

Название:
input(‘Post/post_header’, array(‘size’ => ’40’))?> tagErrorMsg(‘Post/post_header’, ‘Название не может быть пустым.’) ?>

Дата:
input(‘Post/post_date’, array(‘size’ => ’40’))?> tagErrorMsg(‘Post/post_data’, ‘Дата не может быть пустой.’) ?>

Текст:
textarea(‘Post/post_text’, array(‘rows’=>’10’)) ?> tagErrorMsg(‘Post/post_text’, ‘Сообщение не может быть пустым.’) ?>

app/views/posts/edit.thtmlРедактирование новости hidden(‘Post/id’); ?>

Заголовок:
input(‘Post/post_header’, array(‘size’ => ’40’))?> tagErrorMsg(‘Post/post_header’, ‘Необходим заголовок.’) ?>

Дата:
input(‘Post/post_date’, array(‘size’ => ’40’))?> tagErrorMsg(‘Post/post_date’, ‘Необходима дата.’) ?>

Текст:
textarea(‘Post/post_text’, array(‘rows’=>’10’)) ?> tagErrorMsg(‘Post/post_text’, ‘Текст не должен быть пустым!’) ?>

Фу: вроде все почти готово :) Теперь осталось перенаправить пользователя c приветственной странички CakePHP на страничку app/posts.

Для этого идем в app/config/routes.php и меняем там строку$Route->connect(’/’, array(’controller’ =>
‘pages’, ‘action’ => ‘display’, ‘home’));

на строку$Route->connect (’/’, array(’controller’=>’posts’, ‘action’=>’index’));

Теперь можете в браузере набрать адрес сайта и понаблюдать CakePHP в действии :)

Небольшая обработка напильником

Полюбовавшись на полученное приложение, пытливый читатель скоро почувствует разочарование. Как поменять стиль страницы, убрать маленький баннер снизу и гордое «CakePHP Rapid Development» в верху каждой страницы? Как заставить функцию flash отображать текст по-русски? Для этой цели служат layouts. (Долго думал, как перевести layouts и решил остановиться на слове «шаблоны»). Бодро идем в папку app/views/layouts и помещаем там нужные файлы:

default.thtml, например, такой:

Вылечим функцию flash от любви к utf8. Для этого разместим там же flash.thtml

Прототипы этих файлов можно увидеть в папке cake/libs/view/templates/layouts

Видеокурс «Фреймворк CakePHP: с Нуля до Гуру»

Фреймворк CakePHP: с Нуля до Гуру на примере создания корпоративного сайта. Презентация курса 13 мин. 22 сек.

  • О видеокурсе
  • Темы уроков курса
  • Особенности

Перед Вашими глазами — первый и единственный исчерпывающий видеокурс в сфере работы с фреймворками CakePHP в Рунете!

Если Вы будете посвящать всего 1-2 часа в день на изучение материалов курса, то уже менее чем через 30 дней Вы уверено сможете создавать сайты любой сложности, используя фреймворк CakePHP!

Видеокурс состоит из двух частей:

  • Первая часть курса целиком и полностью посвящена изучению специальных возможностей, которые предоставляет фреймворк CakePHP. В данной части Вы прикоснетесь к его огромным возможностям и попробуете начать применять их на практике при создании простого блога;
  • После изучения второй части видеокурса, Вы сможете закрепить на практике всё, что изучили в первой части, а также найдете огромное количество новых возможностей и информации для себя.

Автор гарантирует, что уже через два месяца Вы превратитесь из новичка веб-программирования в настоящего профессионала, которому по плечу даже самые дорогие и сложные веб-проекты!

bake generator

bake generator

Do you know if the bake generator is able to deduce table relationship
when it generate the model ?
If it is possible, I suppose it need a DB strict name convention . any
info, doc, tuto, examples,

Also, how to customize baked view, model, controller ? Any tips,
example, recommendation ?
Where could I find documented all the «special variable» available ?
(I’m guessing I’ll need an array of the field in a view for example)

You received this message because you are subscribed to the Google Groups «Cake PHP» group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

Sorry for reposting but I really would like to custimize bake
generation, if it is possible.
Are there templates ? Same as scaffolding ?

Also, I need more info on table relationship taken into account in the
generated model.

Any clue appreciated, including pointer to the cake code

You received this message because you are subscribed to the Google Groups «Cake PHP» group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

Re: bake

The code to deduce table relationship is in ModelTask::doAssociations()
defined in /cake/console/libs/tasks/model.php
You also have to check Inflector class defined in
/cake/libs/inflector.php. This define naming conventions.

I think this mechanism is based on the cakePHP naming convention and
there is no template for this purpose. So you need modify the source
code in order to customize bake behaviors.


You received this message because you are subscribed to the Google Groups «Cake PHP» group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

Re: bake

Thanks, I’ll have a look.

Why not reusing scaffold templates ?
Bake could be seen as a static scaffold, isn’t it ?
So saving the result of a scaffold template could be the bake result.
Doing so will :
* merge that part
* make bake as flexible as scaffold

I’m not sure . I’ll read that code, try to understand and I’ll see .

Обзор CakePHP 3 — Все еще свежий, все еще тепленький

Дата публикации: 2015-06-01

От автора: год назад команда разработчиков фреймворка CakePHP объявила о запуске новой альфа-версии CakePHP 3 (новая версия вышла в марте 2015 года). Разработчики фреймворка считают, что выход новой версии станет переломным моментом в истории фреймворка, поэтому вместе с тепленьким, прямо из духовки, релизом альфа-версии, родилась и данная статья, в которой представлен свежий взгляд на CakePHP 3, как на эффективный современный фреймворк в веб-разработке на PHP.

Краткая история

В настоящее время существует огромное количество вариантов, когда речь заходит о веб-разработке на PHP. Со временем PHP окреп, и стало появляться все больше PHP фреймворков, предоставляющих веб-разработчиками широкий выбор возможностей. Но так было далеко не всегда.

Если вернуться назад, в 2005 год, когда PHP 4 все еще являлся стандартом, то никаких PHP фреймворков не было, и объектно-ориентированный подход к разработке на PHP был существенной проблемой. Вот как раз в этот момент и появился CakePHP — самый первый PHP MVC фреймворк. Спустя почти 10 лет с момента первого релиза CakePHP продолжил развиваться, способствуя укреплению позиций PHP-разработчиков на рынке труда.

Насколько популярным является фреймворк CakePHP? Он находится в четверке самых популярных PHP проектов на GitHub, на нем реализовано около 130,000 проектов, его группа в Google, в которой создано 32,000 тем для обсуждений, насчитывает более 18,000 участников. Учитывая то, что 270 разработчиков помогали разрабатывать и улучшать код, а 320 разработчиков помогали в написании документации, можно сделать однозначный вывод о том, что у данного фреймворка есть много сторонников. Широкое распространение и растущая, в настоящее время, популярность CakePHP также хорошо описаны в статье, которую написал Джеймс Уоттс (James Watts), ключевой разработчик и администратор сообщества в организации Cake Software Foundation, с которым я консультировался в процессе написания данной статьи.

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого роста с нуля в сайтостроении

С появлением 3ей версии фреймворка можно, почти с полной уверенностью, ожидать, что CakePHP останется одним из лидирующих фреймворков в мире PHP, несмотря на огромное количество других PHP фреймворков.

Что нового появилось в 3ей версии CakePHP?

Данный обзор основан на описании альфа-релиза CakePHP 3.0, в котором описаны новые возможности и улучшения, включающие следующие моменты:

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

Улучшенные компоненты и хелперы. Третья версия предоставляет улучшенную поддержку уведомлений («быстрых сообщений») благодаря новым классам FlashHelper и FlashComponent. Плюс, был улучшен класс CookieComponent, упрощающий разделение конфигурации для настройки пространства имен у кук и обработки куки данных.

Улучшенное управление сессиями. Управление сессиями всегда было представлено статическим классом в CakePHP, что вызывало ряд проблем в процессе разработки. С выходом третьей версии вы можете получить доступ к сессии через запрашиваемый объект $this->request->session(). Данное изменение упрощает процесс тестирования и позволяет использовать PHPUnit 4.x.

Улучшенное взаимодействие и единообразие. Теперь каркас приложения и каркасы плагинов будут иметь одинаковую структуру директорий для улучшения согласованности частей фреймворка друг с другом.

Слияние тем и плагинов. Одна из ключевых целей CakePHP 3 заключалась в создании более мощных тем. Работая над поставленной целью, стало понятно, что темам действительно необходимы возможности, имеющиеся у плагинов. Соответственно, теперь любой плагин может быть использован в качестве темы, что, в свою очередь, упрощает процессы сборки и перекомпоновки.

Улучшения ORM. Было проведено несколько изменений API, направленных на улучшение ORM (объектно-реляционное отображение). Самое примечательное, что теперь стало гораздо легче определять глубокие связи для экономии операций. Помимо этого, были изменены несколько соглашений, чтобы сократить время обучения и устранить недопонимание со стороны новичков, только начинающих использовать данный фреймворк.

Кроме того, планируется также включить несколько дополнительных возможностей в бета-релиз третьей версии фреймворка. Самые важные из них:

Улучшение интернационализации и локализации (i18n и L10n)

Замена класса CacheHelper, основанная на языке разметки Edge Side Includes

Новое API для более быстрого и простого создания маршрутизации

Третья версия, действительно, представляет существенное обновление фреймворка CakePHP по сравнению с предыдущими версиями.

Почему CakePHP?

Несмотря на то, что в CakePHP есть много классных возможностей, в данном обзоре мы сфокусируемся лишь на нескольких из них, которые действительно выделяют данный фреймворк на фоне других:

Соглашение важнее конфигурации

ORM (Объектно-реляционное отображение) в CakePHP

Компоненты и хелперы

Соглашение важнее конфигурации

CakePHP всегда был связан с быстрой и последовательной разработкой, и, с этой точки зрения, в CakePHP очень большое внимание уделяется соглашениям. Таким образом, подобно фреймворку Ruby on Rails (который послужил одним из источников для вдохновения), CakePHP твердо придерживается принципа соглашение важнее конфигурации.

Соглашения позволяют разработчику не думать о том, «что будет дальше» в процессе изучения фреймворка CakePHP, поскольку необходимые правила уже созданы и выстроены в правильном порядке по умолчанию. Хотя разработчику и нужно познакомиться со всеми принятыми соглашениями в CakePHP, он сможет в дальнейшем, как только освоится, сконцентрироваться на самой сути разработки, не думая о том, где расположен код и какие еще конфигурационные настройки необходимо произвести.

Соглашения CakePHP резко выделяются на фоне самого PHP, который является достаточно либеральным языком программирования. В результате, CakePHP помогает гарантировать существенное единообразие и согласованность в написании кода и создании структур между многими отдельными разработчиками и даже командами разработчиков. Устанавливая стандартный набор соглашений, CakePHP стремится сделать веб-разработку более единообразной и устойчивой.

Для схемы базы данных, например, CakePHP по умолчанию делает ряд определенных предположений относительно того, как определенные переменные, таблицы и их поля должны быть названы. А именно, CakePHP ожидает, что:

Имена таблиц будут заданы во множественном числе (например, orders)

Имя поля первичного ключа будет id

Имена полей внешних ключей будут основаны на соответствующих именах таблиц с последующим добавлением _id (например, внешний ключ в таблице customers был бы назван customer_id).

В качестве демонстрации давайте рассмотрим простой пример с двумя таблицами (articles и users) из базы данных, использующейся для хранения постов блога. В нашем случае мы скажем, что Articles принадлежит (belongsTo) Users, а Users содержит много (hasMany) Articles. В CakePHP 3.0 данные взаимосвязи определялись бы следующим образом:

CakePHP предполагает, что были использованы принятые соглашения, и поэтому в процессе выборки ему уже автоматически известно, какие внешние ключи нужно искать (т.е. user_id в таблице articles).

Однако, здесь важно отметить, что CakePHP 3 действительно позволяет легко переопределить соглашения, принятые по умолчанию. Например, предположим, что наш внешний ключ в таблице users был назван author_id вместо user_id. Учитывая данный момент, нам потребуется сделать всего лишь два небольших изменения в нашем коде, чтобы CakePHP понял, что мы не используем соглашения, принятые по умолчанию:

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого роста с нуля в сайтостроении

Таким образом, хотя соглашения, имеющие свои преимущества, и являются неотъемлемой частью CakePHP, их легко можно переопределить при необходимости, как это только что было показано.

В то время как некоторые разработчики предпочитают PHP фреймворки (такие как Yii и Laravel), которые не очень сильно опираются на соглашения, соглашения CakePHP могут действительно быть сильно полезными. Они могут помочь разработчику существенно сократить время разработки, когда приходится улучшать или поддерживать код, написанный сторонним разработчиком, поскольку они оказывают прямое влияние на единообразие и согласованность кода и структуры приложений у многих разработчиков, использующих CakePHP, и во многих проектах.

Объектно-реляционное отображение (ORM) в CakePHP

Объектно-реляционное отображение (ORM) в CakePHP очень сильно выигрывает благодаря использованию соглашений фреймворка. Настраивая схему базы данных согласно стандартам CakePHP, вы можете быстро связать таблицы друг с другом благодаря мощному ORM в CakePHP. Вам редко придется использовать SQL-операторы, поскольку CakePHP, например, сам с легкостью обрабатывает различные виды объединения таблиц (hasManyи даже hasAndBelongsToMany).

Используя преимущества класса ContainableBehavior в CakePHP, вы можете, через ассоциации вашей модели, определить, какие таблицы и поля в вашей базе данных должны быть выбраны с помощью SQL запроса. Благодаря ORM становится легче быстро создавать сложные SQL запросы на нескольких уровнях вложенности.

Между прочим, класс ContainableBehavior является отличным примером того, как CakePHP может упростить и модернизировать процесс веб-разработки на PHP. Он позволяет вам искать и фильтровать данные понятным и единообразным способом, а также может помочь увеличить скорость работы вашего приложения и улучшить его общую производительность. (Это работает путем временного или постоянного изменения связей в ваших моделях, используя встроенные возможности для генерации соответствующих серий вызовов bindModel и unbindModel.)

Проблема с ORM заключается в том, что оно делает использование SQL настолько простым, что если разработчик будет недостаточно внимательным, он или она могут писать неэффективные SQL запросы, даже не подозревая об этом. Я действительно много раз видел плохо написанные приложения на CakePHP, в которых не были упорядочены SQL-запросы. Обычно подобные проблемы всплывают спустя несколько лет с момента деплоя, когда базы данных разрастаются, а плохо написанные запросы становятся ужасно медленными.

Основным моментом здесь является то, что до CakePHP 3, ORM получала бы, по умолчанию, любые связанные таблицы при выполнении запроса. В результате простой запрос «найти все» (“find all”) мог потенциально стать очень перегруженным, т.к. SQL были бы получены все данные из всех связанных таблиц. Начиная с версии 3, такое поведение не является поведением по умолчанию. (А в предыдущих версиях CakePHP такое поведение легко отключить, добавив ublic $recursive = -1; в ваш основной файл AppModel.php.)

В общем, обзор ORM в CakePHP показывает, что оно действительно способно улучшить процесс разработки, и если им правильно пользоваться, то это отличный инструмент для быстрого создания сложных запросов. И критически важно, чтобы разработчики уделили достаточное время пониманию ORM, чтобы их запросы были правильными и оптимизированными (что справедливо для любого языка программирования).

Компоненты и Хелперы: библиотеки CakePHP

Одной из потрясающих возможностей CakePHP являются встроенные библиотеки – Компоненты и Хелперы – которые избавляют разработчиков от выполнения многих скучных, повторяющихся и монотонных задач. В контексте MVC, Компоненты помогают улучшить разработку контроллеров, а Хелперы (вспомогательные классы) — упростить логику и код «вьюшек» (т.е. презентационного уровня приложения).

Например, компонент PaginatorComponent магическим образом автоматически конструирует интерфейс постраничной навигации, исходя из поискового запроса. Добавьте хелпер JsHelper, и у вас неожиданно появится пагинация с использованием технологии AJAX, реализованная с помощью вашего любимого JavaScript фреймворка (по умолчанию это jQuery).

Вот некоторые другие полезные Хелперы:

TimeHelper: значительно упрощает процесс отображения дат и времени, предоставляя набор функций для форматирования и вычисления временных значений.

NumberHelper: предоставляет удобные методы для отображения чисел в различных общепринятых (или собственных) форматах и с разной степенью точности.


TextHelper: помогает в создании ссылок, форматировании URL-адресов, создании отрывков текста вокруг выбранных слов или словосочетаний, подсвечивании ключевых слов в текстовых блоках и изящном обрезании длинных участков текста.

Помимо этого есть еще много других Хелперов.

Критика CakePHP 3

Безусловно, каждый фреймворк имеет свои достоинства и недостатки, и CakePHP тому не исключение. Вот лишь некоторые распространенные примеры критики, направленной на CakePHP (данная критика не является мнением автора):

«Устаревший фреймворк; «раздутый» и медленный» — Данное мнение имеет больше исторический характер, с ограниченной (или вообще без нее) долей правды в настоящее время. Поддержка старых версий PHP (4 и ниже) просто исторически требовала от CakePHP «борьбы» с имеющимися проблемами самого PHP. По мере того, как PHP стал более сформированным и окрепшим языком программирования, а также с выходом новой версии CakePHP, данное мнение уже утратило свою значимость.

«Чересчур строгий и ограниченный» — В то время, как у соглашений CakePHP есть очевидные преимущества, все же находятся разработчики, критикующие CakePHP за это. Чаще всего критики жалуются на то, что соглашения данного фреймворка слишком строгие, но они даже не осознают (или не знают), что данные соглашения могут быть легко переопределены. Устанавливая стандартный набор соглашений, CakePHP стремится сделать процесс разработки единообразным, что, учитывая свободные практики написания кода на PHP, должно рассматриваться только с положительной точки зрения.

«Медленный цикл релизов» — Медленный цикл релизов необязательно должен быть чем-то плохим. Наоборот, слишком быстрый цикл релизов может вызвать еще больше проблем. По сути, одна из причин, почему основные релизы CakePHP занимают много времени, заключается в стремлении обеспечить обратную совместимость с ранними версиями PHP, которые до сих пор широко используются. Более того, данный подход избавляет от необходимости вносить серьезные (и частые) изменения в ваш код, когда выходит очередная новая версия. Также следует отметить, что когда дело касается второстепенных релизов (исправления багов, патчей, незначительных улучшений), которые выходят ежемесячно, то команда разработчиков CakePHP 3 работает как угодно, но только не медленно. Кроме того, ответы на сообщения о багах поступают в течение нескольких часов с момента отправки.

«Решение не из коробки» — В противоположность многим другим современным PHP фреймворкам (таким как Yii, например), позволяющим создавать «веб-приложения прямо из коробки», CakePHP специально одобряет и стремится поддерживать кастомные решения. В этом плане я сам был неоднократно вознагражден за использование данного фреймворка при разработке некоторых крупных и нестандартных веб-сайтов и приложений, опирающихся на использование баз данных.

«Использует массивы данных вместо объектов.» — Это уже не является правдой, начиная с версии 3. В предыдущих версиях любые данные должны были храниться во вложенных массивах (например, $user[‘User’][‘username’]). В CakePHP 3 наконец-то исправлен данный момент, и теперь данные хранятся в виде объектов (например, $user->username).

«Слабая документация» — У данного мнения есть доля правды, т.к. документация CakePHP, кажется, не всегда писалась с расчетом на новичков (важная информация иногда описывается всего в одном или двух предложениях, хотя, по идее, требовалось бы несколько абзацев). Команда разработчиков фреймворка знает об этом и, соответственно, работает над улучшением документации. По сути, домашняя страница документации CakePHP 3 открыто показывает высокий уровень приверженности «качеству, валидности и точности» документации. Поскольку CakePHP является фреймворком, который опирается, поддерживается и развивается сообществом, то на каждой странице документации имеется кнопка “Improve this Doc” («Улучшить документацию»), что позволяет и поощряет пользователей CakePHP внести свой вклад в совершенствование (добавление, удаление и исправление отдельных частей) документации.

Заключение

В целом, почти спустя 10 лет с момента релиза первой версии фреймворка, обзор CakePHP показывает, что данный фреймворк по-прежнему живой, развивающийся и конкурентоспособный фреймворк по сравнению с другими появившимися фреймворками.

CakePHP — это целостное и самодостаточное решение для веб-разработки. База исходного кода является завершенной, а функциональные возможности кажутся безграничными. В общем, CakePHP был создан, чтобы сделать процесс веб-разработки быстрым, что является важным не только для самих разработчиков, но и для заказчиков. Самая большая цена, которую приходится платить в веб-разработке, — это время разработки. И в этом плане CakePHP направлен на то, чтобы существенно сократить это время.

CakePHP поддерживается и развивается сообществом. По мере того, как число его сторонников будет расти, он сможет становится только еще лучше. Вступив в сообщество 7 лет назад и видя, как оно продолжает расти, я просто в предвкушении того, что можно ждать от следующей версии CakePHP. Выход CakePHP 3, а также зрелость PHP и CakePHP, означает, что фреймворк будет становится все лучше и лучше.

Если вы ищете решение для веб-разработки на PHP, предоставляющее много преимуществ, наподобие Ruby on Rails (в плане легкости использования и следования принципу «соглашение важнее конфигурации»), тогда вам точно следует выбрать CakePHP. Обучающее руководство по созданию блога на CakePHP займет у вас всего несколько минут по настройке и запуску, или, в качестве альтернативы, на сайте CakeCoded представлена серия обучающих уроков, которые помогут PHP-разработчику познакомиться с CakePHP и начать его использовать. Благодаря данным ресурсам вы быстро поймете, насколько CakePHP может ускорить и улучшить ваш процесс веб-разработки на PHP. Наслаждайтесь!

Автор: Michael Houghton

Редакция: Команда webformyself.

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого роста с нуля в сайтостроении

CakePHP с нуля: используем генератор Bake

Автор:Коллектив
Название: Кулинария PHP. 109 уроков. Интерактивный курс
Издательство: Россия
Год: 2014
Формат: exe
Размер: 441 МВ
Страниц: 1000
Язык: Русский

Обучающая программа «Кулинария РНР» представляет собой сборник из 109 уроков по РНР. Уроки снабжены, где необходимо, исходниками. Также программа содержит справочник РНР функций в СНМ формате.
Список уроков:

Видеокурс «Фреймворк CakePHP: с Нуля до Гуру на примере создания корпоративного сайта». (Андрей Кудлай — Webformyself)

Автор(ы): Андрей Кудлай

Первый и единственный в Рунете исчерпывающий видеокурс на тему работы с фреймворком CakePHP… Уже в ближайшие 2 месяца вы из полного новичка веб-программирования превратитесь в профессионала, которому по зубам будут даже очень сложные и дорогие веб-проекты… Если вы будете посвящать всего лишь 2-3 часа в день изучению материалов курса, то уже менее чем через 60 дней вы уверенно сможете создавать сайты любой сложности, используя фреймворк CakePHP. Вы создадите свою первую страничку вашего будущего сайта уже во время прохождения первых занятий курса. Если у вас не получится либо вы решите, что этот курс вам не подходит, то я верну вам все потраченные деньги обратно!

Смотреть видео:

Фреймворк CakePHP: с Нуля до Гуру на примере создания корпоративного сайта. (Андрей Кудлай — Webformyself)

  • Часть 1. Фреймворк CakePHP. Изучаем теорию и возможности фреймворка

Первая часть курса будет посвящена изучению возможностей, которые предлагает нам фреймворк CakePHP. Здесь мы лишь прикоснемся к его огромным возможностям и попробуем применить их на практике при создании простейшего блога. В процессе изучения теории, мы будем также учиться работать с документацией. Как уже отмечалось, актуальной русскоязычной документации – просто нет. Однако официальная документация на английском языке довольно хороша, и уметь ею пользоваться – это практически обязательное требование при работе с фреймворком CakePHP. После изучения данной части Вы научитесь пользоваться документацией на официальном сайте фреймворка CakePHP, изучите базовые возможности фреймворка, а также создадите простейшее приложение – блог.

ВИДЕОУРОКИ ПЕРВОЙ ЧАСТИ КУРСА:

В первом уроке курса мы пройдемся по организационным моментам, рассмотрим структуру курса, узнаем основные источники документации, с которой будем работать на протяжении всего курса. Также обозначим необходимое программное обеспечение (сервер, редактор, версия фреймворка CakePHP)

Установка фреймворка на сервер и его настройка. Также, для облегчения дальнейшего процесса разработки мы установим плагин DebugKit и познакомимся с ним поближе

  • Урок 3: Установка консоли CakePHP

CakePHP, как и многие фреймворки, имеет генератор кода. Код генерируется с помощью специальной консольной утилиты CakePHP’s Bake console. Если нам нужно построить несложное работающее приложение с системой управления, не заморачиваясь с написанием кода, тогда консоль Кейка – то, что нужно. В этом уроке мы установим консоль кейка и рассмотрим нюансы ее установки

  • Урок 4: URL-адреса фреймворка CakePHP

Более плотно приступим к изучению фреймворка CakePHP и познакомимся со структурой URL-адресов Кейка. CakePHP уже по умолчанию работает с чистыми или, так называемыми ЧПУ-адресами (ЧПУ – Человеку Понятный УРЛ). При этом каждая часть (сегмент) этого адреса является значимой. Также CakePHP позволяет изменять имеющиеся по умолчанию адреса на любые другие, нужные нам, предоставляя для этих целей гибкие возможности раутинга (маршрутизации)

  • Урок 5: Соглашения об именованиях. Контроллеры

В этом уроке мы с Вами познакомимся с соглашениями или конвенциями об именованиях. Данные соглашения дают рекомендации по тому, как называть файлы, классы, методы и таблицы базы данных в разрабатываемом проекте. Следуя конвенциям, мы значительно облегчаем процесс разработки сайта и знакомимся с таким понятием, как магия Кейка (automagic). Также в этом уроке мы создадим свой первый контроллер

Контроллеры в паттерне MVC постоянно взаимодействуют с видами. Для того, чтобы наш вид получился динамическим, необходимо передавать в вид те или иные данные, которые часто получаем из базы данных. В этом уроке мы с Вами изучим метод set(), позволяющий передавать данные из контроллера в вид

  • Урок 7: Метод модели find(). Часть 1

Основа любого динамичного сайта заключается в хранении информации в базе данных и получении информации оттуда. За работу с базой данных в Кейке отвечает модель, методы которой можно использовать в контроллере. Один из таких методов – метод find(). Используя этот метод, мы можем получить информацию из базы данных. Ну а комбинируя параметры метода find(), мы можем гибко управлять получением данных

  • Урок 8: Метод модели find(). Часть 2

В этом уроке мы продолжим работу с параметрами метода find(). Вы увидите, как легко данный метод позволяет не только получить данные определенного поля или всей таблицы, но возвращает их в уже удобном для нас готовом массиве. Например, используя один только метод find(), всего одной строкой кода мы можем получить уже готовый к использованию массив, представляющий из себя дерево

  • Урок 9: Магические типы метода find()

Текущий урок мы также продолжим изучением метода find(). В данном уроке мы познакомимся с так называемыми магическими типами (Mafic Find Types). Используя этот метод и зная название поля (или полей), из которого необходимо получить данные, мы можем легко это сделать, не используя никаких дополнительных параметров. При этом здесь возникает столь много вариантов получения данных, что мы буквально можем экспериментировать с ними

  • Урок 10: Выводим данные в шаблон

Итак, мы научились получать и передавать данные в шаблон. Теперь пришла очередь познакомиться детальнее с еще одной составной частью паттерна MVC – видами. В этом уроке мы создадим файлы видов и выведем на экран полученные в них данные

  • Урок 11: Вывод отдельной статьи

В ходе изучения теории мы, конечно же, не обойдемся без практики. Взяв за основу пример из документации, давайте по мере изучения теоретической части фреймворка создадим простейший блог. В этом уроке мы, используя уже имеющиеся в нашем распоряжении знания, выведем на страницу отдельную статью из базы данных

В этом уроке мы познакомимся с еще одним методом модели – методом exists(). Этот метод очень полезен, когда нам необходимо просто проверить существование в базе данных той или иной записи


Фреймворк CakePHP предоставляет разработчикам 2 незаменимые вещи, ускоряющие процесс разработки – Хелперы (Heplers) и Компоненты (Components). Используя Хелперы и Компоненты, мы можем удобнее работать с сессиями, формами, легко и быстро создать постраничную навигацию для статей и прочая, и прочая. Кейк предлагает как уже готовые Компоненты и Хелперы, которыми мы можем пользоваться, так и возможность создавать собственные Компоненты и Хелперы

  • Урок 14: Хелпер для работы с формами

Одним из ключевых и часто используемых хелперов, является хелпер по работе с формами (Form Helper). Изучив работу с этим помощником, мы без труда создадим форму, которую можно использовать для сохранения информации в базу данных или отправки формы на Email. При этом помощник Form Helper позволяет не только создавать формы, но и автоматически заполняет их данными и буквально догадывается о том, какой тип поля формы необходимо сгенерировать

  • Урок 15: Добавляем данные в БД

Познакомившись с хелпером для работы с формами, мы с Вами теперь без проблем можем генерировать нужные нам HTML-формы. В этом уроке мы изучим сразу несколько методов, позволяющих сохранять информацию из форм в базу данных. Ключевыми здесь являются методы create() и save(). Последний метод напрямую предназначен для сохранения данных. При этом нам не нужно заботиться о получении данных из каждого конкретного поля. Достаточно вызвать метод, передать ему объект данных, и метод save() сделает все остальное

  • Урок 16: Валидация данных в CakePHP

Одной из ключевых задач и возможностей модели является валидация данных. Кейк предлагает разработчикам богатейшие возможности валидации, используя которые мы можем проверять практически все, что угодно: начиная от простейшего правила, когда строка должна состоять только из цифр и заканчивая сложными правилами загрузки файлов. Также CakePHP позволяет создавать собственные правила валидации

В этом уроке мы изучим работу с методом delete(). Как следует из названия, данный метод предназначен для удаления записей из базы данных. Также, используя этот метод, мы можем организовать каскадное удаление зависимых данных

В этом уроке мы изучим работу с Элементами (elements). Элементы используются в видах для того, чтобы в них можно было вынести повторяющиеся участки кода и затем многократно использовать в других видах. Например, мы вполне можем вынести в Элемент код меню или сайдбар

В этом уроке мы создадим еще одну функцию для управления нашим блогом – это будет функция редактирования данных. Для данного функционала мы воспользуемся уже знакомым нам методом save(), позволяющим сохранять данные в БД

  • Урок 20: Ассоциации и связи моделей

Одна из наиболее приятных и мощных возможностей CakePHP – ассоциации моделей. Эта возможность является одной из составляющих магии Кейка. Используя ассоциации, мы можем организовать всего одной строкой кода связи между различными таблицами базы данных. Благодаря установленным связям, нам не нужно писать запросы для получения дополнительных данных, эти данные Кейк любезно предоставит нам автоматически, используя ту самую автомагию (automagic)

  • Урок 21: Работаем с категориями

В этом уроке мы продолжим написание нашего приложения – блога. В уроке мы поработаем с категориями постов и закрепим на практике получение данных из БД и оперирование этими данными

  • Урок 22: Зависимость моделей на практике

В этом уроке мы вернемся к понятию ассоциаций и связей модели и посмотрим практические примеры работы с ассоциациями, а также увидим значительную практическую пользу использования свойств модели, отвечающих за установку связей между таблицами

Фреймворк CakePHP предоставляет специальный метод, позволяющий гибко работать с видами – это метод render(). Данный метод неявно вызывается в конце каждого экшена контроллера, подгружая вид по умолчанию. Но Кейк позволяет вызывать данный метод в любом месте кода контроллера, тем самым указывая, какой вид необходимо загрузить

  • Урок 24: Работа с темами в CakePHP

CakePHP позволяет не только гибко управлять шаблонами (Layout) и видами (View), но и предоставляет возможности для темизации сайта. Используя эти возможности, мы можем создать для одного и того же сайта несколько тем с абсолютно различным оформлением и использовать по желанию ту или иную тему. Это действительно мощная возможность Кейка

  • Урок 25: Приготовление кода в консоли (Cake Bake)

В данном уроке мы вернемся к вопросу работы с консольной утилитой Кейка, позволяющей «испекать код» (Cake Bake). В качестве примера мы приготовим с нуля коды Контроллера, Модели и Вида нашего простого сайта. При этом на приготовление кода мы потратим считанные минуты, ни единой строчки кода мы не будем писать самостоятельно, и весь сгенерированный код будет абсолютно рабочим

  • Урок 26: Регистрация и авторизация. Часть 1

В последних трех уроках первой части курса мы поработаем с компонентом Auth. Данный компонент позволяет не только ограничить доступ к определенным частям сайта или ко всему сайту целиком, но и организовать систему регистрации и авторизации, организовать работу с ролями

  • Урок 27: Регистрация и авторизация. Часть 2

В этом уроке мы продолжим работу с компонентом фреймворка CakePHP – Auth, позволяющим организовать работу с учетными записями пользователей

  • Урок 28: Регистрация и авторизация. Часть 3

В этом уроке мы завершим работу с компонентом фреймворка CakePHP – Auth, позволяющим организовать работу с учетными записями пользователей

  • Часть 2. Разработка сайта с использованием фреймворка CakePHP

Как уже отмечалось выше, большинство курсов по изучению фреймворка CakePHP ограничиваются созданием простейшего блога из примеров документации. Мы пойдем дальше и во второй, практической части нашего курса, будем создавать сайт, который Вы можете видеть на скриншотах ниже.

Основа данного сайта – каталог товаров. Функционал, который будет нами реализован в курсе:

  • категории
  • товары
  • карточка товара
  • страницы
  • авторизация
  • многоуровневое меню категорий с поддержкой неограниченного уровня вложенности
  • и, конечно же, управление всем этим, т.е. администраторская часть сайта.

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

ВИДЕОУРОКИ ВТОРОЙ ЧАСТИ КУРСА:

Итак, у нас есть верстка шаблона (html-страничка), который я нашел на одном из сайтов, предлагающем бесплатные шаблоны. Задачей первого урока будет перенос данного шаблона в структуру фреймворка CakePHP. Мы должны перенести код самой html-странички, а также скрипты, стили, картинки и шрифты. В итоге, при обращении к главной странице нашего сайта мы должны увидеть картинку, которая ничем не должна отличаться от исходного шаблона HTML

  • Урок 2: Создаем первый контроллер сайта

Во втором уроке мы начнем превращать пока что статичный шаблон в динамичную страницу нашего сайта. Здесь мы создадим свой первый контроллер, который будет работать с главной страницей сайта и заниматься выводом новинок товаров на главную страницу сайта

  • Урок 3: Формируем многоуровневое меню. Часть 1

Изюминкой выбранного нами шаблона и, пожалуй, наиболее сложной в реализации его частью является меню категорий. Это красивое выпадающее меню, которое можно сейчас встретить на многих интернет-магазинах, предлагающих различные категории товаров. Основная сложность реализации нашего меню заключается в его многоуровневости, т.е. пользователь может создавать сколь угодно много вложенных друг в друга категорий и все эти категории должны появиться на сайте с соблюдением уровней вложенности и соответствующим визуальным оформлением вложенности. Благо, Кейк предлагает нам несколько возможностей по реализации и работе с деревьями

  • Урок 4: Формируем многоуровневое меню. Часть 2

В этом уроке мы продолжим реализовывать многоуровневое меню категорий для нашего сайта

  • Урок 5: Создаем компонент меню

Итак, мы создали многоуровневое меню, и оно замечательно работает. Однако, пока что это меню работает только на главной странице. Нам же необходимо, чтобы меню было доступно на всех страницах сайта. Чтобы избежать дублирования кода, мы создадим собственный компонент – компонент Меню – который будем использовать на всех страницах сайта

В этом уроке мы займемся реализацией блока Новые товары на главной странице. К слову, навигация по данному блоку реализована в шаблоне с довольно привлекательным эффектом. Итак, мы выведем все имеющиеся на сайте новинки товаров и реализуем навигацию по блоку новинок

В данном уроке мы будем работать с шаблоном категорий. Этот шаблон отличается от главной страницы сайта, здесь уже есть колонка сайдбара, выводятся товары каталога или выбранной категории, присутствует постраничная навигация (пагинация) по товарам


  • Урок 8: Выводим товары категорий

Этот урок мы посвятим работе с логикой по выборке и выводу на страницу товаров категорий. Мы предусмотрим вывод всех товаров или вывод товаров только выбранной категории. Также мы должны предусмотреть обращение к родительской категории и, соответственно, реализовать выборку товаров, как из запрошенной категории, так и из всех дочерних категорий

Данный урок будет посвящен работе с постраничной навигацией (пагинацией). В теоретической части мы не затрагивали этот момент, здесь же мы детально его изучим. Для работы с пагинацией CakePHP предлагает специальный Компонент и Хелпер, которые, работая в паре, сделают реализацию пагинации предельно простой задачей

  • Урок 10: Меню категорий в сайдбаре

Согласно нашему шаблону, в сайдбаре должно находиться меню категорий. При этом там должны быть представлены не все категории, а лишь та, к которой обратился пользователь. Также, если у запрошенной категории имеются дочерние категории, тогда они также должны быть представлены в меню сайдбара

Поскольку основа создаваемого нами сайта – это каталог товаров, соответственно, нам необходима карточка товара, в которой мы отобразим детальную информацию по выбранному товару. В этом уроке мы займемся реализацией карточки товара, создав необходимые контроллер, модель и вид

Поиск – это практически неотъемлемый элемент любого сайта. Ну а если говорить о каталоге товаров, то поиск – обязательный элемент, поскольку найти нужный товар среди всего многообразия товаров на сайте, порой, возможно только через поиск. В данном уроке мы реализуем поиск по товарам для нашего сайта

Наш шаблон предполагает не только меню категорий, но и меню страниц, которое так же, как и меню категорий, должно присутствовать на всех страницах нашего сайта. В этом уроке мы создадим меню страниц, и при его создании мы будем использовать уже созданный нами ранее компонент Меню

В этом уроке мы с Вами поработаем с еще одним компонентом Кейка – CakeEmail. Данный компонент представляет собой класс, позволяющий работать с отправкой писем на email. На нашем сайте есть страница контактов, которая может предполагать наличие контактной формы. Давайте создадим такую форму и реализуем логику отправки данных из нее на email

  • Урок 15: Архитектура админской части

Начиная с текущего урока, мы приступаем к разработке админской части нашего сайта. В этом уроке мы продумаем архитектуру админской части, более плотно поработаем с маршрутизацией (раутингом) и узнаем, как можно работать с префиксами в URL-адресах

  • Урок 16: Ограничиваем доступ к админке

Данный урок будет посвящен ограничению доступа к админской части сайта. Мы воспользуемся уже знакомым нам компонентом Auth, создадим форму авторизации и ограничим доступ к админским экшенам

Итак, мы добрались до управления товарами. В этом уроке мы реализуем редактирование товара. Администратор сможет изменять название, описание товара, его цену и прочие данные, а также перемещать его в нужную категорию

  • Урок 18: Дерево категорий товара

В этом уроке мы реализуем дерево категорий товара для админки. За основу возьмем аналогичное дерево из пользовательской части и внесем в него некоторые правки, чтобы данный компонент одинаково хорошо работал как в пользовательской части, так и в админке

  • Урок 19: Устанавливаем визуальный редактор

Обязательным компонентом админской части является визуальный редактор, поскольку администрировать сайт может пользователь, который впервые слышит слово HTML. Соответственно, мы должны сделать удобным процесс редактирования даже для таких пользователей. В этом уроке мы установим и настроим визуальный редактор CKEditor, а также интегрируем файловый менеджер KCFinder. В процессе мы узнаем нюансы установки и настройки подобных вещей в CakePHP

В этом уроке мы реализуем функционал добавления товара. Здесь все будет предельно просто, поскольку данный функционал очень напоминает реализованный ранее функционал редактирования товара

Последним действием по управлению товаром будет его удаление, которое мы и реализуем в текущем уроке

Основываясь на реализованном ранее функционале управления товарами, мы можем легко реализовать управлением страницами. Здесь мы наглядно увидим, как фреймворк облегчает нам жизнь при написании кода. Фактически весь необходимый функционал – добавление, редактирование и удаление страниц – мы реализуем за один текущий урок

  • Урок 23: Управление метаданными

В этом уроке будет показано, как организовать управление метаданными страниц Вашего сайта. Мы выведем название страницы (title), ее ключевые слова (keywords) и описание (description)

  • Урок 24: Управление категориями

Данный урок будет посвящен реализации функционала по управлению категориями. Здесь мы должны учесть ряд нюансов при удалении категории: запретить удаление категорий, в которых есть дочерние категории или товары. Предусмотрев эти нюансы, мы сохраним целостность базы данных

  • Урок 25: Загрузка картинок. Часть 1

Последние два урока мы посвятим работе с загрузкой картинки товара и ее ресайза. В этих уроках мы львиную долю работы будем проводить в модели, используя правила валидации при загрузке файлов, которые предлагаются фреймворком. Также мы создадим собственное правило валидации и опишем методы, работающие с данным правилом. В итоге будет реализован функционал по загрузке картинок и их ресайзу

  • Урок 26: Загрузка картинок. Часть 2

В данном уроке мы продолжим реализацию функционала по загрузке и ресайзу изображений для товаров

Какова производительность CakePHP?

Как уже писал комрад opium, xprof — отличная тулза для профилирования РНР приложений.
Если вас интересует субъективное мнение и особенности архитектуры…
В принципе самым слабым местом существующих РНР фреймворков является реализация ORM, кэширования и шаблонизации.
По личному субъективному опыту могу сказать что Yii и Symfony2 имеют самые эффективные реализации этого стафа.
Но у Symfony2 намного более развита инфраструктура, комьюнити… и в целом он для меня намного удобней.
По поводу того что Symfony медленее Yii могу лишь сказать что только в dev mode, в продакшене разницы особо не чувствуется. CakePHP по производительности почти догоняет kohana. В большинстве случаев на производительность самого фреймворка влияет использование Dependency Injection и других паттернов, а также немного паттерн самого ORMа — Active Record или Object Mapping.

APC не тортъ. Лучше если вы возьмете xcache и будете кэшировать в нем байткод приложения и запросы к базе.
memcached не тортъ для кэширования запросов БД если у вас только одна машина. Т.е. memcached хорошо использовать в кластере. В остальных случаях xcache быстрее так как он реализован в виде плагина к РНР.

Не раз был свидетелем мем. лика memcached… не забывайте задавать ttl объектов в кэше! Это довольно распространенная ошибка. Реализовуйте поддержку etags и if-modified-since хеддеров для http кэширования каждой страницы по mark-tagged принципу. И тогда за nginx’ом вам вообще не придется беспокоится о производительности фреймворков…
Некоторые Yii извращенцы на офф. форуме фреймворка писали что если использовать с xcache параллельно eaccelerator, то можно добиться довольно впечатляющих результатов. Не знаю правда ли это… но советую вам проверить.

Создание настраиваемых файлов с использованием команды bake в cakephp

Я новичок в cakephp и настолько впечатлен его быстрым развитием. Я очень хочу знать, что я создал свой собственный html для (index.ctp, edit.ctp, add.ctp и delete.ctp), и я хочу, чтобы команда «bake» использовала этот html, когда мы запускаем эту команду в командной строке для генерируя все файлы. Таким образом, это экономит время для индивидуального просмотра, и когда мы запускаем каждую команду «bake», она генерирует файлы в нашем желаемом формате.

Читать статью Ссылки, связанные с CAKEPHP: BAKING

Если вы хотите создать выпечку торта, используйте эти шаги

bake generator

bake generator

Do you know if the bake generator is able to deduce table relationship
when it generate the model ?
If it is possible, I suppose it need a DB strict name convention . any
info, doc, tuto, examples,

Also, how to customize baked view, model, controller ? Any tips,
example, recommendation ?
Where could I find documented all the «special variable» available ?
(I’m guessing I’ll need an array of the field in a view for example)

You received this message because you are subscribed to the Google Groups «Cake PHP» group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

Sorry for reposting but I really would like to custimize bake
generation, if it is possible.
Are there templates ? Same as scaffolding ?

Also, I need more info on table relationship taken into account in the
generated model.

Any clue appreciated, including pointer to the cake code

You received this message because you are subscribed to the Google Groups «Cake PHP» group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

Re: bake

The code to deduce table relationship is in ModelTask::doAssociations()
defined in /cake/console/libs/tasks/model.php
You also have to check Inflector class defined in
/cake/libs/inflector.php. This define naming conventions.

I think this mechanism is based on the cakePHP naming convention and
there is no template for this purpose. So you need modify the source
code in order to customize bake behaviors.

You received this message because you are subscribed to the Google Groups «Cake PHP» group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

Re: bake

Thanks, I’ll have a look.

Why not reusing scaffold templates ?
Bake could be seen as a static scaffold, isn’t it ?
So saving the result of a scaffold template could be the bake result.
Doing so will :
* merge that part
* make bake as flexible as scaffold

I’m not sure . I’ll read that code, try to understand and I’ll see .

Bake every table in CakePHP?

The database I’m working on has more than 100 tables, so I’m not going to sit here baking a model and controller for each one individually. I would like to bake all of the tables at the same time with something like the .xml files in Hibernate that tells it the limitations on fields so that I don’t have to go through every column on every table, and automatically select the relationships. Is this possible?

2 Answers 2

To bake all of you models, use cake bake model all .

Controllers would be cake bake controller all

In your app folder if you haven’t yet set the path to cake.

Цукерберг рекомендует:  Первые шаги Bootstrap
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих
Поставьте оценку