【PHP】フレームワーク CakePHP 12ホール目【笑】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/07/01(金) 16:33:46.28ID:???CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
前スレ
【PHP】フレームワーク CakePHP 11ホール目【v1.3】
http://hibari.2ch.net/test/read.cgi/php/1297860755/
0002nobodyさん
2011/07/01(金) 17:48:14.76ID:???>どう対応してますか?
PHPてnamespaceないんだっけか?
なんちゅーダサい言語w
0003nobodyさん
2011/07/01(金) 18:07:43.44ID:Hz/Fo+udあるよ
0004nobodyさん
2011/07/01(金) 19:10:44.19ID:???Cake的にはConfigure::load()/read()じゃなくて?
0005nobodyさん
2011/07/01(金) 19:38:21.72ID:???- routes.php
Router::connect('/m/', array('controller' => 'home', 'action' => 'index', 'prefix' => 'mobile'));
Router::connect('/m', array('controller' => 'home', 'action' => 'index', 'prefix' => 'mobile'));
Router::connect('/m/:controller/:action/*', array('prefix' => 'mobile'));
- app_controller.php
function afterFilter() {
if (!preg_match("/^m(\/)?/", $this->params['url']['url'])) {
$this->redirect('/m/' . $this->params['url']['url']);
}
if ($this->isMobile) {
$this->output = mb_convert_kana($this->output, 'k');
$this->output = mb_convert_encoding($this->output, 'SJIS', 'UTF-8');
}
}
こんな感じで振り分けたりしてるんだけど、
function show() {
$this->set('abc', $this->Model->find('all'));
}
function mobile_show() {
$this->set('abc', $this->Model->find('all'));
}
上記のようにコントローラにPC用と携帯用で全く同じ処理なのに
別々のアクションを作らないといけない。
これはしょうがないのかな?
もっとナイスな実装方法があれば助言お願いします
0006nobodyさん
2011/07/01(金) 23:15:29.99ID:???beforeFilter()かそれ以前で携帯か判定して
beforeRender()でviewを切り替えるComponentをつくる。
Controllerのactionは基本共通で場合によって処理も分けられる。
0007nobodyさん
2011/07/02(土) 00:23:23.70ID:???0008nobodyさん
2011/07/02(土) 00:36:56.30ID:???サンクス
いや、多分コントローラのアクション同一のものを使えると思う
>beforeRender()でviewを切り替える
なるほど。
処理が全て終わったあとで、
$this->render('mobile_' . 現在のaction名);
みたいな感じかな。
>beforeFilter()かそれ以前で携帯か判定して
これがちょっとわからない
beforeRender()のview切り替え時に携帯かどうか判断したらだめなの?
0009nobodyさん
2011/07/02(土) 00:52:56.31ID:???> >beforeFilter()かそれ以前で携帯か判定して
> これがちょっとわからない
> beforeRender()のview切り替え時に携帯かどうか判断したらだめなの?
actionの中身が完全に同一ならいいんだけど
たまに場合分けしたい部分もあるかと思ってね。
利用するModelも変わるかもしれないし。
0010nobodyさん
2011/07/02(土) 06:43:28.79ID:???切り替えにはテーマを使うほうがいいんじゃないかな?
http://book.cakephp.org/ja/view/1093/%E3%83%86%E3%83%BC%E3%83%9E
0011nobodyさん
2011/07/03(日) 03:59:17.90ID:???なるほど
>>10
おお、テーマ便利だわ
テーマ使ったら >>5 の方法みたいに
/m/ でアクセスする必要無くなったな
みなさんありがとう!
0013nobodyさん
2011/07/03(日) 11:43:28.90ID:???- app_controller.php
function beforeFilter() {
$agent = Net_UserAgent_Mobile::factory();
// 携帯
if (!$agent->isNonMobile()) {
if ($agent->isDoCoMo()) {
ini_set('session.use_cookies', FALSE);
ini_set('session.use_only_cookies', FALSE);
ini_set('session.use_trans_sid', TRUE);
session_start();
}
$this->isMobile = true;
$this->layout = 'mobile';
$this->theme = 'mobile';
// PC
} else {
:
:
}
}
routes.php の携帯関係(/m/)のマッピングと、
afterFilter() の redirect の記述は全て消した
携帯でアクセスすると、テーマがmobileになるので、
mobileテーマを用意すると、それをrenderしてくれる
結局テーマでほぼ解決できた感じ
0014nobodyさん
2011/07/03(日) 19:14:04.25ID:???0015nobodyさん
2011/07/03(日) 19:44:35.63ID:???0016nobodyさん
2011/07/03(日) 19:51:41.97ID:???0018nobodyさん
2011/07/03(日) 23:13:54.05ID:???0019nobodyさん
2011/07/03(日) 23:53:57.75ID:???■ このスレッドは過去ログ倉庫に格納されています