1

私は Yii を初めて使用し、URL で API バージョンを管理するために parseUrl を実装しようとしています。/api/1.0/... をコントローラー apiV1.0 にリダイレクトしたいと思います。

Main.php (urlManager ルール):

...
array('class' => 'application.components.ApiVersion'),
...

ApiVersion.php:

<?php
    class ApiVersion extends CBaseUrlRule
    {
    public $connectionID = 'db';

    public function createUrl($manager,$route,$params,$ampersand)
    {
        if ($route==='car/index')
        {
            if (isset($params['manufacturer'], $params['model']))
                return $params['manufacturer'] . '/' . $params['model'];
            else if (isset($params['manufacturer']))
                return $params['manufacturer'];
        }
        return false;  // this rule does not apply
    }

    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
    {
        if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches))
           $url =  $match[1] .  $match[2]; // BUILD YOUR URL (controllerName/actionName)
           $this->redirect(array($url));
        }
        return false;
    }
}

私はそれがどのように機能するかについて非常に迷っています。誰かが私を助けることができますか?

4

1 に答える 1

1

あなたの関数では、正規表現はパスが「api/num_of_version/your_model/an_id」のようなものかどうかをチェックします

したがって、URL がこれと一致している場合は、条件にある場合、取得値を設定する必要があります。

$_GET['apiversion'] = $matches[2];
$_GET['model'] = $matches[4];
$_GET['id'] = $matches[6];

バージョンによっては、適切なコントローラーを返します。

return "apiV" . $_GET['apiversion'] . "/view";

理解する必要があるいくつかのリンク:

編集:あなたが何か問題を抱えている特定のポイントがある場合は、今私に聞かせてください。この点に関する私の答えをもう少し詳しく説明しようとします。

于 2012-10-26T08:03:50.357 に答える