てきとう

ワーワーゆうとります

cakePHP $this->setがうざい

いまいち$this->set()とすれ違う事があるので調べてみました。
$this->set()の詳細↓

function set($one, $two = null) {
	$data = array();
	
	if (is_array($one)) {
		if (is_array($two)) {
			$data = array_combine($one, $two);
		} else {
			$data = $one;
		}
	} else {
		$data = array($one => $two);
	}
	
	foreach ($data as $name => $value) {
		if ($name === 'title') {
			$this->pageTitle = $value;
		} else {
			if ($two === null && is_array($one)) {
				$this->viewVars[Inflector::variable($name)] = $value;
			} else {
				$this->viewVars[$name] = $value;
			}
		}
	}
}

うおおこんな余計なことを!
余計なこと詳細↓

function variable($string) {
	$string = Inflector::camelize(Inflector::underscore($string));  //アンダーバーなんか削除してやんよ
	$replace = strtolower(substr($string, 0, 1));  //頭文字なんか小文字にしてやんよ
return preg_replace('/\\w/', $replace, $string, 1);
}

なので

$this->set('Abc','123');

あんまりしませんが、頭文字を大文字にしても、勝手に小文字にされるし(Viewで見たら$abc)

$this->set('abc_def','123');

とやってもキャメルケースにされてしまいます。(Viewで見たら$abcDef)
Inflector自体はとっても便利なんですけどね。

というわけで正しい指示は

$this->set(array('one','two','three'),array(1,2,3));
$this->set(array('one'=>1,'two'=>2,'three'=>3));

こんな感じなようです。あとオマケに

$this->set('title','深海魚特集');

これで$this->pageTitle設定してくれるのですね。はじめて知った!

広告を非表示にする