Để lấy Url của các Route trong ứng dụng ZF tìm hiểu hai công cụ:

  • Url plugin: được gọi từ Controller
  • Url helper: được gọi từ View

Các sử dụng (cú pháp) Url plugin và Url helper là giống nhau

Cú pháp lấy URL của Route

Cú pháp lấy Url từ controller:

$url = $this->plugin('url')->fromRoute('route-name', $params = [], $options = [], $reuseMatchedParams = false);
//hoặc
$url = $this->url()->fromRoute('route-name', $params = [], $options = [], $reuseMatchedParams = false);

Cú pháp lấy Url từ View

$url = $this->url('route-name', $params = [], $options = [], $reuseMatchedParams = false);

Giải thích các tham số trong Url plugin và helper

route-name

Là tên của Route bạn định nghĩa trong các Module của ứng dụng. Ví dụ 'product' như ví dụ ở dưới.

$params

Dữ liệu dạng mảng (nếu có), đây chính là mảng tham số chính xác với định nghĩa của Route.

Ví dụ config của module bạn định nghĩa Route như sau:

'product' => array(
            'type'    => 'Segment',
            'options' => array(
                'route'    => '/product/:action/:id/',
                'defaults' => array(
                    'controller'    => 'mycontroller',
                    'action'        => 'detail',
                ) 
            ),
  ),

Ta thấy Route có thể có 2 tham số là action và id, vậy params cho Url có thể là:

array('action'=>'delete','id'=>1000)

$options

Option là một mảng (có thể không có - null) chứa các thiết lập thêm. Nó có thể có các tham số định nghĩa trong mảng:

Địa chỉ URL tương đối, tuyệt đối

array('force_canonical' => true,)

Mặc định Url plugin - helper trả về Url tương đối (/url), bằng cách  có thêm force_canonical là true vào thì nó trả về địa chỉ tuyệt đối (gồm cả host - dạng http://mydomain.com/url)

Thêm fragment:  (/url#fragment)

array('fragment' => 'comments',)

Thêm query vào Url

Ví dụ: /url?page=10&perpage=200

array(
        'query' => array(
            'page' => 10,
            'perpage'=>200  
        ),
)

$reuseMatchedParams

Nếu tham số này là True thì Url sẽ phân tích Url hiện đang truy vấn (url mà controler được gọi) và lấy các tham số của URL điền vào các tham số còn thiếu của Plugin, Helper

Ví dụ bạn đang truy cập  /news/details/777

<a href="<?php echo $this->url('news', array('action' => 'edit'), null, true); ?>">Edit Me</a>

Thì nó trả về:

<a href="/news/edit/777">Edit Me</a>

(nó tự lấy 777 là tham số ID vì cùng Route)