Symfony MongoDB Integration
項目一覧
Overview
このガイドでは、ように MongoDB 統合 と このフレームワークを使用して単純な PHP ウェブアプリケーションを構築する方法について説明します。 Symfoo を使用して MongoDB をデータベースとしてウェブ アプリケーションを構築し、MongoDB のクエリを簡素化するライブラリの使用をプラクティスすることの利点について読みとります。
Symfny は、PHP アプリケーションを構築するための柔軟で高度に構成可能なフレームワークです。 このフレームワークを使用して、ウェブ アプリを効率化するための再利用可能なコンポーネントを作成できます。
このガイドのクイック スタートセクションには、MongoDB コレクションのデータにアクセスする単一ページ アプリを作成するために使用できるチュートリアルが含まれています。
[リソース ]セクションには、さらに学習するためのリソースとドキュメントへのリンクが含まれています。
Symbol アプリケーションで MongoDB を使用する理由
Symfny Web アプリケーションのデータストアとして MongoDB を使用すると、ドキュメント データモデルを活用して豊富なクエリ式を構築でき、データを簡単に操作できるようになります。 また、接続をカスタマイズして、複数のデータベースとコレクションとの間でデータを永続的にアクセスしたり、アクセスしたりすることもできます。
アプリケーションには、MongoDB および PHP の Object-Document マッパー(ODM)であるDotene MongoDB ODMを実装できます。 これにより、リレーショナル データベースに Dotene ORM と同じ原則を使用して、Community で MongoDB を操作する方法が提供されます。
Dotene ODM では、ビルダー API を使用して PHP オブジェクトを MongoDB ドキュメントにマッピングし、MongoDB でクエリを実行できます。 このマッピングにより、柔軟なスキーマ設計や高度な検索などの他の MongoDB 機能を使用できます。 このライブラリの詳細については、「リソース」セクションを参照してください。
クイック スタート
このチュートリアルでは、PHP フレームワークである Symfloy を使用して Web アプリケーションを構築する方法を説明します。 これには、MongoDB Atlas でホストされている MongoDB クラスターに接続し、データベースのデータにアクセスして表示する手順が含まれています。
Symfny Web アプリケーションのデータストアとして MongoDB を使用すると、ドキュメント データモデルを活用して豊富なクエリ式を構築でき、データを簡単に操作できるようになります。
Tip
Symfloy なしで MongoDB PHP ライブラリを使用して MongoDB に接続する場合は、MongoDB PHP ライブラリのドキュメントの「 MongoDBへの接続」を参照してください。
MongoDB Atlas は、MongoDB 配置をホストする完全管理のクラウドデータベース サービスです。このガイドの手順に従い、独自の無料(クレジット カード不要)MongoDB Atlas 配置を作成できます。
このガイドでは、Docs UDM を使用して、PHP オブジェクトを MongoDB ドキュメントにマッピングし、ビルダー API を使用して MongoDB をクエリできるようにします。
このガイドの手順に従って、MongoDB 配置に接続し、データベースに対してクエリを実行するサンプル Symfloy Web アプリケーションを作成します。
前提条件
クイック スタート アプリケーションを作成するには、開発環境に次のソフトウェアがインストールされている必要があります。
ターミナルアプリと shell。 MacOS ユーザーの場合は、ターミナルまたは同様のアプリを使用します。 Windows ユーザーの場合は、 PowerShell を使用します。
MongoDB Atlas クラスターの作成
データを保存および管理できる MongoDB クラスターを作成する必要があります。 Atlas の使用開始ガイドを完了して、新しい Atlas アカウントを設定し、無料階層の MongoDB クラスターを作成します。 このチュートリアルでは、このチュートリアルで使用されるデータを含む、サンプル データセットをクラスターにロードする方法も説明します。
MongoDBクラスターに接続する場所と方法に関する指示をドライバーに提供するには、 接続stringを提供します。 接続 を取得するには、string ドキュメントの 「 クラスターへの接続 」Atlas チュートリアルの手順に従います。
Tip
接続stringを安全な場所に保存します。
MongoDB 拡張機能のインストール
MongoDB 拡張機能のインストールの詳細については、PHP ライブラリ マニュアルの「 拡張機能のインストール」を参照してください。
Symbol プロジェクトを初期化する
次のコマンドを実行して、 restaurants
というスケルトンの Symbol プロジェクトを作成します。
composer create-project symfony/skeleton restaurants
PHP ドライバーと Dotene ODM のインストール
プロジェクト ディレクトリを入力し、MongoDB PHP ドライバーと Dotene ODM バンドルをアプリケーションに追加します。 バンドルは ODM ライブラリを Syncory に統合し、MongoDB からオブジェクトを読み取り、MongoDB にオブジェクトを書込むことができるようにします。 バンドルをインストールすると、ドライバーもプロジェクトに自動的に追加されます。 詳細については、このガイドの「リソース」セクションを参照してください。
ODM をインストールするには、次のコマンドを実行します。
composer require doctrine/mongodb-odm-bundle
Tip
上記のコマンドを実行すると、次のプロンプトが表示されます。
Do you want to execute this recipe?
ODM ライブラリをアプリケーションに追加するには、応答オプションからyes
を選択します。
プロジェクトで Doctene ODM が有効になっていることを確認するには、 config/bundles.php
ファイルに次のコードでハイライトされているエントリが含まれていることを確認します。
return [ // ... Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle::class => ['all' => true], ];
ODM の構成
config/packages
ディレクトリで、 doctrine_mongodb.yaml
ファイルの内容を次のコードで置き換えます。
doctrine_mongodb: auto_generate_proxy_classes: true auto_generate_hydrator_classes: true connections: default: server: "%env(resolve:MONGODB_URL)%" default_database: "%env(resolve:MONGODB_DB)%" document_managers: default: auto_mapping: true mappings: App: dir: "%kernel.project_dir%/src/Document" mapping: true type: attribute prefix: 'App\Document' is_bundle: false alias: App
フロントエンド依存関係のインストール
このプロジェクトでは、Compass のデフォルトのテンプレート エンジンであるtwig
を使用して、このアプリケーションにテンプレートを生成します。 次のコマンドを実行して、 twig
バンドルをインストールします。
composer require symfony/twig-bundle
注意
この手順では、設定されていない環境変数に関するエラー メッセージが表示される場合がありますが、この問題は次の手順で解決されます。
プロジェクト ファイルの変更
このセクションでは、 restaurants
プロジェクトのファイルを変更して、指定された条件に一致するレストランを表示する Symfloy ウェブ アプリケーションを作成する方法について説明します。
環境変数を設定する
ルート ディレクトリで、.env
ファイルに移動し、接続stringとターゲット データベースを設定するための次の環境変数を定義します。
... MONGODB_URL=<your Atlas connection string> MONGODB_DB=sample_restaurants
接続stringを取得するには、「 MongoDB Atlasクラスターの作成」ステップを参照してください。
レストランエンティティとコントロールの作成
src/Document
ディレクトリにRestaurant.php
ファイルを作成し、次のコードを貼り付けて、 restaurants
コレクション内のドキュメントを表すエンティティを作成します。
declare(strict_types=1); namespace App\Document; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM; #[ODM\Document(collection: 'restaurants')] class Restaurant { #[ODM\Id] public ?string $id = null; #[ODM\Field] public string $name; #[ODM\Field] public string $borough; #[ODM\Field] public string $cuisine; }
次に、 src/Controller
ディレクトリにRestaurantController.php
ファイルを作成し、次のコードを貼り付けて、アプリケーション内のエンドポイントを処理します。
declare(strict_types=1); namespace App\Controller; use App\Document\Restaurant; use Doctrine\ODM\MongoDB\DocumentManager; use MongoDB\BSON\Regex; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class RestaurantController extends AbstractController { private DocumentManager $dm; private LoggerInterface $logger; public function __construct(DocumentManager $dm, LoggerInterface $logger) { $this->dm = $dm; $this->logger = $logger; } '/', name: 'restaurant_index', methods: ['GET']) ( public function index(Request $request): Response { return $this->render('restaurant/index.html.twig'); } '/restaurant/browse', name: 'restaurant_browse', methods: ['GET']) ( public function browse(Request $request): Response { $restaurantRepository = $this->dm->getRepository(Restaurant::class); $queryBuilder = $restaurantRepository->createQueryBuilder(); $restaurants = $queryBuilder ->field('borough')->equals('Queens') ->field('name')->equals(new Regex('Moon', 'i')) ->getQuery() ->execute(); return $this->render('restaurant/browse.html.twig', ['restaurants' => $restaurants]); } }
コントローラー ファイルは、ウェブ アプリのフロント ページにテキストを表示するindex()
メソッドを定義します。 このファイルはbrowse()
メソッドも定義しています。このメソッドは、 borough
フィールドが'Queens'
で、かつname
フィールドに string 'Moon'
が含まれているドキュメントを検索します。 次に、このメソッドは/restaurant/browse/
ルートのドキュメントを表示します。 browse()
メソッドはQueryBuilder
クラスを使用してクエリを構築します。
テンプレートをカスタマイズします
次に、ウェブ アプリの出現をカスタマイズするためのテンプレートを作成します。
templates/restaurant
ディレクトリを作成し、次のファイルを入力します。
index.html.twig
browse.html.twig
次のコードをindex.html.twig
ファイルに貼り付けます。
{# templates/restaurant/index.html.twig #} {% extends 'base.html.twig' %} {% block body %} <h1>Welcome to the Symfony MongoDB Quickstart!</h1> {% endblock %}
次のコードをbrowse.html.twig
ファイルに貼り付けます。
{# templates/restaurant/browse.html.twig #} {% extends 'base.html.twig' %} {% block title %} Search Restaurants {% endblock %} {% block body %} <h1>Search Restaurants</h1> {% for restaurant in restaurants %} <p> <span style="color:deeppink;"><b>Name: </b>{{ restaurant.name }}</span><br> <b>Borough:</b> {{ restaurant.borough }}<br> <b>Cuisine:</b> {{ restaurant.cuisine }}<br> </p> {% endfor %} {% endblock %}
Symbol アプリケーションの起動
PHP 組み込みウェブ サーバーを起動するには、アプリケーション ルート ディレクトリから次のコマンドを実行します。
symfony server:start
サーバーが起動すると、次のメッセージが出力されます。
[OK] Web server listening The Web server is using PHP FPM 8.3.4 http://127.0.0.1:8000
URL http://127.0.0.1 :8000 /restaurant/browse を開きます 使用しているウェブ ブラウザで。ページには、次のスクリーンショットに示すように、レストランのリストとそれぞれに関する詳細が表示されています。
クイック スタート チュートリアルが完了しました。
これらの手順を完了すると、MongoDB 配置に接続し、サンプル データに対してクエリを実行し、検索した結果をレンダリングする Symfone Web アプリケーションが作成されます。
リソース
Symfloy と MongoDB の詳細については、次のリソースを表示してください。