2011-07-30 7 views
0

私はYiiのr1.8にCustom URL Rule Classesを活用しようとしていますYiiはカスタムURLのルール・クラスを使用してr1.8

私は表示代わりにORGS /ビュー/ 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', 
), 
+0

あなたがここでやりたいことは完全にはっきりしていません。顧客がorgs/view/id/24のURLを入力していて、彼をjaysshopにリダイレクトしたいのですか?またはあなたのコード内からURLを表示しようとしていますか?私はあなたがcreateUrl関数について間違った考えを持っているかもしれないと思います。これは、サイトのどこかでcreateUrl機能を使用するときに使用されます。実際にページビューを取得して、URLを「翻訳」したい場合は、代わりにparseUrl関数が必要です。 – Blizz

+0

@Blizz私はあなたが言っていることを理解していますが、Yii r1.8(上にリンクされています)のこの新しい機能により、URLリライトを処理するurlManagerが表示されています。あなたがwww.mysite.com/events/indexの代わりにwww.mysite.com/eventsと入力するようにするには、urlMangerの 'events' => 'events/index'のように使用できます。私が読んでいるように、カスタムURLルールクラスは、より広範で細かいスケールで同じことをすることができます。 – enfield

+0

@Blizzこのフォーラムの質問では、[ユーザー名付きのURLが必要です、facebookに似ています](http://www.yiiframework.com/forum/index.php?/topic/10829-need-of-url-with-usernameame私は変数を使って何をしたいのかを考え出したが、これはYii r1.8の追加機能のリリース前であって、理解して使用しようとしている。 – enfield

答えて

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 
} 

ちょっとあなたに役立つ希望。

+0

@ Blizz、入力いただきありがとうございます。私はこれを明日取り入れようとします。 – enfield

関連する問題