寝て起きて寝て

プログラミングが出来ない情報系のブログ

CAKEPHP3でHelloWorldを表示

環境

ubuntu 16.04

PHP 7.0.22

CAKEPHP 3.5.6

Apache/2.4.18

実施内容

今回はController側で「HelloController.php」を作成 View側では「Hello」ディレクトリと「index.ctp」ファイルを作成する

実施

各種ファイル作成

src/Controller/HelloController.phpを作成

<?php
  class HelloController extends AppController{

    function index() {
      $data = 'Hello world!';
      $this->set('data', $data);
    }
  }
?>

ついでにViewのディレクトリとファイルも作っておく

$ mkdir src/View/Hello
$ vim src/View/Hello/index.ctp

index.ctpの中身は下記の通り

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
  </head>
  <body>
    <h1>
      <?php
        echo $data
      ?>
    </h1>
  </body>
</html>

Controllerエラー

ブラウザで/helloにアクセスすると下記のようなエラーが出た

2017-11-29 01:23:07 Error: [Cake\Error\FatalErrorException] Class 'AppController' not found in /var/www/html/comporser/CAKEPHPTEST/src/Controller/HelloController.php on line 2

AppControllerが見つからないよって言われてる

調べてみると名前空間の宣言がいるらしい

Controllerの同ディレクトリに初期から入っている「PagesController.php」をのぞいてみる

<?php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
namespace App\Controller;

use Cake\Core\Configure;
use Cake\Network\Exception\ForbiddenException;
use Cake\Network\Exception\NotFoundException;
use Cake\View\Exception\MissingTemplateException;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class PagesController extends AppController
{
}
?>

namespace を使って宣言してるしこれが正規手順っぽいのでならって再度編集してみる

<?php
  namespace App\Controller;
  class HelloController extends AppController{
    function index() {
      $data = 'Hello world!';
      $this->set('data', $data);
    }
  }
?>

Templateエラー

再度アクセスしてみると下記のようなエラーになった

2017-11-29 02:15:31 Error: [Cake\View\Exception\MissingTemplateException] Template file "Hello/index.ctp" is missing.
Exception Attributes: array (
  'file' => 'Hello/index.ctp',
)

テンプレートがないよって言われている

なにそれ・・・

調べてみると ビューは「ビューの処理を行う部分」と「表示するテンプレート」 に分かれたらしい。

なので、現在Viewに入ってるHelloディレクトリをまとめて「src/Template」配下に移動させると・・・

f:id:krs1:20171129120512p:plain

表示される・・・

色々弄ったから現在のディレクトリ構成を記載(必要なものだけ)

src/
├── Application.php
├── Controller
│   ├── AppController.php
│   └── HelloController.php
├── Template
│   └── Hello
│       └── index.ctp
└── View
    └── Hello

さすがにView使ってないしこれだと味気ないので次回はView処理を交えてやる

参考URL

【PHP超入門】名前空間(namespace・use)について - Qiita

コントローラーとビュー(1/6):初心者のためのCakePHP3 プログラミング入門 - libro