Index
Summary
CakePHP3 で、Bake を拡張するプラグインを作成したので、手順を残しておきます。
前提条件
プロジェクトフォルダは、$ROOT$
と表記します。
プロジェクトを作成する
まずは、composer でプロジェクトを作成します。
> composer create-project --prefer-dist cakephp/app myapp
プラグインを作成します。
$ROOT$> bin\cake bake plugin MyPlugin
GitHub に公開する場合は、GitHub のユーザ名をベンダー名とするので、わたしなら Tiichat/
をつけて、プラグインを作成します。
$ROOT$> bin\cake bake plugin Tiichat/MyPlugin
オートローダーを再作成します。
$ROOT$> composer dumpautoload
これで、下準備は完了です。
要らないものは消してしまう
どんなプラグインを作るかにも依りますが、要らないものは消してしまいましょう。ここでは、Bake を拡張するプラグインを作成するので、Shell\Task
と Template\Bake
を作成し、後は消してしまいます。
こんな感じになります。
plugins
Tiichat
MyPlugin
src
Shell
Task
Template
Bake
tests
TestCase
Shell
Task
上記フォルダを作成するだけなら、手作業で作成した方が早い感じですが、 bin/cake bake plugin
コマンドは、conposer.json や bootstrap.php の設定も変更してくれるので、基本は bake した方が間違いがないです。
ただし、今回は Bake を拡張するプラグインを作成するので、bootstrap.php を少し修正しておきます。
config\bootstrap.php
Plugin::load('Tiichat/Migrations', ['bootstrap' => false, 'routes' => false]);
上記は、bin/cake bake plugin コマンドが自動的に追加してくれるのですが、初期設定では 'routes' => true
となっています。Bakeプラグインにルーティングは必要ないので、false としておきます。
Bake コマンドオプションを追加する
あとは、Cookbook にもある様に、こんな感じでクラスを作成します。
…\src\Shell\Task\FooTask.php
<?php
namespace Tiichat\MyPlugin\Shell\Task;
use Bake\Shell\Task\SimpleBakeTask;
class FooTask extends SimpleBakeTask
{
public $pathFragment = 'Foo/';
public function name()
{
return 'foo';
}
public function fileName($name)
{
return $name . 'Foo.php';
}
public function template()
{
return 'Tiichat/MyPlugin.foo';
}
}
名前空間を、Tiichat\MyPlugin
とします。名前空間とパッケージ階層(plugins
配下のフォルダ階層)は一致していないといけません。
テンプレートは Tiichat/MyPlugin.
を付けて、プラグイン記法で記述します。こうしておくことで、 plugins\Tiichat\MyPlugin\src\Template 配下のテンプレートファイルを読み込んでくれる様になります。
ただし、Bake を拡張する場合は、Bake\Shell\Task\BakeTask
で、テンプレートの配置を Template\Bake と指定しているので、そこにテンプレートを置くようにします。
では、bin\cake bake
で、コマンドオプションをリストアップしてみましょう。
$ROOT$> bin\cake bake
Welcome to CakePHP v3.4.6 Console
---------------------------------------------------------------
App : src
Path: ...\MyPlugin\src\
PHP : 7.1.1
---------------------------------------------------------------
The following commands can be used to generate skeleton code for your application.
Available bake commands:
...
- foo
- foo
が追加されていますね。
Migration を拡張するプラグインを作ってみる
CakePHP3の開発手順 でも述べましたが、Migration では View や Stored Procedure が手軽に扱えないので、プラグインで Bake を拡張してみました。
https://github.com/tiichat/Migrations に、ソースコードを公開しているので、ご参考までにどうぞ。。
Migration 拡張プラグインの紹介
公開したプラグインについて、簡単に紹介しておきます。
プラグインのインストール方法については、README.md に記載しています。
まず、マイグレーションファイルの作成ですが、通常の migration と同じ様に、tii_migration
コマンドを叩きます。ビューの場合は、ViewBars
の様に “View” を頭につける必要があります。ViewBars
の場合、view_bars
という名前でビューを作成します。ビューも複数形にしておかないと、bake で model など作成する際に、規約違反となってしまうので注意が必要です。
$ROOT$> bin\cake bake tii_migration ViewBars
これで、View のマイグレーションファイルと、DDL ファイルが生成されます。
\config\Migrations
20170519014643_ViewBars.php
\config\Migrations\ddl
view_bars_1.ddl
初回の DDL ファイル view_bars_1.ddl
の中身は空なので、
作りたいビューの DDL を記述します。ただし、create view view_bars as
までは、マイグレーションファイルの方に記述しているので(Drop との整合性を考えてそうしてみました・・)、DDL には、select ...
から記述します。
作成したビューに変更が入るときは、再度 bake します。
$ROOT$> bin\cake bake tii_migration ViewBars
すると、
\config\Migrations
20170519014643_ViewBars.php
20170519015211_ViewBars.php
\config\Migrations\ddl
view_bars_1.ddl
view_bars_2.ddl
こんな感じになるので、view_bars_2.ddl
を編集します。
マイグレーションは、普通に実行してあげればOKです。
$ROOT$> bin\cake migrations migrate
Slotty Casino - Mapyro
返信削除Get directions, reviews 이천 출장마사지 and information for Slotty Casino 광명 출장안마 in Rohnert Park, Rohnert Park, Rohnert 당진 출장샵 Park, Rohnert Park, Rohnert Park, 아산 출장안마 Rohnert Park, Rohnert Park. 군산 출장마사지