CakePHPでjsファイルの読み込みをする
viewなどで、jsファイルを使用したい場合、javascriptヘルパーなどを使わずにfull pathで書くこともできますが、
これはpathを間違えたりしやすいので、javascriptヘルパーを使う方が簡単でよいです。
まず、top.jsというファイルを読み込ませたい場合、
app/webroot/js/ディレクトリに格納します。
そしてControllerとViewに下記のように記述します。
Controller
<?php class HogesController extends AppController { var $helpers = array('Javascript'); }
cakephpでINSERTするつもりがUPDATEになる場合の対処法
今日悩んだことを調べ、あとで思い出すときのためにメモるシリーズ。
コントローラーの中で配列の中身を一つずつINSERTするときは、
こんな風に書きますが、
<?php foreach ($hoges as $key => $value) { if($value){ $this->data['Hoge']['test'] = $value; $this->Hoge->save($this->data); } } ?>
これだと、2週目以降が全てUPDATEになってしまいます。
primaryKeyをその都度nullにするっていう方法もありますが、
こんなの↓
<?php foreach ($hoges as $key => $value) { if($value){ $this->data['Hoge']['id'] = null; $this->data['Hoge']['test'] = $value; $this->Hoge->save($this->data); } } ?>
あまりスマートではないので、
そういう場合は、
<?php foreach ($hoges as $key => $value) { if($value){ $this->Hoge->create(); $this->data['Hoge']['id'] = null; $this->data['Hoge']['test'] = $value; $this->Hoge->save($this->data); } } ?>
としてやると、できます。
つまり初期化してるんですね。
for文でINSERTしてるとページロードが重い。。。
[cakephp]コンポーネントから他のコンポーネントを呼び出す
カスタムコンポーネントを作って、他のコンポーネント経由でモデルを呼びたくて
わからなかったので調べてみた。
<?php class HogeComponent extends Object { var $name = 'MasterHoge'; var $Controller; //呼びたいコンポーネントをここに書く var $components = array('MasterTest') function index(){ //実際に他のモデルの情報を取得 $data = $this->Controller->MasterTest->find(); } } ?>
のように書くとできました。
コンポーネントを使うのは複雑な用件の場合のみにしたほうがいいらしいです。
cakephpの内部関数
配列のトレースとかをするときに今までは、
<?php $hoge = array(1,2,3,4); print_r($hoge); ?>
とかやっていたけど、
なんかcakephpだと
<?php $hoge = array(1,2,3,4); pr($hoge); ?>
で同じことをやってくれるらしい。
便利だね。ショートコーディングにもなるし。