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
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
Jawaban:
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).
sumber
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.
sumber
Rute memetakan URL ke pengontrol, yang merupakan aksinya. Terkadang perannya tidak benar-benar dipisahkan dengan baik tergantung pada kerangka kerjanya.
sumber
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.
sumber
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.
sumber
The router mengambil
permintaan
dan memutuskan metode pengontrol / pengontrol mana yang akan menangani permintaan.
Pengontrol menerima permintaan dan menanganinya!
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
sumber