CakePHPでスマフォ向けのサイトをPC版と共存させる場合、振り分けは、Layoutを変えるより、Themeを切り替える方が良いようだ。
CakePHPのテーマ
http://book.cakephp.org/2.0/ja/views/themes.html
CakePHPでモバイルとPCのレイアウトを分ける手順 asklife |
CakePHPでスマフォ向けのサイトをPC版と共存させる場合、振り分けは、Layoutを変えるより、Themeを切り替える方が良いようだ。
CakePHPのテーマ
http://book.cakephp.org/2.0/ja/views/themes.html
CakePHPでモバイルとPCのレイアウトを分ける手順 asklife |
ShellとTaskの違いだが、
TaskはShellから呼び出すことのできるコンポーネントという位置付けの様だ
わかりやすい用例は、こちら
こういうURL
http://www.kalium.net/cakephp/film/index/foo:1/bar:1002
で名前付きの引数を渡す場合は、コントローラーでこの様に受け取ることができる
<?php $foo = $this->params['named']['foo']; $bar = $this->params['named']['bar']; ?>
HTMLヘルパーで上の様なURLを出力する場合は、
<?php echo $html->link("List", array('controller' => 'films', 'action' => 'index', "foo" => 1, "bar" => 1002 )); ?>
UsersController内で、以下の様に、beforeFilterで指定する。
function beforeFilter(){
$this->Auth->loginRedirect = array('controller' => 'foo', 'action' => "admin_index");
}
CakePHP1.3でページタイトルを設定する方法が変わった
Controllerのアクション内で、
$this->set('title_for_layout', "ページタイトル");
というように設定
View内では、
echo $title_for_layout;
と、これまで通りに出力
親Modelに、以下の様に記述する。
public $hasOne = array(
"Profile" => array(
"className" => 'Profile',
"dependent"=>true, //ここで同時に削除するように指定
"foreignKey"=>'user_id',
);
);
Userテーブルに新規登録する時に、Userのメタ情報などが入っているUserProfileなどのテーブルに、同時にレコードを登録する方法。
データを保存する :: モデル :: CakePHPによる開発 :: マニュアル :: 1.3コレクションからのコピペですがメモ。
function add() {
if (!empty($this->data)) {
// User モデルのデータを保存します。
// このデータは $this->data['User'] にあります。
$user = $this->User->save($this->data);
// User が保存されたら、Profile データに User の情報を追加し
// 保存します。
if (!empty($user)) {
// 新しく生成した User の ID は、
// $this->User->id にセットされます。
$this->data['Profile']['user_id'] = $this->User->id;
// User は Profile と hasOne のアソシエーションで関連付いているので
// User モデルを通して Profile モデルにアクセスできます:
$this->User->Profile->save($this->data);
}
}
}
要は、親Modelのaddに同時に追加する処理を書くと言うこと…。ここら辺も、自動化されると楽だなぁと思ったり。
CakePHP1.3では、Session Helper, Session Componentは自動的に読み込まれないので、明示的に読み込む必要がある。bakeしたview内で用いられているSetFlashメソッドすらエラーが出る始末。慣れないとめんどい。
var $components = array('Session');
var $helpers = array('Session');
CakePHPで使うDBのテーブル名に接頭辞を付けて使うには、app/config/database.phpで以下のように記述する。
<?php
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user_name',
'password' => '',
'database' => 'database',
'encoding' => 'utf8',
'prefix' => 'prefix_', //here
);
}
?>
CakePHP 1.3が出ていたとは、知らなかった。ここに、差分内容が載っている。