CakePHP プロジェクトの作成と実行
CakePHPとは?
CakePHPは、開発者が迅速にWebアプリケーションを構築するためのオープンソースPHP Webフレームワークです。MVC(モデル・ビュー・コントローラ)アーキテクチャに基づいており、データベース操作、フォーム処理、認証、セッション管理などの一般的なタスクを簡略化するための強力なツールセットを提供します。
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が組み込まれており、デフォルトの構成が最適化され、デバッグされています。開発者はServBayの「ホスト」機能を使用してサイトを管理するだけで、Caddyの構成ファイルを手動で修正する必要はありません。
リライトルールと.htaccess
NGINXやApacheでは、開発者がリライトルールや.htaccessファイルを自分で書く必要があることが多いですが、ServBayにはあらかじめCaddyのルールが設定されているため、特別な要件がない限り、これらのルールを書く必要はありません。
詳細情報
詳細については、Rewriteとhtaccess、ApacheサイトをServBayに移行する方法、NGINXサイトをServBayに移行する方法をご参照ください。
CakePHPプロジェクトの作成
TIP
ServBayはウェブサイトを/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
ウェブサーバーの設定
ServBayの「ホスト」機能を使用して、CakePHPプロジェクトにアクセスできるようにします。ServBayの「ホスト」設定で、新しいホストを追加します:
- 名前:
My First CakePHP Dev Site
- ドメイン:
servbay-cakephp-test.local
- サイトタイプ:
PHP
- PHPバージョン:
8.3
を選択 - サイトのルートディレクトリ:
/Applications/ServBay/www/servbay-cakephp-app/webroot
詳細な設定手順については、最初のウェブサイトの追加を参照してください。
サンプルコードの追加
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
ウェブサイトのアクセス
ブラウザを開き、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
2Userテーブルの追加
次のコードを
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
2Userテーブルの追加
次のコードを
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が提供する機能を使用してプロジェクトを管理およびアクセスし、複数のデータベースに接続してデータを呼び出すことができました。