Symfonyプロジェクトの作成と実行
Symfonyとは?
Symfonyは、SensioLabsが作成したオープンソースのPHP Webフレームワークで、開発者が現代的なWebアプリケーションを構築するための効率的、柔軟、かつ強力なツールセットを提供することを目的としています。Symfonyは、ルーティング、テンプレートエンジン、フォーム処理、認証など、豊富な機能を提供し、一般的なWeb開発タスクを簡素化します。
Symfonyの主要な特徴と利点
- モジュラー設計:Symfonyはモジュラー設計を採用しており、開発者は必要に応じてコンポーネントを選択して使用できます。
- 高性能:最適化されたアーキテクチャとキャッシュ機構により、Symfonyは優れたパフォーマンスを提供します。
- 強力なコミュニティサポート:大規模な開発者コミュニティと豊富なエコシステムを持っています。
- 柔軟性:さまざまなサードパーティライブラリや拡張を統合でき、さまざまな規模のプロジェクトに適用できます。
- 優れたドキュメント:詳細なドキュメントとチュートリアルを提供しており、開発者が迅速に学習するのを助けます。
Symfonyは、開発者が高品質のWebアプリケーションやAPIを迅速に構築するのを助け、小規模なアプリケーションから企業レベルの大規模プロジェクトまで幅広く適用可能です。
ServBayを使用してSymfonyプロジェクトを作成し実行する
この記事では、ServBayが提供するPHP環境を使用してSymfonyプロジェクトを作成し実行します。ServBayの『ホスト』機能を利用してWebサーバーを設定し、簡単な設定でプロジェクトにアクセスできるようにします。
注意:もしあなたが以前NGINXやApacheを使用していたユーザーであれば
ServBayはデフォルトでCaddyをWebサーバーとして使用します。NGINXやApacheからServBayに移行するユーザーには、いくつかの重要な変更点があります:
Caddyの設定
ServBayにはCaddyが組み込まれており、デフォルトの設定はすでに最適化されて調整されています。開発者はServBayの『ホスト』機能を通じてサイトを管理するだけで、手動でCaddyの設定ファイルを変更する必要はありません。
Rewrite規則と.htaccess
NGINXやApacheでは、開発者がURLの書き換えやその他の設定を行うためにRewrite規則や.htaccessファイルを自分で記述する必要がありました。しかし、ServBayではCaddyの規則が工場出荷時にすでに設定されているため、特別な要件がない限り、自分でこれらの規則を記述する必要はありません。
詳細な情報
詳細な情報については、Rewriteとhtaccess、ApacheサイトをServBayに移行する方法、NGINXサイトをServBayに移行する方法をご参照ください。
Symfonyプロジェクトの作成
TIP
ServBayは、開発者がサイトを管理しやすいように、Webサイトを/Applications/ServBay/www
ディレクトリに配置することを推奨しています。
Composerのインストール
ServBayには出荷時にComposerがすでにインストールされているため、別途インストールする必要はありません。
Symfonyプロジェクトの作成
Composerを使用して新しいSymfonyプロジェクトを作成します:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app cd servbay-symfony-app composer create-project symfony/website-skeleton .
1
2
3
4プロジェクトディレクトリに移動
新しく作成したSymfonyプロジェクトディレクトリに移動します:
bashcd /Applications/ServBay/www/servbay-symfony-app
1
初期設定
環境変数の設定
.env
ファイルでデータベース接続情報やその他の環境変数を設定します。以下の設定が正しく行われていることを確認してください:APP_ENV=dev APP_SECRET=your_secret_key DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1
2
3
Webサーバーの設定
ServBayの『ホスト』機能を使用して、Webサーバーを介してSymfonyプロジェクトにアクセスします。ServBayの『ホスト』設定で新しいホストを追加します:
- 名前:
My First Symfony Dev Site
- ドメイン名:
servbay-symfony-test.local
- サイトタイプ:
PHP
- PHPバージョン:
8.3
を選択 - サイトのルートディレクトリ:
/Applications/ServBay/www/servbay-symfony-app/public
詳細な設定手順については、最初のサイトを追加するを参照してください。
サンプルコードの追加
config/routes.yaml
ファイルに以下のコードを追加して、「Hello ServBay!」を出力します:
index:
path: /
controller: App\Controller\DefaultController::index
2
3
src/Controller/DefaultController.php
ファイルに以下のコードを追加します:
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController
{
/**
* @Route("/", name="index")
*/
public function index(): Response
{
return new Response('Hello ServBay!');
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
サイトのアクセス
ブラウザを開いて、https://servbay-symfony-test.local
にアクセスすると、「Hello ServBay!」が表示されます。
NoSQLデータベースの例
Memcachedの例
Memcached拡張のインストール
ServBayにはMemcached拡張があらかじめインストールされているため、追加のインストールは不要です。
Memcachedの設定
.env
ファイルでMemcached接続情報を設定します:CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1
1
2config/routes.yaml
ファイルに以下のコードを追加します:
memcached:
path: /memcached
controller: App\Controller\DefaultController::memcached
2
3
Memcachedの使用
コントローラーでキャッシュを使用します:
phpuse Symfony\Component\Cache\Adapter\MemcachedAdapter; class DefaultController { /** * @Route("/memcached", name="memcached") */ public function memcached(): Response { $client = MemcachedAdapter::createConnection('memcached://127.0.0.1:11211'); $cache = new MemcachedAdapter($client); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Memcached!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21ブラウザを開いて、
https://servbay-symfony-test.local/memcached
にアクセスします。
Redisの例
Redis拡張のインストール
ServBayにはRedis拡張があらかじめインストールされているため、追加のインストールは不要です。
Redisの設定
.env
ファイルでRedis接続情報を設定します:REDIS_URL=redis://127.0.0.1:6379
1config/routes.yaml
ファイルに以下のコードを追加します:
redis:
path: /redis
controller: App\Controller\DefaultController::redis
2
3
Redisの使用
コントローラーでキャッシュを使用します:
phpuse Symfony\Component\Cache\Adapter\RedisAdapter; class DefaultController { /** * @Route("/redis", name="redis") */ public function redis(): Response { $redisConnection = RedisAdapter::createConnection('redis://127.0.0.1:6379'); $cache = new RedisAdapter($redisConnection); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Redis!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21ブラウザを開いて、
https://servbay-symfony-test.local/redis
にアクセスします。
リレーショナルデータベースの例
データベース構造とマイグレーションファイルの作成
マイグレーションファイルの作成
Symfonyのマーカーバンドルを使用してマイグレーションファイルを作成します:
bashphp bin/console make:migration
1マイグレーションファイルの編集
src/Migrations
ディレクトリで新しく作成されたマイグレーションファイルを探し、データベーステーブル構造を定義するように編集します:phppublic function up(Schema $schema): void { $this->addSql('CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY(id))'); }
1
2
3
4マイグレーションの実行
Symfonyのコマンドを使用してマイグレーションを実行し、データベーステーブルを作成します:
bashphp bin/console doctrine:migrations:migrate
1
MySQLの例
MySQLの設定
.env
ファイルでMySQL接続情報を設定します:DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1config/routes.yaml
ファイルに以下のコードを追加します:
mysql_add:
path: /mysql-add
controller: App\Controller\DefaultController::mysqlAdd
mysql_get:
path: /mysql
controller: App\Controller\DefaultController::mysql
2
3
4
5
6
ユーザーデータの書き込み
コントローラーでユーザーデータを書き込みます:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/mysql-add", name="mysql_add") */ public function mysqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/mysql", name="mysql") */ public function mysql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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
26
27
28
29
30
31
32
33
34
35
36
37ブラウザを開いて、
https://servbay-symfony-test.local/mysql-add
およびhttps://servbay-symfony-test.local/mysql
にアクセスします。
PostgreSQLの例
PostgreSQLの設定
.env
ファイルでPostgreSQL接続情報を設定します:DATABASE_URL=pgsql://root:[email protected]:5432/servbay_symfony_app
1config/routes.yaml
ファイルに以下のコードを追加します:
pgsql_add:
path: /pgsql-add
controller: App\Controller\DefaultController::pgsqlAdd
pgsql_get:
path: /pgsql
controller: App\Controller\DefaultController::pgsql
2
3
4
5
6
ユーザーデータの書き込み
コントローラーでユーザーデータを書き込みます:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/pgsql-add", name="pgsql_add") */ public function pgsqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/pgsql", name="pgsql") */ public function pgsql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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
26
27
28
29
30
31
32
33
34
35
36
37ブラウザを開いて、
https://servbay-symfony-test.local/pgsql-add
およびhttps://servbay-symfony-test.local/pgsql
にアクセスします。
以上の手順を通じて、Symfonyプロジェクトを作成し実行し、ServBayの機能を利用してプロジェクトを管理しアクセスできるようにするだけでなく、さまざまなデータベースと接続しデータを取得することができました。