0

私は現在、自分のプロジェクトで Zend を使用しています。このプロジェクトにはカテゴリがありました。通常、URL を Zend ルートで書き換えて、自分のページに次のようにアクセスできるようにします: http://site.ext/category/[category-name]/. しかし、SEO の目的で、ルート レベルの URL を作成したいと考えています。つまり、http://site.ext/[カテゴリ名]/ です。

もちろん、Zend は [category-name] という名前のコントローラーを見つけようとします。この問題を回避する最善の方法は何ですか? 「フォールバックコントローラー」のようなものを考えました。ページが見つからない場合は、コールバック コントローラにリクエストを処理させ、カテゴリが存在するかどうかを確認します。そうでない場合: エラー コントローラに進みます。

これが最善の解決策でしょうか? また、私の仲間のプログラマーの意見は?

よろしくお願いします、

マルティン

4

3 に答える 3

0

ルーターのデフォルトルートを使用しないでください。それらを削除して、独自のルートを設定してください。

于 2010-12-13T15:48:22.293 に答える
0

私は基本的にあなたが提案したことをしました。Zend_Controller_Action を拡張し、init() で実行時にルートを定義しました。

技術的には、うまくいきました。それが効率的だったのか、可能な限り最善の解決策だったのかはわかりませんが、私にとってはうまくいきました.

于 2010-11-29T02:33:48.843 に答える
0

最後に、フロント コントローラー プラグインを使用しました。これは、現在使用しているコードのスニペットです。

<?php
class App_Controller_Plugin_Seo extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch( Zend_Controller_Request_Abstract $request )
    {
    // Retreive request params (module / controller / action / <params>)
    $params = $request->getParams( );

    // Initiate categories model
    $providers = new Application_Model_DbTable_Providers;

    // Lookup provider
    $provider = $providers->getProviderByUrl( $params[ 'controller' ] );

    // If the provider exists
    if ( ! is_null( $provider ) ) {

        // Rewrite request
        $request->setModuleName( 'default' )
                ->setControllerName( 'provider' )
                ->setActionName( 'view' )
                ->setParams(
                    array(
                        'url' => $params[ 'controller' ]
                    )
                );

        return;

    }

    return;
}
}
?>
于 2010-12-21T16:47:18.283 に答える