CakePHPプロジェクトの作成と実行
CakePHPとは?
CakePHPは、開発者がWebアプリケーションを迅速に構築するためのオープンソースのPHPウェブフレームワークです。MVC(Model-View-Controller)アーキテクチャに基づいており、データベースの操作、フォーム処理、認証、セッション管理などの一般的な開発タスクを簡略化するための強力なツールセットを提供します。
CakePHPの主な機能と利点
- 迅速な開発:開発者が一般的なコード構造を迅速に生成するための豊富なコード生成ツールを提供。
- 柔軟で強力なORM:組み込みのORM(オブジェクトリレーショナルマッピング)レイヤーにより、データベース操作が簡単になります。
- セキュリティ:入力検証、CSRF保護、SQLインジェクション防止などの組み込みセキュリティ機能。
- コミュニティサポート:活発なコミュニティと豊富なプラグインエコシステム。
- 良好なドキュメント:開発者が迅速に始めるための広範なドキュメントとチュートリアルを提供。
CakePHPは、小規模なアプリケーションから大規模なエンタープライズシステムに至るまでのプロジェクトに適しており、高品質なWebアプリケーションを迅速に構築するのに役立ちます。
ServBayを使用してCakePHPプロジェクトを作成し実行する
この記事では、ServBayが提供するPHP環境を使って、CakePHPプロジェクトを作成および実行します。ServBayの「ホスト」機能を利用してWebサーバーを設定し、簡単な設定でプロジェクトにアクセスできるように構成します。
注意: NGINXやApacheを使用したことがある場合
ServBayはデフォルトでCaddyをWebサーバーとして使用します。NGINXやApacheからServBayに移行するユーザー向けにいくつかの重要な変更点があります
Caddyの設定
ServBayにはCaddyがプリインストールおよびプリ設定されています。開発者は、Caddy構成ファイルを手動で編集する必要はなく、ServBayの「ホスト」機能を通じてサイトを管理するだけです。
リライトルールと .htaccess
NGINXやApacheでは、開発者は通常、URLのリライトやその他の設定を処理するために独自のリライトルールや.htaccessファイルを書く必要があります。しかし、ServBayは最適化されたCaddyルールを標準で提供するため、特別な要件がない限り、開発者はこれらのルールを書く必要はありません。
詳細情報
詳細については、リライトとhtaccess、ApacheサイトからServBayへの移行方法、およびNGINXサイトからServBayへの移行方法を参照してください。
CakePHPプロジェクトの作成
TIP
ServBayは、開発者がWebサイトを管理しやすくするために、/Applications/ServBay/www
ディレクトリに配置することを推奨しています。
Composerのインストール
ServBayにはComposerがプリインストールされているため、別途インストールは不要です。
CakePHPプロジェクトの作成
Composerを使用して新しいCakePHPプロジェクトを作成します:
bashcd /Applications/ServBay/www mkdir servbay-cakephp-app cd servbay-cakephp-app composer create-project --prefer-dist cakephp/app .
1
2
3
4プロジェクトディレクトリに入る
新しく作成したCakePHPプロジェクトディレクトリに移動します:
bashcd /Applications/ServBay/www/servbay-cakephp-app
1
初期設定
環境変数の設定
データベース接続情報やその他の環境変数を
config/app_local.php
ファイルに設定します。以下の設定が正しく行われていることを確認してください:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
Webサーバーの設定
ServBayの「ホスト」機能を使用して、Webサーバー経由でCakePHPプロジェクトにアクセスします。ServBayのホスト設定で新しいホストを追加します:
- 名前:
My First CakePHP Dev Site
- ドメイン:
servbay-cakephp-test.local
- Webサイトの種類:
PHP
- PHPバージョン:
8.3
を選択 - Webサイトルートディレクトリ:
/Applications/ServBay/www/servbay-cakephp-app/webroot
詳細な設定手順については、最初のWebサイトを追加するを参照してください。
サンプルコードの追加
config/routes.php
ファイルに以下のコードを追加して「Hello ServBay!」を出力します:
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
src/Controller/PagesController.php
ファイルに以下のコードを追加します:
namespace App\Controller;
use Cake\Http\Response;
class PagesController extends AppController
{
public function display()
{
return new Response(['body' => 'Hello ServBay!']);
}
}
2
3
4
5
6
7
8
9
10
11
Webサイトにアクセス
ブラウザを開いてhttps://servbay-cakephp-test.local
にアクセスし、ページにHello ServBay!
と表示されるのを確認します。
NoSQLデータベースを使用した例
Memcachedの例
Memcached拡張のインストール
ServBayにはMemcached拡張がプリインストールされているため、追加のインストールは不要です。
Memcachedの設定
config/app_local.php
ファイルにMemcached接続情報を設定します:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\MemcachedEngine', 'servers' => ['127.0.0.1'], ], ],
1
2
3
4
5
6ルートの設定
config/routes.php
ファイルに以下のコードを追加します:php$routes->connect('/memcached', ['controller' => 'Pages', 'action' => 'memcached']);
1Memcachedの使用
コントローラーでキャッシュを利用します:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function memcached() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Memcached!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17ブラウザを開いて
https://servbay-cakephp-test.local/memcached
にアクセスします。
Redisの例
Redis拡張のインストール
ServBayにはRedis拡張がプリインストールされているため、追加のインストールは不要です。
Redisの設定
config/app_local.php
ファイルにRedis接続情報を設定します:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\RedisEngine', 'server' => '127.0.0.1', 'port' => 6379, ], ],
1
2
3
4
5
6
7ルートの設定
config/routes.php
ファイルに以下のコードを追加します:php$routes->connect('/redis', ['controller' => 'Pages', 'action' => 'redis']);
1Redisの使用
コントローラーでキャッシュを利用します:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function redis() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Redis!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17ブラウザを開いて
https://servbay-cakephp-test.local/redis
にアクセスします。
リレーショナルデータベースの例
データベーススキーマとマイグレーションファイルの作成
マイグレーションファイルの作成
CakePHPのBakeツールを使用してマイグレーションファイルを作成します:
bashbin/cake bake migration CreateUsers name:string email:string:unique
1マイグレーションの実行
CakePHPのコマンドを使用してマイグレーションを実行し、データベーステーブルを作成します:
bashbin/cake migrations migrate
1
MySQLの例
MySQLの設定
config/app_local.php
ファイルにMySQL接続情報を設定します:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9ルートの設定
config/routes.php
ファイルに以下のコードを追加します:php$routes->connect('/mysql-add', ['controller' => 'Pages', 'action' => 'mysqlAdd']); $routes->connect('/mysql', ['controller' => 'Pages', 'action' => 'mysql']);
1
2ユーザーテーブルの追加
src/Model/Table/UsersTable.php
ファイルに以下のコードを追加します:php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8ユーザーデータの追加
コントローラーでユーザーデータを追加します:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function mysqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function mysql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25ブラウザを開いて
https://servbay-cakephp-test.local/mysql-add
およびhttps://servbay-cakephp-test.local/mysql
にアクセスします。
PostgreSQLの例
PostgreSQLの設定
config/app_local.php
ファイルにPostgreSQL接続情報を設定します:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'driver' => Postgres::Class, 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
10ルートの設定
config/routes.php
ファイルに以下のコードを追加します:php$routes->connect('/pgsql-add', ['controller' => 'Pages', 'action' => 'pgsqlAdd']); $routes->connect('/pgsql', ['controller' => 'Pages', 'action' => 'pgsql']);
1
2ユーザーテーブルの追加
src/Model/Table/UsersTable.php
ファイルに以下のコードを追加します:php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8ユーザーデータの追加
コントローラーでユーザーデータを追加します:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function pgsqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function pgsql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25ブラウザを開いて
https://servbay-cakephp-test.local/pgsql-add
およびhttps://servbay-cakephp-test.local/pgsql
にアクセスします。
上記の手順を通じて、CakePHPプロジェクトを作成し実行し、ServBayの機能を利用してプロジェクトを管理およびアクセスし、さまざまなデータベースに接続してクエリを実行することができました。