2012-04-17 11 views
0

私はSmartyでLithium PHPを拡張しようとしていますが、リチウムヘルパーへのアクセスを許可するスマートなプラグインを除いてすべてが機能しています。call_user_func_arrayの適切な使用

私のスマートな機能は、リチウムヘルパーの「キャッチオール」を意図しています。私が苦労している部分は、ヘルパーパラメータをコールバックに動的に追加することです。

簡体コード

$params = array('Google', 'http://www.google.com'); 

$helper = function($args){ 
    return $this->html->link($args); 
}; 

return call_user_func_array($helper, $params); 

これは<a href="/Google">Google</a>

いくつかのさらなるテストは上記のみ奇妙なコールバックに$ params配列...の最初の項目に合格したことを示したとの結果。だから私はそれを自分の配列で包んだ。それを取る、私が説明することができないこと!

return call_user_func_array($helper, array($params)); 

これは、しかし、ヘルパーは、個々のパラメータとして配列から、配列ではなく、翻訳された引数が渡されているように見える、私は文句を言わないに入るリチウムエラーが発生します。

エラースニペット '(0 => 'Google', 1 => 'http://www.google.com', 'controller' => 'pages', 'action' => 'index')のパラメータが見つかりません。

私は、call_user_func_arrayメソッドを使用していないことを知りました。

私はこれを私の目的を達成するための唯一の方法であるとは思っていません。あなたが動的に任意の数の引数を動的に渡すことができれば幸いです。

に注意してくださいます$ this->html - >linkは完全に動的な関数の引数のために、したがって要件、そのオブジェクトのhtmllink部品が実際に動的に変更されます、私の問題を説明するための簡便法です。

答えて

2

$helperは引数が1つのみで宣言され、1つだけが$this->html->linkに転送されます。

なぜcall_user_func_array(array($this->html, 'link'), array($params));を直接使用しないのですか?

+0

これは完全に機能しました!私のヒーロー! – joseym

0

は、なぜあなたは私の意見ではcall_user_func_array()ため

return $helper($params); 

不要をしません。
または、なぜ私がこれが機能するので、これをしたいのかを明確にしてください。

+0

問題は、$ this-> html-> linkは$ this-> html-> link( 'Google'、 'http://www.google.com')のように渡す必要があります。 html-> link(array( 'Google'、 'http://www.google.com'))、$ paramsを渡すだけで十分です。 – joseym

+0

さて、私は理解しました:)その後、私の答えは時代遅れになりました。 –

+0

どうもありがとう、@ kirlloidの答えは私がどこに行く必要があった – joseym