- 更新日: 2016年1月27日
- PHP & CakePHP
CakePHPのbakeコマンドでディレクトリにコントローラー・ビューを生成
CakePHP3 での開発で、コントローラーやビュー(テンプレート)を特定のディレクトリ以下に生成する方法です。具体的には、src/Admin/UsersController.php のように、Admin ディレクトリ以下にコントローラーやビュー用のファイルを生成するための、bin/cake bake コマンドの使い方となります。
— 環境 —
PHP 5.5.19
CakePHP 3.1.1
prefix オプション付きの bin/cake bake コマンドを使う
bin/cake bake controller コマンドで — prefix オプションを使う。管理画面用のコントローラーとして、src/Admin/UsersController.php を生成する例とします。
1 2 3 |
$ bin/cake bake controller Users --prefix Admin |
これで以下の2ファイルが生成される。
src/Controller/Admin/UsersController.php
tests/TestCase/Controller/Admin/UsersControllerTest.php
コントローラーには、以下のコードが生成され namespace が正しく設定されています。
src/Controller/Admin/UsersController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Controller\Admin; use App\Controller\AppController; /** * Users Controller * * @property \App\Model\Table\UsersTable $Users */ class UsersController extends AppController { // ... |
template を bake で生成
続いてビュー(テンプレート)も bin/cake bake コマンドで生成します。こちらも –prefix オプションに Admin を指定する。
1 2 3 |
$ bin/cake bake template Users --prefix Admin |
これで以下のテンプレートファイルが生成される。
src/Template/Admin/Users/index.ctp
src/Template/Admin/Users/view.ctp
src/Template/Admin/Users/add.ctp
src/Template/Admin/Users/edit.ctp
prefix 付きのルーティング
prefix 付きコントローラー用のルーティングを作成する。
config/routes.php
1 2 3 4 5 |
Router::prefix('admin', function ($routes) { // All routes here will be prefixed with `/admin` // And have the prefix => admin route element added. $routes->fallbacks('DashedRoute'); }); |
とりあえず $routes->fallbacks() でルーティング作成。
login() アクションとテンプレート作成
$routes->fallbacks(‘DashedRoute’) とした場合、Auth コンポーネントを使用している User のコントローラーには、login アクションが必要になります。なので、Admin/UsersController.php に以下の login() アクションを追加しました。
src/Controller/Admin/UsersController.php
1 2 3 4 |
public function login() { // ... } |
また login() アクション用のテンプレート作成。
src/Template/Admin/Users/edit.ctp
1 2 3 |
<h1>管理者ログイン</h1> // ... |
これで /admin/users の管理画面ページが動作するようになる。
管理画面アクションの認可を isAuthorized() で実装
最後に補足ですが、管理画面アクションの authorization(認可)については、Admin/UsersController.php に isAuthorized() を実装するなど別途設定が必要です。以下は User モデルに role カラムを持たせて、role が admin(管理者)の場合のみ認可する例。
src/Controller/Admin/UsersController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php namespace App\Controller\Admin; use App\Controller\AppController; /** * Users Controller * * @property \App\Model\Table\UsersTable $Users */ class UsersController extends AppController { public function isAuthorized($user) { // Admin can access every action if (isset($user['role']) && $user['role'] === 'admin') { return true; } // Default deny return false; } // ... |
以上です。
- – 参考リンク –
- Code Generation with Bake — CakePHP Cookbook 3.x documentation
- Prefix Routing / Routing – CakePHP Cookbook 3.x documentation
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
Leave Your Message!