2012-02-22 12 views
5

Có một số phương pháp Zend thích hợp cho:Zend Framework: có được con đường nào, có được url ứng dụng

a) nhận đường dẫn đến thư mục/công

b) nhận được đơn url

Thật sự tôi sử dụng các phương thức được định nghĩa trong Controller, nhưng nó cảm thấy đúng khi sử dụng các phương thức đã sẵn sàng nếu chúng thoát ra.

protected function _getApplicationUrl() { 
    return $_SERVER['SERVER_NAME']; 
} 

protected function _getPublicPath() { 
    return realpath(APPLICATION_PATH . '/../public/'); 
} 

Trả lời

6

Về URL ứng dụng, Zend_Controller_Request_Http có một phương pháp getRequestUri(), nhưng nó cố tình (và hơi phiền) không bao gồm các chương trình và hostname các phần của URL. Trong các ứng dụng của tôi, tôi đã sử dụng để lấy $_SERVER['HTTP_HOST'] trong bootstrap và lưu trữ nó trong sổ đăng ký để sau này tôi có thể sử dụng nó khi xây dựng các URL đầy đủ.

Và từ bộ nhớ, không, không có bất kỳ phương pháp tích hợp nào để có được vị trí của thư mục public, nhưng mã bạn có là tốt. Hầu hết các ứng dụng tôi đã nhìn thấy define() tất cả các đường dẫn trong index.php, mà tôi cho là an toàn hơn một chút (chỉ vì tên đường dẫn được đặt sớm hơn và trở nên tuyệt đối bất biến) và nhanh hơn một chút, nhưng không cho phép tham gia vào cuộc tranh luận về tối ưu hóa vi mô ! :-)

3

1) Nếu máy chủ ảo của bạn trỏ tới ZF/công cộng thì trong Chế độ xem bạn có thể nhận đường dẫn theo phương thức trợ giúp $this->baseUrl(); Trong bộ điều khiển $this->view->baseUrl(); Nếu không, hãy tạo trình trợ giúp của riêng bạn và sử dụng nó. 2) Trong điều khiển $this->getRequest()->getHttpHost();

+0

Upvote cho '$ this-> getRequest() -> getHttpHost();'! – HPM

+0

Lớp học được bao gồm để sử dụng 'getHTTPPost()' là gì? – Kuttoozz

0
protected function _getPublicPath() { 
    chdir(APPLICATION_PATH); 
    return realpath("../public"); 
} 
1

a) nhận đường dẫn đến thư mục/công

Built-in php chức năng getcwd() sẽ cung cấp cho bạn đường dẫn đến thư mục trang web lưu trữ của mình (ví dụ. đầu ra "/home/my_cp/public_html/my_site.loc/www"). Và sau đó, bạn có thể xây dựng bất kỳ con đường nào bạn muốn.