1

重複の可能性:
Symfony2でImagickを使用していますか?

私はSymfonyを初めて使用するので、これはダミーの質問かもしれません。しかし、グーグルの数時間後、私は関連する答えを見つけられなかったので、ここで試してみる価値があるかもしれません。

つまり、基本的には、Windows、Apache、純粋なPHP、Mongodb、および「raw」PHP_Mongodb PECLドライバー(ここでは「raw」という単語は、Symfony2のDoctrine Mongodb ODMバンドルとは異なるために使用されます)をWebアプリケーション開発に使用していました。PECLドライバーは完全に正常に機能し、次のように書くことができます。

  <?php
  $m = new Mongo();
  $db = $m->myDB;
  $db->find();
  //Do Other DB Operations.

上記のコードは、標準の手順に従い、php.iniでPECLドライバー拡張機能をセットアップしたため、「use」、「include」、または「require」ステートメントがなくても正常に機能しました。Webブラウザーでphpinfo()を表示すると、Mongodbドライバー情報が正しく表示されます。すべてが完璧です。

次に、Symfony2を使い始めます。これは、URLの書き換え、MVCパターン、セキュリティ、その他の便利な機能を提供するためです。Doctrine Mongodb ODMバンドルは、PHPオブジェクトのみを永続化できることを除いて、うまく機能します。私のプロジェクトにはたくさんのjavascriptオブジェクトがあり、その上に「PHPラッパー」を置く以外にそれを行う方法はありません(そのjavascriptオブジェクトのみを含むPHPオブジェクトを作成するため)。

古き良きPECLトリックを使用して、上記と同じコードブロックでデータベースと通信しようとすると、次のエラーが発生しました。

Fatal error: Class 'MyProject\Controller\Mongo' not found in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Symfony\src\MyProject\Controller\DefaultController.php on line 47. 

Symfony2は、自動クラスローダーを探しているだけで、php.iniの拡張パスをブロックまたは上書きしたようです。その拡張機能を含めるには、autoload.phpやAppKernel.phpを変更する必要があると思いますか?ここで何が起こっているのか理解するのを手伝ってください。Symfony2でPECLドライバーを使用できますか?それとも、Doctrine Mongodb ODMがSymfony2のデータベースにアクセスする唯一の方法ですか?ありがとう!

4

1 に答える 1

1

Symfony2 は名前空間 php で動作します。これにより、名前空間以外のライブラリ/クラスを操作するのが少し難しくなりますが、本当に必要なのはトリックだけです。

を使用new Mongo()して mongodb オブジェクトを取得しようとすると、PHP は現在の名前空間を検索します。つまり、クラス内で mongo() 関数を検索します。これを機能させるには、mongo の名前空間を指定する必要があります。名前空間を使用しないため、PHP はこれをグローバルな名前空間に配置します。したがって、関数を正しく参照するには、 を使用する必要がありnew \Mongo()、PHP は現在の名前空間ではなく \ 名前空間を検索します。

于 2012-10-05T15:49:40.757 に答える