Apa cara terbaik untuk mendapatkan direktori aplikasi root dari dalam pengontrol? Apakah mungkin untuk mendapatkannya di luar pengontrol?
Sekarang saya mendapatkannya dengan meneruskannya (dari parameter) ke layanan sebagai argumen, seperti ini:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Apakah ada cara yang lebih baik dan lebih sederhana untuk mendapatkan informasi ini di Symfony2?
php
symfony
symfony-2.8
symfony-config-component
Dawid Ohia
sumber
sumber
%kernel.project_dir%
untuk mendapatkan root dari proyek Anda.["%kernel.root_dir%"]
Jawaban:
UPDATE 2018-10-21:
Pada minggu ini,
getRootDir()
sudah tidak digunakan lagi. Silakan gunakangetProjectDir()
sebagai gantinya, seperti yang disarankan di bagian komentar oleh Muzaraf Ali.—-
Gunakan ini:
Dan jika Anda menginginkan root web :
ini akan bekerja dari metode aksi pengontrol ...
EDIT: Untuk layanan, saya pikir cara Anda melakukannya sebersih mungkin, meskipun saya akan memberikan layanan kernel lengkap sebagai argumen ... tetapi ini juga akan melakukan trik ...
sumber
$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
$this->container->getParameter('kernel.cache_dir')
pengontrol alih-alih solusi yang Anda berikancontainer
disuntikkan :) Jika Anda mengikuti praktik terbaik, menyuntikkancontainer
harus dihindari dengan segala cara. Adapun solusi untuk mendapatkanweb
direktori, saya masih menggunakan yang saya berikan di atas;)%kernel.project_dir%/web/
sebagai pengganti%kernel.root_dir%/../web/
Di Symfony 3.3 Anda dapat menggunakan
untuk mendapatkan root web / proyek.
sumber
Jika Anda menggunakan jalur ini untuk mengakses bagian proyek yang bukan merupakan kode (misalnya direktori unggahan, atau database SQLite), mungkin lebih baik mengubah jalur menjadi parameter, seperti ini:
Parameter ini dapat disuntikkan di mana pun Anda membutuhkannya, jadi Anda tidak perlu lagi mengotak-atik jalur dalam kode Anda. Selain itu, parameter dapat diganti pada waktu penerapan. Akhirnya, setiap programmer yang memelihara akan memiliki ide yang lebih baik untuk apa Anda menggunakannya.
Pembaruan: Memperbaiki penggunaan konstan kernel.root_dir.
sumber
Anda juga dapat menggunakan ekspresi reguler selain ini:
sumber
Sejak Symfony 3.3 Anda dapat menggunakan pengikatan, seperti
Setelah itu Anda dapat menggunakan parameter $ kernelProjectDir di kontroler ATAU layanan apa pun. Seperti
sumber