2010-05-31 29 views
2

我正在嘗試生成一個url,但即使它能正常工作,我仍然會收到奇怪的警告。我想提出一個API XML頁面,我用下面的調用控制器:generateUrl問題

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>[email protected]</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方法時拋出警告。

謝謝!

回答

6

這是generateUrl的簽名:

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

特別要注意的第二個參數。但是,如果是常規路由,它應該是一個數組,但是:如果您的路由是sfPropelRoute或其等同原則,則它可以是一個對象。
我相信你會得到這些錯誤,因爲路由沒有被定義爲sfPropelRoute(或學說)。

+0

太棒了!謝謝! – Danny 2010-06-01 01:44:40

+0

謝謝你,我不知道如何在絕望之前把它變成這樣。 – 2013-11-25 23:56:47

-1

那麼,警告是非常具體的,功能array_diff_key期待一個數組作爲第一個參數,但是它沒有得到一個...

我不知道symfony的,但你可以在看錯誤發生在文件symfony/routing/sfRoute.class.php的第253行。

因此,您正在調用某個函數調用該文件上的那一行。

我認爲你可以使用debug_backtrace來跟蹤你的代碼流,並試圖找出你是否插入應該是一個數組的變量,但它不是。