Bagaimana saya mendapatkan rute saat ini di Symfony 2?
Sebagai contoh, routing.yml
:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
Bagaimana saya bisa mendapatkan somePage
nilai ini ?
php
symfony
routing
symfony-routing
IlyaDoroshin
sumber
sumber
Dengan ranting:
{{ app.request.attributes.get('_route') }}
sumber
<body class="{{ app.request.get('_route') | replace({'_' : '-'}) }}">
untuk menerapkan css khusus laman :)Saya pikir ini adalah cara termudah untuk melakukan ini:
sumber
{% render "SomeBundle:SomeController:someAction" %}
, di mana Anda akan mendapatkan nilai '_internal' lagi.Symfony 2.0-2.1
Gunakan ini:
Yang itu tidak akan memberimu
_internal
.Pembaruan untuk Symfony 2.2+: Ini tidak berfungsi memulai Symfony 2.2+. Saya membuka bug dan jawabannya "sesuai desain". Jika Anda ingin mendapatkan rute dalam sub-aksi, Anda harus meneruskannya sebagai argumen
Dan pengontrol Anda:
sumber
$route['_route']
tampaknya bermasalah tetapi mungkin tidak membahas tentang symfony dev. Masak tidak menyebutkan tentang_route
dari$router->match()
output ..$router->match()
kata "@return array Sebuah array parameter" yang tampaknya sangat internal. Saya tidak ingin bergantung pada itu, tetapi saat ini, tampaknya menjadi satu-satunya solusi yang layak ketika berhadapan dengan sub-permintaan.Tidak ada solusi yang berfungsi untuk semua kasus penggunaan. Jika Anda menggunakan metode $ request-> get ('_ route'), atau variannya, ia akan mengembalikan '_internal' untuk kasus-kasus di mana penerusan berlangsung.
Jika Anda memerlukan solusi yang berfungsi bahkan dengan penerusan, Anda harus menggunakan layanan RequestStack baru, yang tiba di 2.4, tetapi ini akan mematahkan dukungan ESI :
Anda dapat membuat ekstensi ranting dari ini jika Anda membutuhkannya di templat.
sumber
_route
bukan cara untuk pergi dan tidak pernah ada . Itu selalu dimaksudkan untuk keperluan debugging menurut Fabien yang menciptakan Symfony. Ini tidak dapat diandalkan karena tidak akan bekerja dengan hal-hal seperti penerusan dan panggilan langsung lainnya ke pengontrol seperti rendering parsial.Anda perlu menyuntikkan nama rute Anda sebagai parameter di controller Anda, lihat dokumen di sini
Juga, tolong jangan pernah gunakan
$request->get('');
jika Anda tidak memerlukan fleksibilitas itu jauh lebih lambat daripada menggunakan mendapatkan pada tas properti tertentu yang Anda butuhkan (atribut, permintaan atau permintaan) jadi$request->attributes->get('_route');
dalam hal ini.sumber
Anda bisa mendapatkan nama rute dari objek permintaan dari dalam pengontrol.
sumber
Semua yang saya dapat dari itu
_internal
Saya mendapatkan nama rute dari dalam controller dengan
$this->getRequest()->get('_route').
kode Even tuxedo25 menyarankan untuk dikembalikan_internal
Kode ini dieksekusi dalam apa yang disebut 'Komponen' di Symfony 1.X; Bukan pengontrol halaman tetapi bagian dari halaman yang membutuhkan logika.
Kode yang setara di Symfony 1.X adalah:
sfContext::getInstance()->getRouting()->getCurrentRouteName();
sumber
$view['request']->getParameter('_route');
{% render... %}
panggilan denganstandalone=true
. Dengan caching (AppCache.php atau pernis dengan ESI) diaktifkan, ini akan menyebabkan tampilan mandiri diminta dengan Permintaan HTTP terpisah (ini adalah rute yang_internal
berperan) agar ro dapat di-cache secara independen.Dengan Symfony 3.3, saya telah menggunakan metode ini dan berfungsi dengan baik.
Saya punya 4 rute
Dan hanya satu baris membuat kelas aktif untuk semua rute.
sumber
Untuk mendapatkan rute saat ini berdasarkan pada URL (lebih dapat diandalkan dalam hal ke depan):
sumber
Dengan Symfony 4.2.7, saya dapat mengimplementasikan yang berikut ini di templat ranting saya, yang menampilkan nama rute kustom yang saya definisikan di controller saya.
Di index.html.twig
Di controller saya
Hasilnya mencetak "article_list" ke halaman yang diinginkan di browser saya.
sumber
Bagi siapa pun yang membutuhkan rute saat ini untuk Symfony 3, inilah yang saya gunakan
sumber
jika Anda ingin mendapatkan nama rute di controller Anda daripada Anda harus menyuntikkan permintaan (alih-alih mendapatkan dari wadah karena Symfony UPGRADE dan daripada panggilan panggilan ('_ rute').
jika Anda ingin mendapatkan nama rute dalam ranting daripada Anda harus mendapatkannya seperti
sumber
$request->get()
secara langsung karena lambat: github.com/symfony/http-foundation/blob/2.8/Request.php#L712