Zend getParameters没有返回url路由中的内容

时间:2012-09-26 10:24:42

标签: php zend-framework

我有一个连接到Zend应用程序API的iOS应用程序。当用户登录时,URL和请求如下:

url http://www.mydomain.com:82/user/login/user@gmail.com/40.636518/3.632524 <NSMutableURLRequest http://www.mydomain.com:82/user/login/user@gmail.com/40.636518/3.632524>

我们有用户电子邮件和经纬度的地方。另外,我通过参数发送用户密码:

password=sha1password0123456789&

这些是我的路线:

routes.userlogin.route = '/user/login/:email/:latitude/:longitude'  
routes.userlogin.defaults.controller = user  
routes.userlogin.defaults.action = login 

这是控制器的代码:

...
$data = $this->getRequest()->getParams();
/* Here I print the $data object */
...

所以,有时我会收到这个$ data(这没关系):

Array(    
    [email] => user@gmail.com    
    [latitude] => 40.636518    
    [longitude] => 3.632524    
    [controller] => user    
    [action] => login    
    [password] => sha1password0123456789)

还有一些时候,我得到了这个(这会导致登录崩溃):

Array(    
    [controller] => user    
    [action] => login    
    [user@gmail.com] => 40.636301    
    [module] => default    
    [password] => sha1password0123456789)

我是否以正确的方式检索参数?事务是通过POST方法完成的,我想我正在运行ZendFramework-1.11.11。

编辑:AFAIK这应该不是问题,但上次崩溃的位置与正常的请求不同:

http://www.mydomain.com:82/user/login/user@gmail.com/40.636518/3.632524 VS http://www.mydomain.com:82/user/login/user@gmail.com/40.636301/3.632206

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,这是memcached的一个问题。我的应用程序当前与其他人共享同一个测试服务器,但由于Zend_Cache缺少cache_id_prefix属性,它似乎崩溃了。

将以下行添加到AppPlugin.php解决了问题:

$frontendOpts = array(
            'caching' => true,
            'lifetime' => 1800,
            'automatic_serialization' => true,
            'cache_id_prefix'=>'APPLICATIONNAME_' // This solved the problem
            );
....
$cache = Zend_Cache::factory('Core', 'Memcached', $frontendOpts, $backendOpts);

此行强制所有来自 APPLICATIONNAME memcached来电具有特定前缀,并防止生活在同一服务器下的应用程序之间出现问题。