2012-06-14 30 views
13

Theo quan điểm của tôi, tôi cần vẽ URL đầy đủ. Như thế này:ZF2: Zend Framework 2 URL đầy đủ bao gồm tên máy chủ

http://hostename.com/default/url 

Khi tôi cố gắng sử dụng $this->url('default', array(1,2,3)) Tôi chỉ /index/get/ nhận được. Có phương pháp Zend nào để đặt tên máy chủ hay tôi phải sử dụng $_SERVER['HTTP_HOST'] để thay thế?

Trả lời

13

Có một Zend \ View \ Helper \ ServerUrl để tạo url đầy đủ trong chế độ xem dạng xem. Thử mã dưới đây trong mẫu xem của bạn.

<?php echo $this->serverUrl()?> 
+3

Câu hỏi đặt ra là về tạo url đầy đủ trong giao diện. Nhưng nếu ai đó nhận được ở đây tìm kiếm làm thế nào để làm điều đó trong bộ điều khiển, đây là: '$ this-> getRequest() -> getServer ('HTTP_HOST'). $ this-> url() -> fromRoute ('carrinho/compra-efetuada') ' – vinigarcia87

42

Bạn có thể sử dụng tùy chọn force_canonical trên bộ định tuyến. Tất cả các tùy chọn định tuyến đi vào tham số thứ ba của helper url:

url($route, $params, $options) 

Vì vậy, bạn có thể để một cái gì đó như thế này:

$this->url('myroute', array('id' => 123), array('force_canonical' => true)) 
+0

Chức năng này không được tham chiếu ở bất kỳ đâu trong tài liệu và tôi nghĩ nó khá phổ biến. Bạn có biết cách ép buộc sử dụng https chẳng hạn? Tôi đã có thể mong đợi để sử dụng một cái gì đó như 'scheme' => 'https' như một tham số hoặc tùy chọn nhưng nó không có vẻ là dễ dàng –

+0

@DominicWatson Tôi không chắc chắn nếu có một tùy chọn để thiết lập chương trình. Tôi tạo url https bằng cách sử dụng Zend \ Url \ Http như ví dụ sau: http://stackoverflow.com/questions/20122535/how-to-forced-https-instead-of-http-after-user-login-in- zend-framework2/20125800 # 20125800 –

22

tôi thấy article này với một số cách thú vị:

1) không có thông số sử dụng một mảng trống:

// Using a route with the name "register" and the route "/register" 
echo $this->url('register', array(), array('force_canonical' => true)); 
// Output: http://mydomain.com/register 

2) lưu ý sự khác nhau giữa:

echo $this->serverUrl(); 
// Output: http://mydomain.com 

// Current URL: http://mydomain.com/register 
echo $this->serverUrl(true); 
// Output: http://mydomain.com/register 

3) bắt đầu từ con đường

// The "register" route has the following route: /register 
echo $this->serverUrl($this->url('register')); 
// Output: http://mydomain.com/register 
+0

cảm ơn bạn fr theo cách thứ 3 – Athlan

0

Nếu bạn muốn thiết lập URL cơ sở trên toàn cầu, bạn có thể làm điều đó bằng phương pháp onBootstrap:

$e->getApplication()->getMvcEvent()->getRouter()->setBaseUrl($baseUrl); 

Trong trường hợp này, Trình trợ giúp điều hướng cũng sẽ sử dụng nó.

Để lấy hiện tại URL cơ sở sử dụng ServerUrl helper như mô tả in this thread:

$serverUrl = $e->getApplication()->getServiceManager()->get('ViewHelperManager')->get('ServerUrl'); 
$baseUrl = $serverUrl->__invoke(); 
+0

"$ serverUrl -> __ invoke();" ?? Không phải là "__invoke()" được tạo để có thể chạy nó dưới dạng "$ serverUrl()"? – Zippp

Các vấn đề liên quan