コントローラー内からルートアプリディレクトリを取得する最良の方法は何ですか? コントローラの外に出すことはできますか?
次のように、(パラメーターから) 引数としてサービスに渡すことで取得します。
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Symfony2 でこの情報を取得するためのより良い、より簡単な方法はありますか?
コントローラー内からルートアプリディレクトリを取得する最良の方法は何ですか? コントローラの外に出すことはできますか?
次のように、(パラメーターから) 引数としてサービスに渡すことで取得します。
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Symfony2 でこの情報を取得するためのより良い、より簡単な方法はありますか?
2018 年 10 月 21 日更新:
今週の時点で、getRootDir()
は廃止されました。getProjectDir()
Muzaraf Ali のコメント セクションで提案されているように、代わりに使用してください。
—-
これを使って:
$this->get('kernel')->getRootDir();
Webルートが必要な場合は、次のようにします。
$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;