Скаффолдинг (scaffolding) – это технология, позволяющая разработчикам определять и разрабатывать базовые приложения, способные создавать, получать, изменять и удалять объекты. Кроме того, скаффолдинг в CakePHP позволяет разработчикам определять, как объекты связаны между собой, а также создавать и разрывать такие связи.
Все, что вам необходимо для создания скаффолдинга – это модель и её контроллер. Определив в файле контроллера переменную $scaffold, вы будете готовы к работе.
Скаффолдинг CakePHP очень хорош. Он позволяет в считанные минуты создать базовое CRUD-приложение. Он настолько хорош, что вам захочется использовать его при создании приложений. Сейчас мы тоже думаем, что это классно, но, пожалуйста, поймите, что скаффолдинг – это просто рабочая платформа. Это – шаткая структура, которая поможет на старте проекта действительно быстро с чего-то начать. Скаффолдинг не обладает полной гибкостью, это только временный путь, чтобы подняться и пойти. Если вы находите необходимым изменить логику или отображения, самое время убрать скаффолдинг и начать писать код. Описанная в следующей главе, консоль Bake CakePHP – отличный шаг далее: она сгенерирует весь необходимый код, чтобы получить такой же результат, как и при использовании скаффолдинга.
Скаффолдинг – хороший путь на этапах проектирования веб-приложений. Схема БД на ранних этапах разработки является предметом изменений. У этого есть обратная сторона: веб-разработчик ненавидит создавать формы, реальной пользы которых никогда не увидит. Для уменьшения нагрузки на разработчика, в CakePHP был включен скаффолдинг. Механизм скаффолдинга анализирует ваши таблицы и создает стандартные списки, кнопки «добавить», «удалить» и «изменить», а также стандартные формы для редактирования, и отображение для просмотра отдельных элементов, хранящихся в БД.
Для добавления скаффолдинга, определите в контроллере переменную $scaffold:
<?phpclass 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.
<?phpclass 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