126

コントローラー内からルートアプリディレクトリを取得する最良の方法は何ですか? コントローラの外に出すことはできますか?

次のように、(パラメーターから) 引数としてサービスに渡すことで取得します。

services:

    sr_processor:
        class: Pro\Processor
        arguments: [%kernel.root_dir%]

Symfony2 でこの情報を取得するためのより良い、より簡単な方法はありますか?

4

5 に答える 5

222

2018 年 10 月 21 日更新:

今週の時点で、getRootDir()は廃止されました。getProjectDir()Muzaraf Ali のコメント セクションで提案されているように、代わりに使用してください。

—-

これを使って:

$this->get('kernel')->getRootDir();

Webルートが必要な場合は、次のようにします。

$this->get('kernel')->getRootDir() . '/../web' . $this->getRequest()->getBasePath();

これはコントローラーアクションメソッドから機能します...

編集:サービスに関しては、完全なカーネルサービスを引数として渡しますが、あなたが行った方法は可能な限りクリーンだと思います...しかし、これはトリックも行います...

于 2012-02-09T17:34:48.950 に答える
8

このパスを使用してプロジェクトのコードではない部分 (アップロード ディレクトリや SQLite データベースなど) にアクセスする場合は、次のようにパスをパラメーターに変換することをお勧めします。

parameters:
    database_path: '%kernel.root_dir%/../var/sqlite3.db'

このパラメーターは必要な場所に挿入できるため、コード内のパスをいじる必要がなくなります。また、パラメーターはデプロイ時にオーバーライドできます。最後に、メンテナンスを行っているすべてのプログラマーは、それを何に使用しているかをよりよく理解できます。

更新: kernel.root_dir 定数の使用法を修正しました。

于 2016-08-25T18:18:49.313 に答える
7

これに加えて、正規表現を使用することもできます。

    $directoryPath = $this->container->getParameter('kernel.root_dir') . '/../web/bundles/yourbundle/';
    $directoryPath = preg_replace("/app..../i", "", $directoryPath);
    echo $directoryPath;
于 2015-01-20T16:18:10.147 に答える