Có cách nào tốt nhất để tạo URL tuyệt đối bằng khung công tác Zend không? Tôi tự hỏi nếu có một số helper hoặc nếu điều này sẽ chỉ được ghép nối các chương trình, máy chủ, vv từ biến $ _SERVER và sau đó thêm đường dẫn tương đối được tạo ra bởi Zend.Thực tiễn tốt nhất để tạo URL tuyệt đối với khung công tác Zend?
Trả lời
phpfour là OK, nhưng bạn phải kiểm tra các địa chỉ https: //, ftp: // và mailto: quá ... :)
tôi prefefer có tất cả các url gốc tuyệt đối (/files/js/jquery.js
). Các "zend cách hardcore" là
<?php
// document root for example.com is in /htdocs
// but application's index.php resides in /htdocs/myapp/public
echo $this->baseUrl('css/base.css');
//will return /myapp/public/css/base.css
echo $this->serverUrl() . $this->baseUrl('css/base.css');
//will return http://www.example.com/myapp/public/css/base.css
echo '//' . $this->getHelper('ServerUrl')->getHost() . $this->baseUrl('css/base.css');
//will return protocol relative URL //www.example.com/myapp/public/css/base.css
Tôi sẽ không sử dụng $ _SERVER, tôi sẽ sử dụng các giá trị từ Zend_Controller_Request_Http::getServer($keyName);
(hoặc getters trực tiếp trên đối tượng yêu cầu khi áp dụng - tôi quên cái nào là thành viên trực tiếp của đối tượng và đối tượng nào cần truy cập bằng getServer) . Về mặt kỹ thuật, đây là những giá trị giống nhau, nhưng IMO truy cập tốt hơn theo cách Zend hơn là sử dụng truy cập PHP nguyên. Nhưng hãy đánh cược những người cùng nhau sẽ giúp bạn có được những gì bạn cần. Điều này thực sự là cách tôi đã làm nó cho một trình điều khiển SSL plugin/url helper.
Có thể có một cách tốt hơn mặc dù ...
Trong các ứng dụng của tôi, tôi giữ một "baseUrl" trong cấu hình ứng dụng của tôi và tôi gán mà phải đăng kiểm trên bootstrapping. Sau đó, tôi sử dụng Trình trợ giúp chế độ xem sau để tạo URL:
<?php
class Zend_View_Helper_UrlMap
{
public function UrlMap($original)
{
$newUrl = $original;
$baseUrl = Zend_Registry::get('baseUrl');
if (strpos($newUrl, "http://") === false) {
$newUrl = $baseUrl . $newUrl;
}
return $newUrl;
}
}
Lợi ích: Tôi có thể thay đổi tất cả URL trong chế độ xem từ một nơi.
Hy vọng điều này sẽ hữu ích. cách
'Zend_Registry' là khá cần thiết. Một cách tiếp cận tốt hơn nhiều sẽ sử dụng 'Zend_Controller_Front :: setBaseUrl()' và 'Zend_Controller_Front :: getBaseUrl()'. Bằng cách đó, bạn cũng có thể sử dụng trình trợ giúp xem được bao gồm, do đó bạn không phải cuộn của riêng bạn. –
Without MVC
echo $this->serverUrl() . $this->baseUrl('cass/base.css');
hoặc với MVC
echo $this->serverUrl() . $this->url(array('controller'=>'index','action'=>'index'),null,true);
Sử dụng phương pháp dưới đây.
<a href="<?php echo $this->url('application', ['action' => 'detail'], ['force_canonical' => true])?>">
+1, tốt nhất là sử dụng phương pháp chuẩn 99% thời gian - Zend Framework đã bao gồm điều này cho bạn. Nếu bạn cần thay đổi cơ sở URL theo cách thủ công, bạn cũng có thể tự đặt nó trong bản bootstrap. –
echo $ this-> serverUrl(). $ this-> baseUrl ('cassbase.css'); (điều này là tuyệt đối bằng cách sử dụng trợ giúp xem zend serverurl) –
$ this-> baseUrl trả về một URL liên quan đến thư mục gốc của máy chủ web như đã nêu ở đây: http://framework.zend.com/manual/en/zend.view.helpers .html # zend.view.helpers.initial.baseurl, TMHO câu trả lời này là sai. – AsTeR