Yii r1.8使用自定义URL规则类

时间:2011-07-30 22:35:13

标签: php yii

我正在尝试利用Yii r1.8中的Custom URL Rule Classes

我正在尝试使用看起来像orgs / view / id / 24的内容,而是显示db中由Name标识的组织名称(即更改www.mysite.com/orgs/view/id/24)动态地访问www.mysite.com/jaysshop)。不幸的是,我没有让它发挥作用。

这是我的代码:

class OrgsUrlRule extends CBaseUrlRule
{
    public $connectionID = 'db';

    public function createUrl($manager,$route,$params,$ampersand)
    {
        if ($route==='orgs/view/id')  //even tried 'orgs/view' or 'orgs/index'
        {
            if (isset($params['Name']))
                return $params['Name'];
            else if (isset($params['Name']))
                return $params['Name'];
        }
        return false;  
    }

    public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
    {
        if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches))
        {
        }
        return false;  
    }
}

urlManager:

array(
  'class' => 'application.components.OrgsUrlRule',
  'connectionID' => 'db',
),

1 个答案:

答案 0 :(得分:2)

我假设你想从URL触发你的控制器/动作来获取商店的名称,我给你这个例子

例如:

public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
{
   $aParts = explode('/', $pathInfo);
   if (count($aParts) == 1) // It's only 1 piece, so a possible "shop name"
   {
      if (isAValidNameForAShop($aParts[0]))
      {
         $_REQUEST['id'] = $aParts[0]; // Store it to retrieve it in the controller
         return 'orgs/view';
      }
   }
   return FALSE; // Seems like something else, we don't apply
 }

希望能帮到你。