Docs Menu
Docs Home
/
MongoDB ドライバー
/

Symfony MongoDB Integration

項目一覧

  • Overview
  • Symbol アプリケーションで MongoDB を使用する理由
  • クイック スタート
  • 前提条件
  • MongoDB Atlas クラスターの作成
  • MongoDB 拡張機能のインストール
  • Symbol プロジェクトを初期化する
  • PHP ドライバーと Dotene ODM のインストール
  • フロントエンド依存関係のインストール
  • プロジェクト ファイルの変更
  • Symbol アプリケーションの起動
  • リソース

このガイドでは、ように MongoDB 統合 と このフレームワークを使用して単純な PHP ウェブアプリケーションを構築する方法について説明します。 Symfoo を使用して MongoDB をデータベースとしてウェブ アプリケーションを構築し、MongoDB のクエリを簡素化するライブラリの使用をプラクティスすることの利点について読みとります。

Symfny は、PHP アプリケーションを構築するための柔軟で高度に構成可能なフレームワークです。 このフレームワークを使用して、ウェブ アプリを効率化するための再利用可能なコンポーネントを作成できます。

このガイドのクイック スタートセクションには、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 アプリケーションを作成します。

クイック スタート アプリケーションを作成するには、開発環境に次のソフトウェアがインストールされている必要があります。

データを保存および管理できる MongoDB クラスターを作成する必要があります。 Atlas の使用開始ガイドを完了して、新しい Atlas アカウントを設定し、無料階層の MongoDB クラスターを作成します。 このチュートリアルでは、このチュートリアルで使用されるデータを含む、サンプル データセットをクラスターにロードする方法も説明します。

MongoDBクラスターに接続する場所と方法に関する指示をドライバーに提供するには、 接続stringを提供します。 接続 を取得するには、string ドキュメントの 「 クラスターへの接続 」Atlas チュートリアルの手順に従います。

Tip

接続stringを安全な場所に保存します。

MongoDB 拡張機能のインストールの詳細については、PHP ライブラリ マニュアルの「 拡張機能のインストール」を参照してください。

次のコマンドを実行して、 restaurantsというスケルトンの Symbol プロジェクトを作成します。

composer create-project symfony/skeleton restaurants

プロジェクト ディレクトリを入力し、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ファイルに次のコードでハイライトされているエントリが含まれていることを確認します。

config/ Bundles.html
return [
// ...
Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle::class => ['all' => true],
];

config/packagesディレクトリで、 doctrine_mongodb.yamlファイルの内容を次のコードで置き換えます。

config/ Packages/docsline_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とターゲット データベースを設定するための次の環境変数を定義します。

.env
...
MONGODB_URL=<your Atlas connection string>
MONGODB_DB=sample_restaurants

接続stringを取得するには、「 MongoDB Atlasクラスターの作成」ステップを参照してください。

src/DocumentディレクトリにRestaurant.phpファイルを作成し、次のコードを貼り付けて、 restaurantsコレクション内のドキュメントを表すエンティティを作成します。

src/Document/Restaurant.html
<?php
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ファイルを作成し、次のコードを貼り付けて、アプリケーション内のエンドポイントを処理します。

src/値を含む
<?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;
}
#[Route('/', name: 'restaurant_index', methods: ['GET'])]
public function index(Request $request): Response
{
return $this->render('restaurant/index.html.twig');
}
#[Route('/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ファイルに貼り付けます。

types/restaurant/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
{# 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 %}

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 の詳細については、次のリソースを表示してください。

戻る

PHP ドライバー