私はcompact()が標準のphp関数であることを知っています。また、set()はケーキ固有のメソッドです。
Ajax(コントローラーのユーザーrender())で生成されたビューに値を渡す簡単なテストを実行していますが、セットアップが次のような場合にのみ、コントローラーからビューに値を渡します。
$variable_name_to_pass = "Passing to the view using set() can compact()";
$this->set(compact('variable_name_to_pass'));
マニュアルを読むと、set()はコンパクトなしで動作するはずです。
Set()が単独で機能しない理由を誰かが説明できますか?お気に入り
$this->set('variable_name_to_pass');
CakePHP API によると:
パラメーター:
混合
$one
が必要文字列またはデータの配列。
混合
$two
オプションNULL
$one
が文字列の場合の値(キーとして機能します)。$one
が連想配列の場合は使用されません。それ以外の場合は、$one
のキーの値として機能します。
compact
関数は、入力配列で指定された名前をキーとして使用し、それらの名前で参照される変数の値を取得してそれらの値を作成することによって構築された連想配列を返します。例えば:
$fred = 'Fred Flinstone';
$barney = 'Barney Rubble';
$names = compact('fred', 'barney');
// $names == array('fred' => 'Fred Flinstone', 'barney' => 'Barney Rubble')
したがって、compact
をset
と組み合わせて使用する場合は、を渡すことにより、set
関数の単一パラメーター形式を使用します。 )キーと値のペアの連想配列。
ビューに設定する変数が1つだけで、単一のパラメーター形式を使用する場合は、同じ方法でset
を呼び出す必要があります。
$variable_to_pass = 'Fred';
$this->set(compact('variable_to_pass'));
それ以外の場合は、set
の2つのパラメーター形式を使用できます。
$variable_to_pass = 'Fred';
$this->set('variable_to_pass', $variable_to_pass);
どちらも同じことを達成します。
Compactは配列を返します。だから、どうやらセットはそれがパラメータであるかどうか、そしてそれが配列であるかどうかをチェックしているようです。それはコンパクトからのものであることを知っています。そうでない場合は、別のパラメーター、変数の値が必要です。