проблема generateUrl - PullRequest
       13

проблема generateUrl

2 голосов
/ 31 мая 2010

Я пытаюсь создать URL, но получаю странное предупреждение, даже если оно работает. Я делаю страницу 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, но я не знаю, почему он вызывает предупреждение thows при вызове метода generateurl.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 31 мая 2010

Это подпись generateUrl:

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

Обратите особое внимание на второй параметр. Однако в случае обычного маршрута это должен быть массив: если ваш маршрут является sfPropelRoute или его доктринальным эквивалентом, это может быть объект.
Я полагаю, что вы получаете эти ошибки, потому что маршрут не определен как sfPropelRoute (или доктрина).

0 голосов
/ 31 мая 2010

Ну, предупреждение довольно специфическое, функция array_diff_key ожидает массив в качестве первого параметра, но он не получает один ...

Я не знаю Symfony, но вы можете увидеть ошибку, это происходит в строке 253 файла symfony / routing / sfRoute.class.php ..

Итак, вы вызываете какую-то функцию, которая вызывает эту строку в этом файле.

Я думаю, что вы можете использовать debug_backtrace для отслеживания вашего потока кода и попытаться найти, если вы вставляете переменную, которая должна быть массивом, но это не так.

...