Rewrite Url bằng Zend Router (Zend_Controller_Router_Route_Regex)
Zend Router là một lớp giúp chúng ta có thể rewrite đường dẫn của các ứng dụng Zend Framework mà không phải biết quá nhiều về htaccess. Trong phần này ZendVN gửi đến bạn một ví dụ đơn giản qua cách sử dụng class Zend_Controller_Router_Route_Regex
URL ban đầu:
http ://abc.com/tintuc/chitiet/id/1/title/lap-trinh-web-chuyen-nghiep
Tương đương với:
Array
(
[id] => 1
[title] => lap-trinhh-web-chuyen-nghiep
[module] => default
[controller] => tintuc
[action] => chitiet
)
URL sau khi rewrite:
http://abc.com/tintuc/chitiet/1-lap-trinhh-web-chuyen-nghiep.html
Bước 1: download cấu hình ứng dụng một module tại
http://www.zend.vn/download/zend-framework/zftutorial.rar
Bước 2: Tạo TintucController và chitietAction() trong tập /application/controllers/TintucController.php có nội dung như sau:
<?php
class TintucController extends Zend_Controller_Action{
public function chitietAction(){
echo '<pre>';
print_r($this->_request->getParams());
echo '</pre>';
$this->_helper->viewRenderer->setNoRender();
}
}
Bước 3: Tạo tập tin cấu hình routers.ini trong thư mục /application/configs/ với nội dung
[thietlap] routes.tintuc.type = "Zend_Controller_Router_Route_Regex" routes.tintuc.route = "tintuc/chitiet/(d+)-(.*).html" routes.tintuc.defaults.module = "default" routes.tintuc.defaults.controller = "tintuc" routes.tintuc.defaults.action = "chitiet" routes.tintuc.map.1 = "id" routes.tintuc.map.2 = "title"
Bước 4: Load router vào front controller. Mở tập tin Bootstrap.php trong thư mục /application thêm vào nội dung:
protected function _initFrontController(){
$front = Zend_Controller_Front::getInstance();
$front->addControllerDirectory(APPLICATION_PATH . "/controllers");
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routers.ini', 'thietlap');
$router = new Zend_Controller_Router_Rewrite();
$router = $router->addConfig($config, 'routes');
$front->setRouter($router);
return $front;
}
Bước 5: Chạy thử 2 đường dẫn
URL 1: http ://abc.com/tintuc/chitiet/id/1/title/lap-trinh-web-chuyen-nghiep URL 2: http://abc.com/tintuc/chitiet/1-lap-trinhh-web-chuyen-nghiep.html
bởi nhantam
Ngày 16/02/2012 vào lúc 14:54:54bởi Đặng Xuân Trường
Ngày 04/03/2012 vào lúc 22:53:11Anh ơi giờ em muốn bỏ số 1 có được không anh
sửa thành
http://abc.com/tintuc/chitiet/lap-trinhh-web-chuyen-nghiep.html
Anh chỉ dùng em
bởi Titanic
Ngày 04/03/2012 vào lúc 23:23:42
bởi thanhlong1705
Ngày 05/03/2012 vào lúc 13:47:10bởi honhatthuc
Ngày 08/03/2012 vào lúc 08:38:53thanhlong1705 . Bạn co thể gửi mình bài hoàn chỉnh cái Tur ở trên đc ko . Đc thì mình cảm ơn nhiều . mail của mình là : hnthuc1990@gmai.com
bởi Thức
Ngày 08/03/2012 vào lúc 09:47:43Bạn cho mình hỏi làm sao để thiết lập trên toàn bộ các Controller của mình thay vì chỉ trong 1 TintucController .
còn 2 dòng này mình chưa hiểu lắm :
routes.tintuc.map.1 = "id"
routes.tintuc.map.2 = "title"
THeo minh hiểu là 2 cái này nó là tên biến của tham số trên Url phải ko ?

