0

動的複合アクション、つまり複数の一致したパターンを組み合わせたアクション、または一致したパターンと静的テキストの組み合わせを使用して Zend ルートを作成する方法はありますか?

例:

uri -> desired action
/company/unique-product-code/overview -> product-overview
/company/unique-product-code/gallery -> product-gallery
/company/unique-product-code/... -> product-...

現在のコード (動作しません):

$regexp = new Zend_Controller_Router_Route_Regex(
    '^(company)/([a-z-]+)/([a-z-]+)/?',
    array(),
    array(1 => 'controller', 2 => 'productCode', 'product-3' => 'action')
);
4

2 に答える 2

1

あなたの質問に対するいくつかの答えが見つかりました。それはすべて、Zend Framework ソフトウェアをどのように構築したいかによると思います。

私の理解では、Company という管理者がいます。次に、productOverviewAction() などを含むさまざまなアクションがあります。

だから、ここにいくつかの「ほぼそこにある」解決策があります-そして、私はあなたの現在のジレンマを解決します. :)

最初の可能な答え

会社固有の情報については、コントローラー Company を使用することをお勧めします。おそらく、製品情報用の Product というコントローラーを作成します。次に、実際には /product/[unique-id]/overview のような URL に移動します。これに一致するルートは次のとおりです。

$route = new Zend_Controller_Router_Route(
    'product/:productCode/:action',
    array(
        'controller'=>'product'
    )
);

ご覧のとおり、正規表現でもないので、高速に実行できます。

2番目に考えられる答え

正規表現が必要な理由は、アクションが URL と一致せず、その一部で構成されているためです。ただし、Company::productOverviewAction() を Company::OverviewAction() に変更したとします。その後、次のルートを使用できます。

$route = new Zend_Controller_Router_Route(
    'company/:productCode/:action',
    array(
        'controller'=>'company'
    )
);

しかし、私はそれがあなたが尋ねたものと正確ではないことを知っています...

ほぼ正確な答え

ルーティング クラスを変更しなくても、次のルーターを使用できます。

$route = new Zend_Controller_Router_Route(
    'company/:productCode/:action',
    array(
        'controller'=>'company'
    )
);

そして、各アクションに向けられるため、CompanyController でアクションをプロキシできます。例えば:

public function overviewAction()
{
    return $this->productOverviewAction();
}

*注: 再発送しないように _forward() は使用しませんでした (そうなったと思います...)

頑張ってください!

于 2013-06-06T00:39:12.520 に答える
0

これが標準のルートクラスで可能だとは実際には思いません。ルーターを拡張するか、regexp ルート クラスを拡張するか、コントローラー プラグインを使用して一致したアクション名を操作することができます。しかし実際には、コントローラーのアクション名を URL のアクションと一致するように変更できれば、はるかに簡単になります。

于 2013-06-05T17:53:00.623 に答える