URL Routing and Object Routing
news_detail:
url: /news/:id/:slug.pvh
param: { module: news, action: detail }
options: { model: News, type: object }
class: sfDoctrineRoute
URL: http://phungvanhuy.net/news/6/tin-bai-s-6-t-thong-t-n-xa.pvh
Object: News (id = 6 AND slug = 'tin-bai-s-6-t-thong-t-n-xa')
Có 2 cách lấy object từ URL
1. Nếu trong action detail, ta lấy object từ URL qua routing
$this->news = $this->getRoute()->getObject();
Ưu điểm:
- Tự động, ta không lo đổi code khi thực hiện SEO thay đổi đường dẫn URL (bỏ id chẳng hạn, chỉ dùng slug - do tính chất unique)
Nhược điểm:
- Query nhiều câu: Nhiều relation với các object khác thì mỗi object liên quan lại query ra để lấy thông tin
Ưu hay nhược:
- Sai phần slug trong URL chỉ một ký tự là sẽ Object not found
2. Nếu ta luôn tống id vào URL và lấy object từ URL thông qua param id (khóa chính)
$newsId = $request->getParameter('id');
$this->news = Doctrine::getTable('News')->getNews($newsId);
Ưu điểm:
- Viết 1 query là được!
Nhược điểm
- Để join phải nắm được các bảng liên quan
Ưu hay nhược:
- Nhiều URL cùng thể hiện chung một object (đổi phần slug)
Bonus:
Khi ở trang show/detail/display thông tin một object, đừng quên bắt lỗi URL chả ứng với object nào
Hãy sử dụng chả hạn: $this->forward404If (!is_object($this->news));
Title:
Symfony: URL Routing and Object Routing
Description:
URL Routing and Object Routing news_detail: url: /news/:id/:slug.pvh param: { module: news, action: detail } options: { model: Ne...
...
Rating:
4