0

以下は、Zend Framework アプリに読み込まれる routes.xml です。2 つのルートがあり、1 つは URL/aanbod/tekoop/huisと一致し、もう 1 つは一致する必要があります。/aanbod/200/gerenoveerde-woning

問題は、これらのサンプル URL の両方が詳細アクションで終了するのに対し、最初の URL はインデックス アクションで終了する必要があることです。

このルーティング設定の何が問題なのか、誰でも明確にできますか?

<routes>

    <property_overview type="Zend_Controller_Router_Route">
        <route>/aanbod/:category/:type</route>
        <reqs category="(tekoop|tehuur)" />
        <reqs type="[A-Za-z0-9]+" />
        <defaults module="frontend" controller="property" action="index" />
    </property_overview>

    <property_detail type="Zend_Controller_Router_Route">
        <route>/aanbod/:propertyid/:slug</route>
        <reqs propertyid="[0-9]+" />
        <reqs slug="(^\s)+" />
        <defaults module="frontend" controller="property" action="detail" />
    </property_detail>

</routes>
4

2 に答える 2

2

代わりにこれを試してください:

<routes>

    <property_overview type="Zend_Controller_Router_Route">
        <route>aanbod/:category/:type</route>
        <reqs category="(tekoop|tehuur)" type="[A-Za-z0-9]+" />
        <defaults module="frontend" controller="property" action="index" />
    </property_overview>

    <property_detail type="Zend_Controller_Router_Route">
        <route>aanbod/:propertyid/:slug</route>
        <reqs propertyid="[0-9]+" slug="[^\s]+" />
        <defaults module="frontend" controller="property" action="detail" />
    </property_detail>

</routes>

私が変更したこと:

  • 「reqs」要素は 1 つだけにする必要があります。さまざまな要件をこの属性として追加します。これが、ルートが機能しなかった主な理由です。各ルートで 1 つの要求のみが使用されていたためです。
  • 最初のスラッシュを削除します - これは何の役にも立ちません
  • [^\s]+「スペース以外の任意の文字を 1 回以上」を意味するスラッグ パターンを変更しました。これがあなたの意図したものだと思います。
于 2011-08-17T14:23:23.753 に答える
1

reqsこのパラメータを使用して、のルートを特定することはできないと思いますZend_Controller_Router_Route。あなたの場合、ルートは同一であり、ルートスタックはLIFOであるため、「詳細」ルートが優先されます。

おそらくZend_Controller_Router_Route_Regex代わりに使用してみてください。

正規表現ルーターの構成方法を見つけるのに苦労していますが、コードでは次のようになります

$route = new Zend_Controller_Router_Route_Regex(
    'aanbod/(tekoop|tehuur)/([A-Za-z0-9]+)',
    array('controller' => 'property', 'action' => 'index', 'module' => 'frontend'),
    array(1 => 'category', 2 => 'type')
);

$route = new Zend_Controller_Router_Route_Regex(
    'aanbod/(\d+)/(\S+)',
    array('controller' => 'property', 'action' => 'detail', 'module' => 'frontend'),
    array(1 => 'propertyid', 2 => 'slug')
);
于 2011-08-17T13:33:18.647 に答える