cakePHP4でコントローラーを作成するにはどうすればいいんだろう…
こんな疑問を解決します。
この記事では、cakePHP4でコントローラーを作成手順やcakePHP4のコントローラーの機能なども紹介しています。
ぜひ最後までご確認ください。
【開発環境】
PHP8
cakePHP4
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
コントローラーをbakeコマンドで作成する
- コントローラーを作成する基本コマンド
$ bin/cake bake controller コントローラー名
ex.
$ bin/cake bake controller items
src > Controller配下にItemsController.phpが作成されます。
コントローラー名は、モデルの複数形、テーブル名と一致させる必要があります。
- ディレクトリを作成しつつ、コントローラーを作成する
$ bin/cake bake controller コントローラー名 --prefix
ex.
$ bin/cake bake controller items --prefix User
src > Controller配下にUserフォルダを作りつつ、ItemsController.phpが作成されます。
【以下実行内容】
src
– Controller
-User
– ItemsController.php
- CRUDアクションは生成させないでコントローラーを作成
$ bin/cake bake controller コントローラー名 --no-actions
ex.
$ bin/cake bake controller items --no-actions
通常のコントローラー作成だと、indexアクションやeditアクションなども一緒に作成されます。
しかし、–no-actionsをつけると、CRUDアクションは生成されずにコントローラーを作成できます。
<?php
declare(strict_types=1);
namespace App\Controller;
/**
* Items Controller
*
* @property \App\Model\Table\ItemsTable $Items
*/
class ItemsController extends AppController
{
}
cakePHP4でおさえるべきコントローラーの特徴
cakePHP4は、コントローラーのアクション名とtemplatesのファイル名を一致させれば、コントローラーが自動でビューをレンダリングします。
例えば、src > Controller > ItemsController.phpを作成し、templates > Items > index.phpを作成します。
ItemsController.phpにindexアクションを書きます。わざわざコントローラーでItems > index.phpを呼ぶ処理を書かなくても、cakeが自動でビューファイルを認識してくれます。
(コントローラーのアクション名とテンプレートのフォルダ名とファイル名が一致していればの話)
コードで書くとこんな感じ
<?php
declare(strict_types=1);
namespace App\Controller;
/**
* Items Controller
*
* @method \App\Model\Entity\Item[]|\Cake\Datasource\ResultSetInterface paginate($object = null, array $settings = [])
*/
class ItemsController extends AppController
{
/**
* Index method
*
* @return \Cake\Http\Response|null|void Renders view
*/
public function index()
{
}
}
<h1>hello</h1>
/items/indexにアクセスすると、helloの文字が表示される。
/コントローラー名(Controllerはいらない)/アクション名
コントローラーからビューに変数を渡す
cakePHP4でコントローラーからビューに変数を渡すには、set関数かset関数+compact関数を使います。
※個人的にはset関数+compact関数の方を推奨です。(記述量が少ないから)
set関数を使う場合
public function index()
{
$user = "ユーザーです";
$item = "itemです";
$this->set([
'user' => $user,
'item' => $item,
]);
}
set関数+compact関数を使う場合
public function index()
{
$user = "ユーザーです";
$item = "itemです";
$this->set(compact(
'user',
'item',
));
}
ビュー
<?= $user ?>
<br>
<?= $item ?>
画面には、
ユーザーです
itemです
と表示されます。
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
コメント