CakePHP: Manual/Developing/Scaffolding

Скаффолдинг

Скаффолдинг (scaffolding) – это технология, позволяющая разработчикам определять и разрабатывать базовые приложения, способные создавать, получать, изменять и удалять объекты. Кроме того, скаффолдинг в CakePHP позволяет разработчикам определять, как объекты связаны между собой, а также создавать и разрывать такие связи.

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

Скаффолдинг CakePHP очень хорош. Он позволяет в считанные минуты создать базовое CRUD-приложение. Он настолько хорош, что вам захочется использовать его при создании приложений. Сейчас мы тоже думаем, что это классно, но, пожалуйста, поймите, что скаффолдинг – это просто рабочая платформа. Это – шаткая структура, которая поможет на старте проекта действительно быстро с чего-то начать. Скаффолдинг не обладает полной гибкостью, это только временный путь, чтобы подняться и пойти. Если вы находите необходимым изменить логику или отображения, самое время убрать скаффолдинг и начать писать код. Описанная в следующей главе, консоль Bake CakePHP – отличный шаг далее: она сгенерирует весь необходимый код, чтобы получить такой же результат, как и при использовании скаффолдинга.

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

Для добавления скаффолдинга, определите в контроллере переменную $scaffold:

<?php

class CategoriesController extends AppController {

    var $scaffold;

}

?>

Если вы уже создали базовый класс модели Category (в файле /app/models/category.php), то все готово. Посетите 'http://example.com/categories', чтобы увидеть ваш новый скаффолд.

Cоздание методов в контроллерах, использующих скаффолдинг, может привести к неожиданным результатам.

Например, если вы создадите метод index() в контроллере, использующем скаффолдинг, то 

будет отрендерн ваш метод index, а не функциональность скаффолдинга.

Скаффолдинг знает об ассоциациях моделей, поэтому если ваша модель Category belongsTo User, то вы увидите связанные ID пользователя в списке категорий. Если вы захотите увидеть что-либо кроме ID (например, имя пользователя), то вы можете определить в модели переменную $displayField.

Давайте определим переменную $displayField в нашем классе User, чтобы связанные с категориями пользователи отображались в скаффолдинге по имени, а не по ID.

<?php

class User extends AppModel {

    var $name 'User';

    var $displayField 'first_name';

}

?>

Изменение отображений скаффолдинга

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

Изменение выполняется путем создания шаблонов.

Измененные отображения скаффолдинга для определенного контроллера 

(в данном примере - PostsController) должны быть размещены так:

/app/views/posts/scaffold.index.ctp

/app/views/posts/scaffold.show.ctp

/app/views/posts/scaffold.edit.ctp

/app/views/posts/scaffold.new.ctp

Измененные отображения скаффолдинга для всех контроллеров

должны быть размещены так:

/app/views/scaffolds/index.ctp

/app/views/scaffolds/show.ctp

/app/views/scaffolds/edit.ctp

/app/views/scaffolds/new.ctp

/app/views/scaffolds/add.ctp

<< Встроенные помощники | Консоль CakePHP >>