作成: 2019年02月25日
更新: 2021年03月29日
PHPでHello, worldもできない状態からCakePHPを使ってテキストフィールドにテキストを打ち込んで打ち込まれたテキストを保存し、表示することができるWebアプリを作る。筆者はWindowsで作成したがたぶんMacでもできます。
PHPがなかったのでまずPHPをインストールします。PHPのインストールには【超初心者向け】PHPをインストールする方法(Windows 7)を参考にしました。筆者はWindows10ですがまあ大丈夫でしょう。ここからダウンロードするバージョンを選びます。筆者はCurrent Stableと書いてあったPHP 7.2.12を選びました。筆者はWindowsなのでWindows downloadsを選びました。Macだとたぶん違うんでしょう。
次のページではx86用かx64用か、それとスレッドセーフ用かどうかを選びます。筆者のWinsowsは64ビットなのでx64、あとサーバーはたぶん使わないので関係ないですが一応スレッドセーフを選びました。
これをphp-7.2.12というディレクトリに解凍してC直下(好み)に置きました。そしたら環境変数を編集してPathを通します。
これでPHPを使えるはずなのでコマンドプロンプトでチェックしましょう。以下のコマンドでPHPのバージョンがチェックできます。
php -v
以下のようにでたら大丈夫です。
PHP 7.2.12 (cli) (built: Nov 8 2018 05:47:36) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
これでPHPはインストールできたので次はCakePHPを導入します。
公式のクイックスタートガイドを参考に進めます。
Composerというソフトを使うことを進めてくるのでこちらDownload Composerから適切なものをインストールします。筆者はWindowsなのでWindowsインストーラーを使いました。チェックボックスはすべてデフォルトで進めました。途中proxyの設定とかありましたがたぶん関係ないのでスルーしました。インストールすると自動でComposerにPathが通っているので、プロジェクトを作りたいディレクトリで以下のコマンドを打ちます。
composer self-update && composer create-project --prefer-dist cakephp/app cms
しかし、ここで謎のエラーが
Your requirements could not be resolved to an installable set of packages.
Problem 1
- cakephp/cakephp 3.6.9 requires ext-intl * -> the requested PHP extension intl is missing from your system.
- cakephp/cakephp 3.6.8 requires ext-intl * -> the requested PHP extension intl is missing from your system.
以下略
調べるとphp.initの拡張がうまくいっていないらしい。そういえばComposerインストール中になんか変えられたような。ここ【Windows】CakePHP3をインストールする方法を参考にphpのphp.initの最後に以下の1行を追加
php.initextension=php_intl.dll
これで再び以下のコマンドを打つ
composer self-update && composer create-project --prefer-dist cakephp/app cms
最後のSet Folder Permissions ? (Default to Y)という選択肢はよくわからないのでデフォルトのYで。
これで環境構築は終了。
確認のため作成されたcms/binディレクトリに移動し以下のコマンドでサーバーを起動。
cake server
この状態で表示されたURL(筆者の場合はhttp://localhost:8765/)に行くと、以下のようなページが表示される。
この時点でひな形が出来上がっているのでこれをもとに作ってみる。まずはcms/config/routes.php内のRouter::scope内に以下を追加
routes.php
$routes->connect(
'/hello',
['controller' => 'Hello', 'action' => 'hello']
);
これで/helloへのアクセスがあった場合HelloControllerのhelloメソッドを動かすことを定める。
cms/src/ControllerにHelloController.phpを作る
HelloController.php<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
class HelloController extends AppController
{
public function hello()
{
$this->render('/Hello/hello');
}
}
helloメソッドは今はシンプルにcms/src/Template/Hello/hello.ctpを表示するだけである。cms/src/Templateの部分を省略してる。
cms/src/Template/Hello/hello.ctpを以下のように作る。
hello.ctpHello!
CakePHPではhtmlの代わりにctpでページを作る。
これでcms/bin上で以下のコマンドによりサーバーを起動する。
cake server
http://localhost:8765/helloに行くと以下のようなページが表示される。
次にモデルを作るはずだったが、ここで挫折。データベース作成時に直接sqlをたたきたくなかったのでMySQLではなくSQLiteを使いたかったがなかなかうまくいかなかった。もしうまくいったら更新したい。
データベース周りの情報が少ないうえに違っていてうまくいかなかった。
【超初心者向け】PHPをインストールする方法(Windows 7)
CakePHP 概要(CakePHP公式)
【Windows】CakePHP3をインストールする方法