Zend framework2 ZF2获取url参数并在调度错误事件时重定向
我有代码来改变网站的语言。我想扩展这个函数。我希望在获取404页面(或dispatch_error事件)时确保url中的语言参数正确 我的路线示例Zend framework2 ZF2获取url参数并在调度错误事件时重定向,zend-framework2,Zend Framework2,我有代码来改变网站的语言。我想扩展这个函数。我希望在获取404页面(或dispatch_error事件)时确保url中的语言参数正确 我的路线示例 'about' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:lang/]about', 'constraints' =&g
'about' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:lang/]about',
'constraints' => array(
'lang' => '[a-zA-Z]{2}?',
),
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'about',
'lang' => 'en',
),
),
),
如果url参数不正确(example.com/e/about或exampleDotcom//about),则重定向到特定页面(例如example.com/why_dot_发生)。为了做到这一点,我创建了一个函数checkRedirect,并将其附加到EVENT_DISPATCH_ERROR。但是我不知道如何从url获取LANG参数,然后进行重定向。我试过很多次,但都做不到。我对非对象上的成员函数getParam()进行了-Call。我应该向checkRedirect函数附加什么代码来从url获取LANG参数,然后在此函数中进行重定向
我在Module.php中的代码
class Module implements
AutoloaderProviderInterface,
ConfigProviderInterface,
ViewHelperProviderInterface {
public function onBootstrap(MvcEvent $e) {
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$eventManager->attach(MvcEvent::EVENT_ROUTE, array($this, 'initLocale'), -100);
$eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'checkRedirect'), -101);
$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'preDispatch'), 100);
}
public function initLocale(MvcEvent $e) {
$translator = $e->getApplication()->getServiceManager()->get('translator');
$config = $e->getApplication()->getServiceManager()->get('Config');
$shotLang = $e->getRouteMatch()->getParam('lang'); //or $e->getApplication()->getMvcEvent()->getRouteMatch();
if (isset($config['languages'][$shotLang])) {
$translator->setLocale($config['languages'][$shotLang]['locale']);
} else {
$lang = array_shift($config['languages']);
$translator->setLocale($lang['locale']);
}
}
public function checkRedirect(MvcEvent $e) {
//code here
}
这确实有效,但“名称”,但必须是路由中给定的名称
'route' => '/[:lang/]about',
但是,上述路线与路线不匹配*example.com/why_\u it_*
试着把你的路线改成
'route' => '[/:lang]/about',
如果没有提供lang,您总是可以默认设置,即
$e->getRouteMatch()->getParam('lang', 'en');
谢谢你的回答。我已经将路由更改为
'route'=>'[/:lang]/about',
并添加了代码公共函数checkRedirect(MvcEvent$e){$e->getRouteMatch()->getParam('lang');}
但我仍然需要对非对象上的成员functon getParam()进行调用。。。PS$e->getRouteMatch()->getParam('lang','en')代码>也不起作用。
$e->getRouteMatch()->getParam('lang', 'en');