可變參數的網址(URLs with variable number of parameters)

許多時候,我們需要從網址取得的不同數目的參數。舉例來說,從網址http://example.com/products/cars/sport裡面,我們可能希望會進入ProductController::actionCategory,並得到包含carssport的陣列。

1. 準備

首先,我們要啟用 pretty URLs。首先我們在 config 檔裡面加入:

$config = [
    // ...
    'components' => [
        // ...
        'urlManager' => [
            'showScriptName' => false,
            'enablePrettyUrl' => true,
            'rules' => require 'urls.php',
        ],
    ]

注意這邊,我們在rule使用分開的 PHP 檔案,而不是直接寫在config檔案裡面。這在程式成長的時候會很有幫助。

然後在config/urls.php裡面,加上以下規則:

<?php
return [
    [
        'pattern' => 'products/<categories:.*>',
        'route' => 'product/category',
        'encodeParams' => false,
    ],
];

現在建立ProductController

namespace app\controllers;

use yii\web\Controller;

class ProductController extends Controller
{
    public function actionCategory($categories)
    {
        $params = explode('/', $categories);
        print_r($params);
    }
}

好了,如果現在你進入http://example.com/products/cars/sport,你會得到:

Array ( [0] => cars [1] => sport)

results matching ""

    No results matching ""