4

ばかげた質問かもしれませんが、私はSymfony2を初めて使用し、プロジェクトの1つに使用しています。サードパーティのライブラリ、つまりSSRSReport(SSRSレポートのAPI)
を使用できるようにしたいと思います。

ライブラリをに入れましたSymfony/vendor/ssrs/lib/Ssrs/src
ここで定義されているクラスはたくさんありますが、自動ロードする必要はありません。

コントローラーからそれらを要求して呼び出す方法がわかりません。

確かにこれは機能しません

require_once '/vendor/ssrs/lib/Ssrs/src/SSRSReport.php';
class DefaultController extends Controller
{
    public function viewAction()
    {
        define("UID", "xxxxxxxx");
        define("PASWD", "xxxxxxxx");
        define("SERVICE_URL", "http://xxx.xxx.xxx.xxx/ReportServer/");
        $report = new SSRSReport(new Credentials(UID, PASWD), SERVICE_URL);
        return $this->render('myBundle:Default:view.html.twig'
            , array('report' => $report)
        );
    }
}

SSRSReport()ここでCredentials()使用されているのは、APIに含まれている多くのクラスのうちの2つです。

4

2 に答える 2

4

まず第一に、symfonyで管理されていないライブラリをに入れることはお勧めしません/vendors。このライブラリを管理しているので、に入れて/srcください。

次に、名前空間ではない(つまり、ルート名前空間にある)クラスを使用する場合は、それらを適切に参照するようにしてください。そうしないと、PHPは現在の名前空間(この場合はコントローラーの名前空間)を検索します。

第三に、手っ取り早い解決策は、コントローラーからのファイルを適切に含めることです。

class DefaultController extends Controller
{
    protected function includeSsrsSdk()
    {
      require_once(
          $this->container->getParameter( 'kernel.root_dir' )
        . '/../src/ssrs/lib/Ssrs/src/SSRSReport.php'
      );
    }

    public function viewAction()
    {
        $this->includeSsrsSdk();
        define("UID", "xxxxxxxx");
        define("PASWD", "xxxxxxxx");
        define("SERVICE_URL", "http://xxx.xxx.xxx.xxx/ReportServer/");
        $report = new \SSRSReport(new \Credentials(UID, PASWD), SERVICE_URL);
        return $this->render('myBundle:Default:view.html.twig'
            , array('report' => $report)
        );
    }
}

ただし、これにより、ライブラリをこの1つのコントローラーに含めるためのロジックがロックされます。これを行うSDK用に別のラッパーを作成したり、サービスとして登録したりすることもできます。

于 2012-06-04T17:42:32.697 に答える
1

あなたはおそらくsymfonyで作曲家を使っているので、これが私の提案です。

require_onceの代わりに、名前空間のないライブラリまたは関数を自動ロードするために、composerの自動ロードメカニズムを使用する必要がありますhttp://getcomposer.org/doc/04-schema.md#files

したがって、composer.jsonのautoloadセクションを更新するだけです。

   "自動ロード":{
        "psr-0":{"": "src /"}、
        "ファイル":["src / SsrsReport / SSRSReport.php"]
   }、

サービスを利用するには、Facade(SSRSREportクラスを拡張)またはそれを返すFactoryを使用します。

于 2014-01-20T11:17:11.743 に答える