web-dev-qa-db-ja.com

set()とcompact()を一緒に使用することに関するCakePHPの説明。コンパクト()でのみ動作します

私は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');
15
OldWest

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')

したがって、compactsetと組み合わせて使用​​する場合は、を渡すことにより、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);

どちらも同じことを達成します。

41
tokes

Compactは配列を返します。だから、どうやらセットはそれがパラメータであるかどうか、そしてそれが配列であるかどうかをチェックしているようです。それはコンパクトからのものであることを知っています。そうでない場合は、別のパラメーター、変数の値が必要です。

3
Headshota