我目前正在与Zend合作完成我的项目。这个项目有类别。通常,我会使用Zend路由重写URL,以便我可以访问我的页面,如下所示:http://site.ext/category/ [category-name] /。但是出于搜索引擎优化的目的,我想创建根级URL。换句话说:http://site.ext/ [category-name] /。
但是当然,Zend会尝试找到一个名为[category-name]的控制器。解决这个问题的最佳方法是什么?我想过像'后备控制器'这样的东西。如果找不到页面,让回调控制器处理请求并检查类别是否存在。如果不是:进入错误控制器。
这是最好的解决方案,我的其他程序员的意见是什么?
致以最诚挚的问候,
马亭
答案 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;
}
}
?>