bởi thanhlong1705
Ngày 08/03/2012 vào lúc 14:16:02map.1, map.2 là lấy các tham số từ url truyền xuống bạn ak.
bởi Thức
Ngày 08/03/2012 vào lúc 15:02:03URL 2: http://abc.com/tintuc/chitiet/1-lap-trinhh-web-chuyen-nghiep.html
Ở Url 1 : thì mình echo $this->_request->getParam('id') thì mình sẽ lấy dc giá trị trên Url của id là 1 và title cũng vậy cái này thì ko có gì phải nói cả .
Còn ở Url 2 : thì mình ko thấy cái tham số đâu để lấy . Nếu viết :
URL 2: http://abc.com/tintuc/chitiet
thì kết quả tương đương vậy thì có khác nhau gì đâu ?

bởi thanhlong1705
Ngày 08/03/2012 vào lúc 15:22:20thì kết quả tương đương vậy thì có khác nhau gì đâu ?
Vấn đề này là do bạn đã set id,title vào map,1 và map.2 rồi đó nên kết quả ko thay đổi là vậy
bởi ho
Ngày 08/03/2012 vào lúc 15:54:56bởi Kas
Ngày 14/04/2012 vào lúc 00:13:11Bạn cho mình hỏi chút, giờ mình muốn thay đổi một chút như thế này :
[thietlap]
routes.tintuc.type = "Zend_Controller_Router_Route_Regex"
routes.tintuc.route = "tintuc/chitiet/(d+)-(.*).html"
routes.tintuc.defaults.module = "default"
routes.tintuc.defaults.controller = "news"
routes.tintuc.defaults.action = "detail"
routes.tintuc.map.1 = "id"
routes.tintuc.map.2 = "title"
Nhưng khi mình thay đổi như vậy thì nó ko chạy. Vậy mình phải làm sao để set được controller news và action detail với đường dẫn như trên.
Thanks!
bởi Phạm Văn Bình
Ngày 07/05/2012 vào lúc 14:33:40bởi Mr.L
Ngày 07/05/2012 vào lúc 17:44:16bởi Phạm Văn Bình
Ngày 08/05/2012 vào lúc 14:17:03- 1.cám ơn thầy nhiều.
- 2.Hướng dẫn rất chất lượng. Đã hướng dẫn ít ra phải như thế này dân mù tịt như em mới rõ ngọn rõ...
- 3.Tiếng Anh thì >>thông cãm
- 4.fafa
- 5.Mình đã fix được rồi. Thanks bạn nhiều lắm !
- 6.Dịch vụ quá nguy hiểm... Giờ mới biết Vinaphone có cái dịch vụ "Giết người" này. Nếu biết từ trước...
- 7.cung hay day nhi...
- 8.NGƯỜI TA ĐÃ TỰ BIẾT DỊP TẾT LÀ HAY NGHẼN MẠNG VẬY NHÀ MẠNG LÀM NHƯ THẾ NÀY LÀ CƯỚP KHUYẾN MẠI CỦA...
- 9.Nhóm cuối cùng có lẽ là đáng ngạc nhiên, hoặc có lẽ hoàn toàn rõ ràng - đó là chính phủ. Một câu hỏi...
- 10.Nhóm cuối cùng có lẽ là đáng ngạc nhiên, hoặc có lẽ hoàn toàn rõ ràng - đó là chính phủ. Một câu hỏi...
- 1.Cài đặt và cấu hình ứng dụng Zend Framework (video...
- 2.Lập trình hướng đối tượng trong PHP (video...
- 3.Lập trình hướng đối tượng trong PHP 5 ( PHP OOP )
- 4.Zend Auth với ví dụ login - logout
- 5.Tài liệu Zend Framework
- 6.Hàm xử lý ngày tháng (Date and Time php function)
- 7.Webserver - Hướng dẫn cài đặt và sử dụng Xampp
- 8.Zend_Db - Những phương thức cơ bản
- 9.Các kiểu lập trình trong PHP (Phần 1)
- 10. Zend_Framework & JQuery ajax phân trang
- xin code bat dong san bang php zend framework
- Help help help
- hướng dẫn tối ưu url bằng file htaccess
- mã hóa khó hiểu
- Tuyển 05 Lập Trình Viên PHP
- confix phpmailer host linux
- Học.Viên.Mới.Xin.Giúp.Đỡ!!!!
- Cho mình về validate số điện thoại
- Hướng dẫn sử dụng lệnh YUM trong Linux
- Bị loop khi dùng session





bởi Nguyễn Thị Kiều Tâm
Ngày 23/12/2011 vào lúc 15:51:33