環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

HelloWorldとechoしてもPHPと友達になれなかったから、フレームワークでやってみるMVC(2)Cakephp

大意は前回書いたので長々とは書かないが、せっかくなのでControllerからViewへの連携や、ルーティングにも触れながらHelloWorldをやって、やや骨太のHelloWorldになってもらおうじゃないかということだ。

(単純にフレームワークに触れてみたいだけだったりするのは内緒)

CakePHP

前回同様、プロジェクト作成については出来ているものとします。

早速ですが、下記の2ファイルを手動で作成しました。

src/Controller/HelloController.php
<?php
namespace App\Controller;

class HelloController extends AppController {
    public function index() {
        $this->set('message', 'Hello World !! - CakePHP');
    }
}
templates/Hello/index.php
<h1><?=$message ?></h1>

CakePHPは、ファイル名やアクションの命名規則のみで、URLのルーティングを行えるのも特徴の1つのようだ。上の記述をするだけで、

  • http://localhost:8765/Hello/ にアクセスすると、HelloControllerのindexアクションの処理が行われ、templates/Hello/index.phpビューが呼び出され画面表示される

ということが実現出来る。面白いですね。これは用途などによって、使い方は様々だと思うので、明示的にビューを指定したり、ルーティングをコントロールすることも出来るだろう。(会社などで開発する場合は、明示的に書くほうが好み)

ブラウザ確認

# プロジェクトフォルダで起動
bin/cake server

# ブラウザ確認
http://localhost:8765/Hello/

無事に表示はされましたが、なにやら自動でレイアウトが付与されている。そのあたりを調べてみる。

レイアウトを変更してみる

レイアウトはデフォルトではtemplates/layout/default.phpが適用されているようなので、変更してみる。templates/layout/hello.phpを作成する

templates/layout/hello.php
<!DOCTYPE html>
<html>
<head></head>
<body>
<?= $this->fetch('content') ?>
<p>Cakephp4で遊ぶ</p>
</body>
</html>

急遽レイアウト変更する作業を行ったので、ビューファイルの方にh1タグが入っている、なんとも変な形になったが、やることは同じなので、このまま。(

src/Controller/HelloController.php
<?php
namespace App\Controller;

class HelloController extends AppController {
    public function index() {
        // レイアウトの設定
        $this->viewBuilder()->setLayout('hello');
        
        $this->set('message', 'Hello World !! - CakePHP');
    }
}

レイアウトの指定をするようにしてみました。再度確認してみます。

ルーティングを変更してみる

命名規則だけでルーティング出来るのは便利だが、とはいえ自分で自由に設定したいので最後に試してみる。現状では/Hello/で呼び出しする必要があったので、/で呼び出せるように変更してみる。

config/routes.php

デフォルトでいろいろと書いてあったので、全部消して以下にしてみた。

<?php
use Cake\Routing\Router;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;

Router::connect('/', ['controller' => 'Hello', 'action' => 'index']);

無事に、http://localhost:8765/ のみで、表示させることが出来た!

さいごに

Cookbookも昔はもっとのっぺりした感じだったのに、ずいぶんとシュッとしたイケメンに。Cookbook

思いがけずレイアウトファイルまで触ってしまい、HelloWorldの枠をはみ出してしまった。CakePHPを触るのは本当に久しぶりで、昔との違いで少し手がとまる場面もあったが、無事に表示できた。

次回のターゲットはどいつなのか。それではまた。