generateUrl问题

时间:2010-05-31 00:22:39

标签: php symfony1 doctrine

我正在尝试生成一个网址,但即使有效,我也会收到一个奇怪的警告。我正在创建一个api xml页面,我在控制器中使用以下调用:

public function executeList(sfWebRequest $request)
{
    $this->users = array();
    foreach($this->getRoute()->getObjects() as $user)
    {
        $this->users[$this->generateUrl('user_show', $user, true)] = $user->asArray($request->getHost());
    }
}

user_show路线如下:

# api urls
user_show:
  url:   /user/:nickname
  param: { module: user, action: show }

xml输出如下:

<br />
<b>Warning</b>:  array_diff_key() [<a href='function.array-diff-key'>function.array-diff-key</a>]: Argument #1 is not an array in <b>/opt/local/lib/php/symfony/routing/sfRoute.class.php</b> on line <b>253</b><br />
<br />
<b>Warning</b>:  array_diff_key() [<a href='function.array-diff-key'>function.array-diff-key</a>]: Argument #1 is not an array in <b>/opt/local/lib/php/symfony/routing/sfRoute.class.php</b> on line <b>253</b><br />

<br />
<b>Warning</b>:  array_diff_key() [<a href='function.array-diff-key'>function.array-diff-key</a>]: Argument #1 is not an array in <b>/opt/local/lib/php/symfony/routing/sfRoute.class.php</b> on line <b>253</b><br />
<?xml version="1.0" encoding="utf-8"?>
<users>
  <user url="http://krowdd.dev/frontend_dev.php/user/danny">
    <name>Danny tz</name>
    <nickname>danny</nickname>
    <email>comedy9@gmail.com</email>
    <image></image>
  </user>
  <user url="http://krowdd.dev/frontend_dev.php/user/adrian">
    <name>Adrian Sooian</name>
    <nickname>adrian</nickname>
  </user>
</users>

所以它输出正确的xml,但我不知道为什么它会在调用generateurl方法时抛出警告。

谢谢!

2 个答案:

答案 0 :(得分:6)

这是generateUrl:

的签名
public function generateUrl($route, $params = array(), $absolute = false)

特别注意第二个参数。但是在常规路线的情况下它应该是一个数组:如果你的路线是sfPropelRoute或它的学说等价物,它可以是一个物体。
我相信你会得到这些错误,因为路线没有被定义为sfPropelRoute(或学说)。

答案 1 :(得分:-1)

嗯,警告非常具体,函数array_diff_key期望一个数组作为第一个参数,但它没有得到一个......

我不知道symfony,但你可以看到错误,它发生在文件symfony / routing / sfRoute.class.php的第253行。

所以,你正在调用一些在该文件上调用该行的函数。

我认为您可以使用debug_backtrace来关注代码流,并尝试查找您是否正在插入应该是数组的变量,但事实并非如此。