ここまでで、CakePHP におけるスキャフォールドを学んできました。スキャフォールドは、データベースといくつかの簡単なクラスを用意するだけで、アプリケーションを起動し実行できる簡単な方法です。CakePHP の Bake コンソールは、 CakePHP をすばやく起動し実行するための、もう1つの方法です。Bake コンソールは、 CakePHP の基本要素である、モデル・ビュー・コントローラを生成できます。Bake は、単なるスケルトンクラスではなく、充分な機能をもったアプリケーションを数分で生成します。実のところ、アプリケーションをスキャフォールドで組んだ後に Bake を使用することは、一般的なステップです。
Bake を使用するには、/cake/console/ フォルダにある cake スクリプトを実行します。
$ cd ./cake/console/
$ cake bake
起動時の設定次第ですが、bash スクリプト「cake」に実行権限を付与したり、./cake bake を使用して呼び出したりしなければならないかもしれません。cake コンソールは、PHP CLI(コマンドラインインターフェイス)を使用して実行します。スクリプトの実行に問題がある場合、PHP CLI がインストールされていて、適切なモジュール(たとえば MySQL)が有効になっているかを確認してください。
はじめて Bake を実行する際に、データベース設定をまだ作成していない場合は、このファイルを作成するプロンプトが表示されます。
データベース設定ファイルを作成した後に Bake を実行すると、次のようなオプションが表示されます:
---------------------------------------------------------------
App : app
Path: /path-to/project/app
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[Q]uit
What would you like to Bake? (D/M/V/C/P/Q)
>
オプションで選択する代わりに、コマンドラインから直接これらのコマンドを選択して実行できます:
$ cake bake db_config
$ cake bake model
$ cake bake view
$ cake bake controller
$ cake bake all
$ cake bake project
$ cake bake test
For 1.3 bake has had a significant overhaul, and a number of features and enhancements have been built in.
Two new tasks (FixtureTask and TestTask) are accessible from the main bake menu
A third task (TemplateTask) has been added for use in your shells.
All the different bake tasks now allow you to use connections other
than default for baking. Using the -connection
parameter.
Plugin support has been greatly improved. You can use either
-plugin PluginName
or Plugin.class
.
Questions have been clarified, and made easier to understand.
Multiple validations on models has been added.
Self Associated models using parent_id
are now detected. For
example if your model is named Thread, a ParentThread and ChildThread
association will be created.
Fixtures and Tests can be baked separately.
Baked Tests include as many fixtures as they know about, including plugin detection (plugin detection does not work on PHP4).
So with the laundry list of features, we'll take some time to look at some of the new commands, new parameters and updated features.
New FixtureTask, TestTask and TemplateTask.
Fixture and test baking were a bit of a pain in the past. You could only generate tests when baking the classes, and fixtures could only be generated when baking models. This made adding tests to your applications later or even regenerating fixtures with new schemas a bit painful. For 1.3 we've separated out Fixture and Test making them separate tasks. This allows you to re-run them and regenerate tests and fixtures at any point in your development process.
In addition to being rebuildable at any time, baked tests are now attempt to find as many fixtures as possible. In the past getting into testing often involved fighting through numerous 'Missing Table' errors. With more advanced fixture detection we hope to make testing easier and more accessible.
Test cases also generate skeleton test methods for every non-inherited public method in your classes. Saving you one extra step.
TemplateTask
is a behind the scenes task, and it handles file
generation from templates. In previous versions of CakePHP baked views
were template based, but all other code was not. With 1.3 almost all the
content in the files generated by bake are controlled by templates and
the TemplateTask
.
The FixtureTask
not only generates fixtures with dummy data, but
using the interactive options or the -records
option you can enable
fixture generation using live data.
New bake command
New commands have been added to make baking easier and faster.
Controller, Model, View baking all feature an all
subcommand, that
builds everything at once and makes speedy rebuilds easy.
cake bake model all
Would bake all the models for an application in one shot. Similarly
cake bake controller all
would bake all controllers and
cake bake view all
would generate all view files. Parameters on the
ControllerTask
have changed as well.
cake bake controller scaffold
is now
cake bake controller public
. ViewTask
has had an -admin
flag
added, using -admin
will allow you to bake views for actions that
begin with Routing.admin
As mentioned before cake bake fixture
and cake bake test
are
new, and have several subcommands each. cake bake fixture all
will
regenerate all the basic fixtures for your application. The -count
parameter allows you to set the number of fake records that are created.
By running fixture task interactively you can generate fixtures using
the data in your live tables. You can use
cake bake test <type> <class>
to create test cases for already
created objects in your app. Type should be one of the standard CakePHP
types ('component', 'controller', 'model', 'helper', 'behavior') but
doesn't have to be. Class should be an existing object of the chosen
type.
Templates Galore
New in bake for 1.3 is the addition of more templates. In 1.2 baked
views used templates that could be changed to modify the view files bake
generated. In 1.3 templates are used to generate all output from bake.
There are separate templates for controllers, controller action sets,
fixtures, models, test cases, and the view files from 1.2. As well as
more templates, you can also have multiple template sets or, bake
themes. Bake themes can be provided in your app, or as part of plugins.
An example plugin path for bake theme would be
app/plugins/bake_theme/vendors/shells/templates/dark_red/
. An app
bake theme called blue_bunny
would be placed in
app/vendors/shells/templates/blue_bunny
. You can look at
cake/console/templates/default/
to see what directories and files
are required of a bake theme. However, like view files, if your bake
theme doesn't implement a template, other installed themes will be
checked until the correct template is found.
Additional plugin support.
New in 1.3 are additional ways to specify plugin names when using bake.
In addition to cake bake plugin Todo controller Posts
, there are two
new forms. cake bake controller Todo.Posts
and
cake bake controller Posts -plugin Todo
. The plugin parameter can be
while using interactive bake as well.
cake bake controller -plugin Todo
, for example will allow you to use
interactive bake to add controllers to your Todo plugin. Additional /
multiple plugin paths are supported as well. In the past bake required
your plugin to be in app/plugins. In 1.3 bake will find which of the
pluginPaths the named plugin is located on, and add the files there.