2020-03-29に更新

CakePHPでHello, world(したかった)

目標

PHPでHello, worldもできない状態からCakePHPを使ってテキストフィールドにテキストを打ち込んで打ち込まれたテキストを保存し、表示することができるWebアプリを作る。筆者はWindowsで作成したがたぶんMacでもできます。

環境構築

PHPがなかったのでまずPHPをインストールします。PHPのインストールには【超初心者向け】PHPをインストールする方法(Windows 7)を参考にしました。筆者はWindows10ですがまあ大丈夫でしょう。ここからダウンロードするバージョンを選びます。筆者はCurrent Stableと書いてあったPHP 7.2.12を選びました。筆者はWindowsなのでWindows downloadsを選びました。Macだとたぶん違うんでしょう。
image
次のページではx86用かx64用か、それとスレッドセーフ用かどうかを選びます。筆者のWinsowsは64ビットなのでx64、あとサーバーはたぶん使わないので関係ないですが一応スレッドセーフを選びました。
image
これを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.init
extension=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/](http://localhost:8765/))に行くと、以下のようなページが表示される。 ![image](https://crieit.now.sh/upload_images/6135637938c1061be9d34138ad7b8dda5e805ea1c25df.png) # プロジェクトの作成 この時点でひな形が出来上がっているのでこれをもとに作ってみる。まずはcms/config/routes.php内のRouter::scope内に以下を追加 ```php:routes.php $routes->connect( '/hello', ['controller' => 'Hello', 'action' => 'hello'] );

これで/helloへのアクセスがあった場合HelloControllerのhelloメソッドを動かすことを定める。
cms/src/ControllerにHelloController.phpを作る

```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を以下のように作る。 ```html:hello.ctp Hello!

CakePHPではhtmlの代わりにctpでページを作る。

これでcms/bin上で以下のコマンドによりサーバーを起動する。

cake server

http://localhost:8765/helloに行くと以下のようなページが表示される。

image

次にモデルを作るはずだったが、ここで挫折。データベース作成時に直接sqlをたたきたくなかったのでMySQLではなくSQLiteを使いたかったがなかなかうまくいかなかった。もしうまくいったら更新したい。

まとめ

データベース周りの情報が少ないうえに違っていてうまくいかなかった。

参考にしたサイト

【超初心者向け】PHPをインストールする方法(Windows 7)
CakePHP 概要(CakePHP公式)
【Windows】CakePHP3をインストールする方法

Originally published at banatech.net
ツイッターでシェア
みんなに共有、忘れないようにメモ

bana118

https://banatech.net でもやっているブログをうつしてみました

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!
ボードとは?

関連記事

コメント