Dalam MVC, apa perbedaan antara controller dan router?

19

Apakah maksudnya sama (melampirkan URL ke tindakan, atau tindakan ke URL) atau apakah ada perbedaan yang saya lewatkan?

Contoh: http://github.com/dannyvankooten/PHP-Router vs. http://konstrukt.dk

thelolcat
sumber
1
router itu terdengar lebih seperti proksi yang dimuliakan bagi saya
ratchet freak
Anda hanya memerlukan model (database), pengontrol (yang merupakan router), dan tampilan (halaman). Itu dia. Jika Anda memiliki Router dan Controller, maka Anda telah memperumitnya dan hanya menggunakan Router untuk meneruskan data ke Controller. Kontroler adalah Router, tetapi Router bukan Controller. Lihat di sini code.tutsplus.com/tutorials/mvc-for-noobs--net-10488
volume satu

Jawaban:

15

Router:

Routing adalah proses mengambil titik akhir URI (bagian URI yang muncul setelah URL dasar) dan menguraikannya menjadi parameter untuk menentukan modul, pengontrol, dan tindakan pengontrol mana yang harus menerima permintaan.

Pengendali:

Pengendali mengimplementasikan »pola Pengontrol, di mana semua permintaan dicegat oleh pengontrol dan dikirim ke Pengendali Aksi individu berdasarkan URL yang diminta (yaitu permintaan routing dari Router).

Sam T
sumber
4

Sebuah Frontend-Controller harus berkolaborasi dengan Router dan Dispatcher untuk memutuskan berdasarkan pada (HTTP) permintaan terhadap aplikasi yang konkrit Aksi harus dieksekusi dan kemudian mengirimnya.

Tergantung pada bagaimana rinci desain, beberapa Pengendali s bekerja tanpa Router s dan mereka melakukan routing mereka sendiri atau routing tersirat dalam desain bagaimana permintaan diproses.

Beberapa Dispatcher s juga lulus Permintaan objek ke diberangkatkan metode tindakan . Metode tindakan kemudian menguraikan sendiri permintaan sebagian sehingga bahkan tindakan pengontrol masih dapat melakukan beberapa routing berdasarkan permintaan. Contoh khas untuk ini adalah kasus ketika kerangka kerja menawarkan untuk melakukan redirect sebagai respons. Ini juga menunjukkan seberapa dekat atau dekat Router dan Controller .

Perbedaan yang biasanya digambarkan di sini adalah bahwa perutean menangani atau membantu mengidentifikasi metode tindakan mana yang harus dijalankan dan pengontrol kemudian bertanggung jawab untuk menyediakan tindakan ini tetapi keduanya menangani permintaan.

Seperti yang Anda lihat, perbedaan antara Router dan Controller dapat sangat bervariasi antara implementasi dan kerangka kerja. Pada akhirnya, aplikasi konkret memiliki kebutuhan apakah tingkat abstraksi tertentu berguna atau tidak.

Namun dari segi saya akan mengatakan bahwa Controller dalam peran yang lebih tinggi dalam aplikasi keseluruhan. Di sinilah tindakannya dikatakan.

hakre
sumber
3

Rute memetakan URL ke pengontrol, yang merupakan aksinya. Terkadang perannya tidak benar-benar dipisahkan dengan baik tergantung pada kerangka kerjanya.

Kevin
sumber
2

Router adalah bagian dari lapisan pengontrol. Mekanisme pemrosesan router adalah pengganti dari pola Front Controller sekolah lama (saklar besar di index.php).

Dalam kerangka kerja modern, router mendefinisikan koneksi langsung antara "jenis" permintaan yang mungkin dan prosesornya. Sebaliknya, pengontrol hanya mendapatkan informasi pengidentifikasi, dan mem-parsing data ini dalam konteksnya sendiri.

Dávid Horváth
sumber
0

Cukup sederhana, router melakukan perjalanan melalui aplikasi, biasanya didasarkan pada input eksternal seperti variabel GET atau POST.

Namun, Router tidak merupakan bagian dari MVC, beberapa kerangka kerja MVC dan HMVC menggunakan router, tetapi ini tidak mengikat mereka dengan pola MVC.

Selain itu beberapa implementasi awal MVC yang saya lihat sebenarnya bergantung pada pemisahan tindakan berbasis file dengan satu file per pengontrol untuk mengakses pengontrol terpisah. Ini melayani aplikasi jauh lebih baik, karena dengan memiliki pengendali kurus, dengan model yang lebih kuat, Anda tidak perlu menggulir ke metode tertentu dalam pengontrol, dan karena itu Anda dapat mengakses logika di satu tempat (model), memungkinkan Anda untuk menggabungkan perilaku.

MrMesees
sumber
-1

The router mengambil

permintaan

dan memutuskan metode pengontrol / pengontrol mana yang akan menangani permintaan.

Pengontrol menerima permintaan dan menanganinya!

Sekarang saya juga membuat pengontrol yang memisahkan url dan menggunakan bagian pertama setelah basis url sebagai pengontrol dan bagian kedua sebagai aksi. Ini memuat file yang sesuai dengan controller dan metode di dalam file yang sesuai dengan tindakan.

Ini bukan benar-benar controller (sejauh menyangkut MVC) itu adalah bagian dari routing.

Misalnya, ambil [GET] uri: example.com/article/view/123 Router MVC akan mengurai uri dan menemukan segmen berikut

tampilan artikel 123 Secara default sebagian besar router sekarang akan instantiate articleController dan memanggil metode tampilan lewat 123 sebagai parameter. (Anda juga dapat memiliki beberapa metode getUriSegment (segmentIdx), itu adalah pilihan desain untuk kerangka kerja Anda.)

ArticleController akan memiliki metode tampilan dengan parameter $ articleId. Metode ini mungkin akan melakukan sesuatu seperti: dapatkan artikel yang ditentukan (dari db melalui model misalnya) dan kemudian menampilkannya (mungkin dengan mengembalikan tampilan yang telah diberikan artikel yang dikembalikan oleh model

Siddarth Nyati
sumber