3

Zend でルート正規表現パラメータをオプションにする方法は?

検索フィルター用に適切にフォーマットされた URL (「search/index/s/mp/t/w」ではなく「search?s=mp&t=w」) を作成しようとしています。:

人気

  • 最も人気のある (s=mp)
  • 最も閲覧された (s=mv、デフォルト)
  • 最高評価 (s=tr)
  • 最もコメントされた (s=mc)

限目

  • 全期間 (t=a、デフォルト)
  • 今日 (t=d)
  • 今週 (t=w)
  • 今月 (t=m)

したがって、今日からすべての最高評価のアイテムを取得するには、次のようにします: search?s=tr&t=d

正規表現ルートでは、デフォルト値を指定する必要があります。問題は、URL ビュー ヘルパーが現在の値ではなくデフォルト値でリンクを生成することです。

これが私のルートです:

resources.router.routes.search.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.search.route = "search\?s\=(.+)\&t\=(.+)"
resources.router.routes.search.map.1 = s
resources.router.routes.search.map.2 = t
resources.router.routes.search.defaults.module = front
resources.router.routes.search.defaults.controller = search
resources.router.routes.search.defaults.action = index
resources.router.routes.search.defaults.s = mv
resources.router.routes.search.defaults.t = a
resources.router.routes.search.reverse = "search?s=%s&t=%s"

およびリンク:

<div class="filters note">
    <div class="filters-content">
        <h3>Popularity</h3>
        <ul class="filters-list">
            <li>
                <a href="<?=$this->url(array('s' => 'mp'), 'search')?>">
                    Most popular
                </a>
            </li>
            <li>
                <a href="<?=$this->url(array('s' => 'mv'), 'search')?>">
                    Most viewed
                </a>
            </li>
            <li>
                <a href="<?=$this->url(array('s' => 'tr'), 'search')?>">
                    Top rated
                </a>
            </li>
            <li>
                <a href="<?=$this->url(array('s' => 'mc'), 'search')?>">
                    Most commented
                </a>
            </li>
        </ul>
    </div>
</div>
<div class="filters period">
    <div class="filters-content">
        <h3>Period</h3>
        <ul class="filters-list">
            <li>
                <a href="<?=$this->url(array('t' => 'a'), 'search')?>">
                    All period
                </a>
            </li>
            <li>
                <a href="<?=$this->url(array('t' => 'd'), 'search')?>">
                    Today
                </a>
            </li>
            <li>
                <a href="<?=$this->url(array('t' => 'w'), 'search')?>">
                    This week
                </a>
            </li>
            <li>
                <a href="<?=$this->url(array('t' => 'm'), 'search')?>">
                    This month
                </a>
            </li>
        </ul>
    </div>
</div>

たとえば、現在のページが「search?s=tr&t=d」「今週」をクリックすると、リンクは「search?s=tr&t= w」ではなく「search?s=mv&t=w」になります。デフォルト値の。

デフォルト値を指定しないとエラーが発生します。

何か案が ?

ありがとう、ベンジャミン。

4

2 に答える 2

0

正規表現ルートは使用していませんが、このエラーが発生しました。基本的に、defaults.[param]部品には値が必要です。私はカスタム ルートを空に設定しています。

; Navigation ID Route (uses navigation id)
resources.router.routes.nav.route = "p/:id/:title/*"
resources.router.routes.nav.defaults.module = "default"
resources.router.routes.nav.defaults.controller = "index"
resources.router.routes.nav.defaults.action = "index"
resources.router.routes.nav.defaults.id = 
resources.router.routes.nav.defaults.title = 
resources.router.routes.nav.reqs.id = "\d+"
resources.router.routes.nav.reqs.title = ".*"
于 2010-06-03T18:53:43.137 に答える
0

あなたは本当にこのようにしたいですか?何度か「フレームワークと戦う」ことを試みましたが、フレームワークの方が優れていることがわかりました (にやにや笑い)。別の方法を提案できますか?(Google の方が気に入るかもしれません: URL がより「人に優しい」ものになります)。次のような URL を使用します。

/top-rated-widgets/today
/most-viewed-widgets/this-month
/most-commented-widgets 

「ウィジェット」を、「ビデオ」、「ブログ投稿」、「一輪車」など、サイトに関するものに置き換えます。

次に、上記の各ルートを検索コントローラーに

于 2010-08-07T08:34:58.090 に答える