1
我正在开发一个Zend 1.11 web应用程序。我建立了一个语言选择器插件,用于根据用户输入切换语言(它为& en)。Zend cookie问题
这是我有:
class LS_Controller_Plugin_LangSelector extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
if($request->getParam('lang'))
{
$lang=$request->getParam('lang');
setcookie('lang', $lang, time() + (3600));
echo "we just set a cookie";
}
else if (isset($_COOKIE['lang']))
{
$lang=$_COOKIE['lang'];
echo $lang;
}
else
{ echo 'We are here.But I can't understand why';
$lang='en';
var_dump($_COOKIE);
}
switch(strtolower($lang))
{
case 'en':
$locale="en_US";
break;
case 'it':
$locale="it_IT";
break;
default:
$locale="en_US";
}
$zl=new Zend_Locale();
$zl->setLocale($locale);
Zend_Registry::set('Zend_Locale',$zl);
$translate=new Zend_Translate(
array(
'adapter' => 'gettext',
'content' => APPLICATION_PATH.'/configs/languages/'.$locale.'.mo',
'locale' => 'en'
)
);
Zend_Registry::set('Zend_Translate',$translate);
}
}
[bootstrap.php中]
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initRoutes()
{
$frontController=Zend_Controller_Front::getInstance();
$router=$frontController->getRouter();
$router->removeDefaultRoutes();
$router->setGlobalParam('lang','en');
$router->addRoute(
'lang',
new Zend_Controller_Router_Route('/:lang/:controller/:action',
array('lang'=>':lang',
'module'=>'default',
'controller'=>'index',
'action'=>'index'
)
)
);
$router->addRoute(
'langController',
new Zend_Controller_Router_Route('/:controller/:action',
array(
'module'=>'default',
'controller'=>'index',
'action'=>'index'
)
)
);
$router->addRoute(
'langIndex',
new Zend_Controller_Router_Route('/:lang',
array('lang'=>':lang',
'module'=>'default',
'controller'=>'index',
'action'=>'index'
)
)
);
$router->addRoute(
'langNothing',
new Zend_Controller_Router_Route('',
array('lang'=>'en',
'module'=>'default',
'controller'=>'index',
'action'=>'index'
)
)
);
}
}
的一点是:
- 我在我的浏览器的完整URL mysite的类型。 com /它/索引/指数,我得到回声“我们只是设置一个cookie”..很好,我应该能够浏览我的网站与意大利饼干集,但我没有。每当我点击一个链接(例如/index/contactus..links不指定'lang'参数!)我导航到该页面,但它再次用英语(我得到回应消息:“我们在这里但是我不明白为什么“)。
不应该设置cookie吗?
+1。解决方法与将setcookie行更改为'setcookie('lang',$ lang,time()+ 3600,'/');' –
这样简单:在我按照建议在setcookie行中添加'/'后,完美。 现在(笔记本电脑关机后)我正在尝试奇怪的行为导致setcookie设置lang-cookie ='favicon.ico',但我不知道这是从哪里来的!你可以帮我吗?我在问题 – luca
@luca中添加了自举文件,这是因为你的“lang”路由。当您设置:controller和:来自路由的action时,www.yoursite.de/favicon.ico(浏览器显示favicon的请求)被匹配,并且lang被设置为favicon.ico。所以我猜想,您的浏览器发出的第一个请求是favicon请求,并为您设置了一个具有该值的cookie。证明你的代码不符合订单证明,表明设计不好。一个可能的解决办法是删除路由,并将lang添加为常规参数(www.yoursite.de/some/query/string/value/lang/en) – breiti