0

リチウム PHP を smarty で拡張しようとしていますが、リチウム ヘルパーへのアクセスを許可する smarty プラグイン以外はすべて機能しています。

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

簡素化されたコード

$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));

これにより、リチウム エラーが発生しますが、ヘルパーには、配列から個々のパラメーターとして変換された引数ではなく、配列が渡されているようです。

エラー スニペット 「URL に一致するパラメータが見つかりませんでし( 0 => 'Google', 1 => 'http://www.google.com', 'controller' => 'pages', 'action' => 'index')た。

そのため、call_user_func_array メソッドの使い方が間違っていることがわかりました。

これが私の目的を達成するための唯一の解決策であることに満足しているわけではありません。関数に任意の数の引数をいつでも動的に渡すためのより良い方法を考えることができれば、私は素晴らしいと思います。

: $this-> html->linkは私の問題を説明するための単純化された方法です。そのオブジェクトhtmllink一部は実際に動的に変更されるため、完全に動的な関数引数が必要になります。

4

2 に答える 2

2

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

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

于 2012-04-17T19:02:30.370 に答える
0

やってみませんか

return $helper($params);

call_user_func_array()私の意見では必要ありません。
または、私にとってこれが機能するため、なぜこれが必要なのかを明確にしてください。

于 2012-04-17T19:05:23.417 に答える