0

我目前正在与 Zend 一起为我的项目工作。这个项目有类别。通常,我会用 Zend 路由重写 URL,这样我就可以访问我的页面,如下所示:http://site.ext/category/[category-name]/。但出于 SEO 目的,我想创建根级 URL。换句话说:http://site.ext/[category-name]/。

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

这是最好的解决方案吗?我的程序员同事们的意见是什么?

此致,

马汀

4

3 回答 3

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 回答
0

我基本上按照你的建议做了。我扩展了 Zend_Controller_Action 并在运行时在 init() 中定义了我的路由

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

于 2010-11-29T02:33:48.843 回答
0

不要使用路由器的默认路由 - 删除它们并设置您自己的。

于 2010-12-13T15:48:22.293 回答