Saya mencari-cari kode untuk mendapatkan jalur saat ini dalam template ranting (dan bukan URL lengkap), yaitu saya tidak mau http://www.sitename.com/page, saya hanya perlu /page.
Ini BUKAN duplikat yang tepat, karena jawaban # 2 berisi informasi yang diperlukan (tentang parameter permintaan) yang tidak disediakan oleh pertanyaan yang ditautkan. Seseorang harus menggabungkan jawaban # 2 ke dalam pertanyaan terkait.
Victor Sergienko
1
coba app.request.requestUri.
Kristóf Dombi
7
Sama sekali tidak menipu. Voting untuk dibuka kembali. Memposting jawaban saya sebagai komentar karena saya tidak diizinkan untuk menjawab sekarang ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}( getBaseUrlbit bersifat opsional; hanya diperlukan jika tidak diinstal ke root domain)
The appvariabel pandangan global berisi segala macam cara pintas berguna, seperti app.sessiondan app.security.token.user, yang referensi layanan yang mungkin Anda gunakan di controller.
Ini adalah satu-satunya yang bekerja untuk saya. Semua yang lain melewatkan parameter kueri yang bukan bagian dari rute, atau mengandalkan pengontrol dan bukannya Twig.
Craig
13
Untuk mendapatkan jalur hanya mencoba {{ app.request.pathinfo }}atau melihat daftar metode yang tersedia di/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
Michael
2
Ini seharusnya jawaban yang benar. Pendek dan halus.
Fabian Picone
2
urimendapatkan URL dengan parameter. pathinfomendapat jalur dengan parameter NO . requestUrimendapat path DENGAN parameter. requestUriharus ditambahkan ke jawaban ini IMO. Anda jarang membutuhkan domain, dan Anda jarang ingin menghapus parameter.
Anda tidak akan memerlukan semua ini kecuali Anda ingin menambahkan parameter tambahan ke tautan Anda, seperti di pager, atau Anda ingin mengubah salah satu parameter.
Jika Anda ingin membuat tautan saat ini di Ranting dan mengubah lokal untuk alih bahasa, itu dapat dilakukan di Symfony 2.1 sebagai berikut: {{path (app.request.attributes.get ('_ route'), app.request.attributes .get ('_ route_params') | merge ({'_ locale': 'ja'}))}} Ini dapat bekerja jika Anda menggunakan ekstensi Twig oleh Bártfai Tamás
Naytzyrhc
Untuk implementasi 2.0 Anda, saya mendapatkan pesan kesalahan yang mengatakan bahwa tidak ada wadah. Jadi saya menambahkan variabel seperti yang dilakukan di PagerfantaBundle, tetapi kemudian dikatakan saya harus mengimplementasikan ContainerInterface?
Squazic
Anda harus membuat konstruktor untuk ekstensi ini, yang memiliki parameter $ container. Kemudian dalam konfigurasi DIC Anda harus mendeklarasikan wadah sebagai parameter untuk ekstensi. Seperti di sini di TwigBundle
Bártfai Tamás
12
_Route_parameters tidak akan berfungsi jika Anda memiliki beberapa params tambahan di string kueri Anda. Anda bisa menggunakan app.request.query.all sebagai gantinya.
wdev
34
Anda bisa mendapatkan URL saat ini di Twig seperti ini:
Perlu dicatat bahwa jika Anda memiliki parameter kueri tambahan di URL Anda, yang bukan bagian dari rute yang dikonfigurasi, jawaban yang diterima tidak akan memasukkannya ke dalam URL saat ini (jalur).
Mengapa Anda ingin parameter tambahan?
Misalnya, jika Anda memiliki halaman daftar dengan catatan yang dapat difilter berdasarkan kata kunci dan halaman memiliki pagination, kemungkinan besar variabel kueri untuk "kata kunci" dan "halaman" tidak akan berada di rute Anda. Tetapi dalam tombol maju dan mundur untuk paging, Anda memerlukan URL lengkap saat ini (yang berisi kata kunci sehingga halaman berikutnya masih difilter). Dan Anda perlu memodifikasi variabel halaman.
Cara Menggabungkan Parameter Kueri Ekstra
Jadi Anda bisa mendapatkan rute saat ini, dan menggabungkan variabel tambahan (setelah memodifikasi satu atau lebih dari variabel tambahan itu). Perhatikan bahwa Anda menggabungkan variabel Anda sendiri ke app.request.query.all, dan kemudian menggabungkan array itu ke dalam app.request.attributes.get('_route_params'). The path()metode mengharuskan Anda menyediakan semua parameter yang diperlukan dari rute, yang mengapa Anda perlu menyertakan _route_params.
Itu benar-benar jelek, tetapi jika Anda sedang mengembangkan pagination, Anda perlu memodifikasi variabel halaman pada setiap tautan yang terpisah, jadi Anda harus memasukkan semua itu setiap kali. Mungkin yang lain punya solusi yang lebih baik.
Dan untuk menghasilkan URL lengkap saat ini:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(getBaseUrl
bit bersifat opsional; hanya diperlukan jika tidak diinstal ke root domain)Jawaban:
Jika Anda ingin membacanya menjadi variabel tampilan:
The
app
variabel pandangan global berisi segala macam cara pintas berguna, sepertiapp.session
danapp.security.token.user
, yang referensi layanan yang mungkin Anda gunakan di controller.sumber
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Dapatkan url saat ini :
{{ app.request.uri }}
di Symfony 2.3, 3, 4, 5Dapatkan jalur saja :
{{ app.request.pathinfo }}
(tanpa parameter)Dapatkan permintaan uri :
{{ app.request.requesturi }}
(dengan parameter)sumber
{{ app.request.pathinfo }}
atau melihat daftar metode yang tersedia di/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
mendapatkan URL dengan parameter.pathinfo
mendapat jalur dengan parameter NO .requestUri
mendapat path DENGAN parameter.requestUri
harus ditambahkan ke jawaban ini IMO. Anda jarang membutuhkan domain, dan Anda jarang ingin menghapus parameter.Dalam symfony 2.1 Anda dapat menggunakan ini:
Dalam symfony 2.0, satu solusi adalah menulis ekstensi ranting untuk ini
Dan gunakan seperti ini
Anda tidak akan memerlukan semua ini kecuali Anda ingin menambahkan parameter tambahan ke tautan Anda, seperti di pager, atau Anda ingin mengubah salah satu parameter.
sumber
Anda bisa mendapatkan URL saat ini di Twig seperti ini:
sumber
Perlu dicatat bahwa jika Anda memiliki parameter kueri tambahan di URL Anda, yang bukan bagian dari rute yang dikonfigurasi, jawaban yang diterima tidak akan memasukkannya ke dalam URL saat ini (jalur).
Mengapa Anda ingin parameter tambahan?
Misalnya, jika Anda memiliki halaman daftar dengan catatan yang dapat difilter berdasarkan kata kunci dan halaman memiliki pagination, kemungkinan besar variabel kueri untuk "kata kunci" dan "halaman" tidak akan berada di rute Anda. Tetapi dalam tombol maju dan mundur untuk paging, Anda memerlukan URL lengkap saat ini (yang berisi kata kunci sehingga halaman berikutnya masih difilter). Dan Anda perlu memodifikasi variabel halaman.
Cara Menggabungkan Parameter Kueri Ekstra
Jadi Anda bisa mendapatkan rute saat ini, dan menggabungkan variabel tambahan (setelah memodifikasi satu atau lebih dari variabel tambahan itu). Perhatikan bahwa Anda menggabungkan variabel Anda sendiri ke
app.request.query.all
, dan kemudian menggabungkan array itu ke dalamapp.request.attributes.get('_route_params')
. Thepath()
metode mengharuskan Anda menyediakan semua parameter yang diperlukan dari rute, yang mengapa Anda perlu menyertakan_route_params
.{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
Itu benar-benar jelek, tetapi jika Anda sedang mengembangkan pagination, Anda perlu memodifikasi variabel halaman pada setiap tautan yang terpisah, jadi Anda harus memasukkan semua itu setiap kali. Mungkin yang lain punya solusi yang lebih baik.
sumber
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Jika Anda menggunakan Silex 2 Anda tidak dapat mengakses objek Permintaan lagi.
Anda dapat mengakses atribut permintaan saat ini dengan cara ini.
Dan untuk menghasilkan URL lengkap saat ini:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
sumber
global.request.attributes.get('_route')
. Jembatan ranting diperlukan.