公式のブログチュートリアルを参考にブログ作ってみるその3。今回は一番やりたかったツリーカテゴリーのとこになるので省略せずに頑張る。(探せなかったけど前回みたいにbakeでちょちょいみたいに楽できるページがあるのだろうか。)
ツリーカテゴリーの作成
もし articles テーブルが既にデータベースに存在する場合、削除してください。
とのことだったので、テーブルをさくっと削除。
composer.jsonにマイグレーションプラグインを追加
コマンドプロンプトはあらかじめcdでblogにしておく。
頭がC:\xampp\htdocs\blog> って感じ。私Cドライブじゃないからそこだけ間違えないメモ。
blog/composer.jsonにMigrationsがあるかをチェックする。
なかったら追加する。
composer require cakephp\migrations
bootstrap.phpファイルにPlugin::load('Migrations'); を追加
bin\cake plugin load Migrations
とすると、config/bootstrap.phpファイル内に
Plugin::load('Migrations');
がファイル下部に追加される。
(※画像は手動でいれたやつ^^;)
マイグレーションファイルを作成
bin\cake bake migration CreateArticles title:string body:text category_id:integer created modified
できてる。
categories テーブル
bin\cake bake migration CreateCategories parent_id:integer lft:integer[10] rght:integer[10] name:string[100] description:string created modified
blog/config/Migrationsフォルダ内にファイルができてる。
CreateCategories.phpのparent_id フィールドを 'null' => false を 'null' => true に変更しておく。
テーブルを作る
下記のコードでテーブルを作ることができるらしい。
bin\cake migrations migrate
おお、できてる!
Articles と Categories テーブルとを結びつける
src/Model/Table/ArticlesTable.phpに下記追加。
$this->belongsTo('Categories', [ 'foreignKey' => 'category_id', ]);
bakeを利用してCategoriesのファイルを作成する
bin\cake bake all Categories
ファイルの修正
src/Template/Categories/ add.ctp
src/Template/Categories/ edit.ctpを修正する。
echo $this->Form->control('parent_id', [ 'options' => $parentCategories, 'empty' => 'No parent category' ]);
TreeBehavior を Categories テーブルに追加
コメントの中のbake は lft 列と rght 列が存在するあらゆるテーブルにこのビヘイビアーを追加します。は大事なトコなので覚えるメモ。
TreeBehavior を Categories テーブルに追加にある修正箇所は今回のバージョンでは治っていますね。作業の必要なさそう。
ここからはソースの修正になるので、参考ページのソースをガシガシいれていく。
TreeBehavior でカテゴリーを並べ替える
blog/src/Controller CategoriesController.php
参考ページをもとに、index メソッドの箇所の修正、とmoveUp() および moveDown() メソッドを追加する。
blog/src/Template/Categories index.ctp も修正する。
Articles コントローラーを編集する
blog/src/Controller ArticlesController.php
参考ページをもとに、カテゴリーの一覧を追加するコードを記述する。
add()、edit()メソッドを修正
Articles テンプレートを編集する
blog/src/Template/Articles add.php edit.php
カテゴリーのコントロールを追加する。
修正後の各種画面
カテゴリー
http://localhost/blog/categories
http://localhost/blog/categories/add
親をつくってみた。
更に子カテゴリをつくってみる。
登録完了
アーカイブ
http://localhost/blog/archives
http://localhost/blog/archives/add
カテゴリのとこはこんな感じ。