Zend:在“根”级别上路由

时间:2010-11-27 12:22:16

标签: php zend-framework zend-route

我目前正在与Zend合作完成我的项目。这个项目有类别。通常,我会使用Zend路由重写URL,以便我可以访问我的页面,如下所示:http://site.ext/category/ [category-name] /。但是出于搜索引擎优化的目的,我想创建根级URL。换句话说:http://site.ext/ [category-name] /。

但是当然,Zend会尝试找到一个名为[category-name]的控制器。解决这个问题的最佳方法是什么?我想过像'后备控制器'这样的东西。如果找不到页面,让回调控制器处理请求并检查类别是否存在。如果不是:进入错误控制器。

这是最好的解决方案,我的其他程序员的意见是什么?

致以最诚挚的问候,

马亭

3 个答案:

答案 0 :(得分:0)

我基本上完成了你的建议。我扩展了Zend_Controller_Action并在运行时在init()

中定义了我的路由

从技术上讲,它运作良好。无论是高效还是最好的解决方案,我都不知道,但它对我来说效果很好。

答案 1 :(得分:0)

请勿使用路由器的默认路由 - 将其删除并设置自己的路由。

答案 2 :(得分: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;
}
}
?>