コントローラー内からルートアプリディレクトリを取得する最良の方法は何ですか?コントローラーの外に出すことは可能ですか?
次のように、引数として(パラメーターから)サービスに引数として渡すことで取得できます。
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Symfony2でこの情報を取得するより良い、より簡単な方法はありますか?
PDATE 2018-10-21:
今週現在、getRootDir()
は廃止されました。 Muzaraf ALiのコメントセクションで提案されているように、代わりにgetProjectDir()
を使用してください。
-
これを使って:
$this->get('kernel')->getRootDir();
web rootが必要な場合:
$this->get('kernel')->getRootDir() . '/../web' . $this->getRequest()->getBasePath();
これはコントローラーアクションメソッドから機能します...
編集:サービスに関しては、完全なカーネルサービスを引数として渡しますが、あなたがそれをした方法は可能な限りきれいであると思います...
このパスを使用して、コードではないプロジェクトの部分(たとえば、アップロードディレクトリやSQLiteデータベース)にアクセスする場合は、次のようにパスをパラメーターに変更することをお勧めします。
parameters:
database_path: '%kernel.root_dir%/../var/sqlite3.db'
このパラメーターは必要な場所に挿入できるため、コード内のパスをいじる必要がなくなります。また、展開時にパラメーターをオーバーライドできます。最後に、すべての保守プログラマーは、あなたが何のためにそれを使用しているのか、より良いアイデアを持っています。
更新:kernel.root_dir定数の使用を修正しました。
これに加えて、正規表現も使用できます。
$directoryPath = $this->container->getParameter('kernel.root_dir') . '/../web/bundles/yourbundle/';
$directoryPath = preg_replace("/app..../i", "", $directoryPath);
echo $directoryPath;