0

ショップはモジュール、製品はコントローラーです。私のリンクには、商品の名前である item という追加のパラメーターがあります。リンクをクリックすると、目的の URL が生成されないか、ページが表示されません。

私はいくつかの方法を試しました。

'shop/product/view/<id:\d+>/<item:\w+>'=>'<item>',これにより、shop/product/view/6?item=name が得られます

'<module:(shop)>/<controller:(product)>/<action:(view)>/<id:\d+>/<item:\w+>'=>'<item:\w+>'これは私に上記と同じことを与えます

shop/product/view/id/<id:\d+>/item/<item:\w+>'>=>'shop/<item:\w+>'、これによりエラーページが表示されますUnable to resolve the request "shop/name"

独自の拡張 curlmanager を作成しようとしましたが、失敗しました。それは私に同じ url.shop/product/view/6?item=name を与えます

class UrlManager extends CUrlManager
{
    public $connectionID = 'db';

    public function createUrl($manager,$route,$params,$ampersand)
    {
     if ($route == 'shop/product/view'){
            $product = Product::model()->findByPk($params['id']);
            $url=$product->product_name;
            return Yii::app()->createUrl(trim($url,'+'),$params,$ampersand);
    }

アップデート:

'urlManager'=>array(
                'urlFormat'=>'path',
                'showScriptName'=>false,
                'rules'=>array(
                            'shop/product/view/id/<id:\d+>/item/<item:\w+>'=>'<item>',              
//'category'=>array('site/category', 'caseSensitive'=>false),      

//'shop'=>array('shop/product/view','caseSensitive'=>false),
//'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<module>/<controller>/<action>',
//'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>',
// '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
// 'reset/<id:\d+>/<item:\w+>'=>array('site/reset/id', 'caseSensitive'=>false),      
                 ),
         ),
4

1 に答える 1

0

shop/<item:\w+>コントローラー/アクションと同じに見えるので、他のルールによって上書きされると思います。すべてのルールを投稿して、すべてを確認できますか?

また、このルールを rules 配列の先頭に配置してみてください。これにより、他のルールよりも優先されるはずです。

于 2014-06-20T01:44:15.647 に答える