トップページphp
1001コメント300KB

【PHP】フレームワーク CakePHP 12ホール目【笑】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/07/01(金) 16:33:46.28ID:???
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
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/
0632nobodyさん2011/10/08(土) 17:05:40.35ID:???
よくわらかんが、たとえばlayouts/default.ctpのビューで

<?php if (!$this->Session->check('Auth.User')): ?>
<a href="<?php echo Router::url('/users/register'); ?>">新規登録</a>
<?php endif; ?>

こういうのもあなた的にはおかしいんですか?
0633nobodyさん2011/10/08(土) 17:06:25.80ID:???
ビューを「デザインする場所」だと思えばおかしいかも知れんけど、
「表示を司るプログラムを書く場所」だと思えばいいんじゃないの

>>631
elementからrequestActionを投げるのがそれに近いのでは。
0634nobodyさん2011/10/08(土) 18:11:29.06ID:???
>>633
そうすると、どう考えてもビューをデザイナーがいじる事は無理だよね。
CMSでよくある、管理画面からテンプレート(ビュー)を編集とかも。
0635nobodyさん2011/10/09(日) 00:02:17.84ID:???
632のようにビューで分岐させるのは、ありだと思う
ケースバイケースだけど
これは、デザイナーよりの分岐なので
デザイナーに編集してもらった方が楽
これくらいの分岐条件ならデザイナーでも、わかると思う。

これを関数で処理するとなれば、HTMLタグを関数内に入れる事になる
要は新規登録のリンクをヘルパーとして扱うのは、効率的に悪い。
新規登録のリンクは、関数として何度も使うことが無い。

新規登録、会員登録の分岐は、それ用にビューをつくっておいて
メインのビューから読み込ませればよい
0636nobodyさん2011/10/09(日) 01:06:32.27ID:???
たしかにケースバイケースだな。
効率と保守性の問題。
0637nobodyさん2011/10/09(日) 01:12:35.73ID:???
俺的にはビューはデザイナに任せるから、PHPのコードが書いてあるなんてありえんのだが
みんなよくやるね
0638nobodyさん2011/10/09(日) 01:39:02.71ID:???
というかデザイナーが仕上げた後にphpコードをプログラマが埋め込む。

phpコードを埋め込んだビューにデザイナが手を付けることはない。

デザイン出来上がり

プログラム組み込み
0639nobodyさん2011/10/09(日) 03:21:51.21ID:???
自分で書いたSQL文をページネーションしたい場合どうしたらいい?
0640nobodyさん2011/10/09(日) 03:28:03.09ID:???
ちょっとしたデータをphpの配列に書いてあってincludeして使いたい場合、どのフォルダに置く?
0641nobodyさん2011/10/09(日) 12:35:10.57ID:???
Configureに読み込ませればいいんでね?
0642nobodyさん2011/10/09(日) 14:10:24.41ID:???
ぶーつとらっぷ
0643nobodyさん2011/10/09(日) 20:53:40.00ID:???
>>641
configフォルダのこと?

>>642
bootstrapだと全ファイルにincludeされて重くならないかな
気にするほどではない?ファイルサイズは100KBないぐらい
0644nobodyさん2011/10/09(日) 21:57:21.11ID:???
俺は「common」ってフォルダ作って、その中にファイル置いてる。
で、bootstrap.phpでincludeしている。

この方が自分が見た目でも分かりやすし、管理しやすいよ。
0645nobodyさん2011/10/09(日) 22:51:40.43ID:???
vendorsフォルダに入れて、使いたいときにApp::importするとか
0646nobodyさん2011/10/09(日) 22:58:39.45ID:???
>>643
Configureクラスに、必要に応じて設定を読み込ませられるメソッドがあった、ってーこと。なんだったかな。。。
そいつを使うと、確かconfigフォルダにファイルを置いておけば、ファイル名渡してやると必要に応じて読み込めたよーな。
0647nobodyさん2011/10/09(日) 23:59:56.16ID:???
設計について相談です。
mypageというコントローラーがあって、
日記の表示なら/mypage/diary_list、編集なら/mypage/diary_edit
というアクションにしているのですが、
これをするとmypage_controller.phpのソースが長くなります。

皆さんはどうしていますか?diary_controller.phpを作って
そこでindexとかeditのアクションを作っていくパターンでしょうか?
0648nobodyさん2011/10/10(月) 01:58:42.29ID:???
>>647
mypageとdiaryのテーブル構造ってどうなってます?
0649nobodyさん2011/10/10(月) 02:48:07.86ID:???
質問です

言語というフォルダがあるとして

1.Japanese
2.English
3.Spanish
4.Chinese
とレコードがあるとしたら

リレーションキーとなるフィールドは別途数字フィールドを用意したほうがいいですか?

それとも
JAN
ENG
ESP
CHN

のように省略系の入った文字列フィールドで繋ぐのはありですか?
後者のほうが頭に入れておきやすいのですが
0650nobodyさん2011/10/10(月) 02:59:56.10ID:???
訂正。
フォルダと書きましたが
テーブルでした。
0651nobodyさん2011/10/10(月) 15:53:13.73ID:???
>>649
languagesテーブルはレコードが4行のみ?これから増える場合とかありますか?
0652nobodyさん2011/10/10(月) 16:46:07.88ID:???
>>647
いくつか方法思いついたけど、根源の「listとeditだけで気になるほどソースが長くなる」症状がどういうものかが分からんからなんとも言えん。
確か、CakePHPを使う人が勘違いするパターンとかいう話であったが、本当はモデルに実装するべき処理をコントローラーに置いてしまっていないか?見てみるといいかも

>>649
何のために言語分けるのか分からんのだけど、localeは使わないん?
06536472011/10/10(月) 20:56:02.88ID:???
>>648
mypageというテーブルがあるのではなく、
mypageと言うのは、マイページ=会員専用のページという意味です。
diaryはタイトルとか内容がある、普通の日記です。(例として出しました)
>>652
findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
あと、652さんのレスを見ると、私の質問でいうと
「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?

ソースが長くなっても視認性は劣りますが、
「みんなそうしてるよ。気にするな」であれば良いのですが・・。
0654nobodyさん2011/10/10(月) 21:28:47.85ID:???
他に何か例があった気がするんだけどとりあえず
http://d.hatena.ne.jp/hiromi2424/searchdiary?word=cakephp%20behavior
^ここのがモデルをカスタマイズする上でかなり参考になると思う。

>findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
^については、条件多ければそりゃ長くなるだろうけど・・・おいらのとこだと受け取ったパラメータ配列をfindに渡すくらいの長さになるかな。
よほどそのメソッドにおいて特殊な事をするんでない限り、モデル側に出す、というのが「良い」パターン、という感じみたいだ
0655nobodyさん2011/10/10(月) 23:56:03.51ID:???
そもそもfindを組み立てるのはモデルでやって
結果をコントロールで受け取って、ビューに渡す

[HogeModel]
public function latestComments{
return $this->find('all', array(...));
}

[HogesController]
public function index()
{
$this->set('models', $this->Hoge->latestComments())
}

みたいな。


0656nobodyさん2011/10/11(火) 00:58:11.55ID:???
最初はbakeで焼いてみればいいのに。
基本的にはこんな感じなんだな。ってのがbakeで生成されたコードみればだいたいわかるしょ。
0657nobodyさん2011/10/11(火) 02:08:32.71ID:???
なんでうちのエンジニアbakeつかわねぇんだろ。
06586472011/10/11(火) 02:55:12.36ID:???
>>654-655
findの書き方は別として、私が悩んでいるのは
>「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
という部分であったりもします。

>>655さんのレスを見ると、diary_list・diary_editみたいなアクションを
コントローラーに作成していくパターンで良いのかもしれませんが、
普通は、「機能名_動作」というアクションにするので、
ここに違和感があるわけです。

この部分に関して言及されていないので、
気にしなくても良いのかもしれませんが、
気にしないとURLが変わるので、私としては気になります。
06596472011/10/11(火) 03:01:25.43ID:???
すみません。上記の文が変なので書き直します。
----------
>>654-655
findの書き方は別として、私が悩んでいるのは
>「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
という部分です。

>>655さんのレスを見ると、diary_listやdiary_editみたいなアクションを
コントローラーに作成していくパターンで良いのかもしれませんが、
普通は、「機能・コンテンツ名=コントローラー」「動作=アクション」になるので、
diary_listみたいに1つのアクションにするのは違和感があります。

この部分に関して言及されていないので、
気にしなくても良いのかもしれませんが、
気にしないとURLが変わるので、私としては気になっています。
0660nobodyさん2011/10/11(火) 07:00:41.81ID:???
CakePHP2使ってる人いる?
0661nobodyさん2011/10/11(火) 12:50:17.13ID:???
3なら使ってるよ
0662nobodyさん2011/10/11(火) 14:18:27.66ID:???
ページを移動するたびにSQLを発行して読みに行ってるのですが
function内で設定した内容を次回に持ち越す
というような事をするにはどうすればよいのでせうか?

▲保存されたデータがあるか
┃保存されたデータの呼出し
╋━━━━
┃SQLの発行
┃呼び出したデータの保存

みたいな
0663nobodyさん2011/10/11(火) 14:41:18.46ID:vJdgBzio
>>660
趣味程度に使っているよ
0664nobodyさん2011/10/11(火) 14:55:23.16ID:???
1.3 で質問なんですが、
例えば Test1 テーブルと Test2 テーブルがあったとして、
この2つのテーブルから Test1, Test2 それぞれでなく、
あわせて新着順に10個の項目を取得する方法はありますでしょうか?

0665nobodyさん2011/10/11(火) 15:19:09.96ID:???
結合して時間をキーに降順かけてから10個取り出せば良いんじゃないの
0666nobodyさん2011/10/11(火) 20:36:20.80ID:???
参照(SELECT)だけなら2つのテーブルのviewを作った方がすっきりすると思う。
0667nobodyさん2011/10/11(火) 23:51:50.92ID:???
>>662
cache
普通はよくアクセスするページの保存に使うが、sqlの結果そのものを保存する場合にも使っちまおう、というのも見かけた事がある。ADOdbの確かメソッド名のどこかにcacheとか名前ついてるやつ。

だがまぁ、ふつうは次回に持ち越すなどと考えないでpagenationを使うもんだ
0668nobodyさん2011/10/12(水) 10:56:19.39ID:???
自分が考えた流れ図通りに作れないとモチベーション一気に下がるよね
0669nobodyさん2011/10/12(水) 11:34:38.64ID:???
>>667
Aを表示(SQL読み込み)→B表示→ページ移動→A表示(再読み込み)
って流れになってるから
Aを表示(テーブル保存)→B表示→ページ移動→A表示(保存したテーブルから読み込み)
っていうのをやりたい
0670nobodyさん2011/10/12(水) 14:18:11.65ID:???
モデルにfindを書いているのですが、
コントローラーからfindの結果を取得して
それをpaginateにしてビューに渡すと言った事が出来るのでしょうか?
もし出来る場合はソースの書き方を教えて下さい。
0671nobodyさん2011/10/12(水) 14:29:40.83ID:???
function index(){
$data = $this->paginate();
$this->set('data',$data);
}
0672nobodyさん2011/10/12(水) 16:09:12.63ID:???
自分はこう書きます
function index(){
$this->paginate = $this->ModelName->methodName();
$this->set('data', $this->paginate());
}
0673nobodyさん2011/10/12(水) 16:39:49.89ID:???
>>671-672
それは普通にコントローラーでpaginateしてるだけですよね?
そうではなくて、findの箇所はモデル内で作成しています。
それを取得してpaginateのfind箇所を置き換えられないかと思い質問しました。

#test_controller
$list = $this->Test->getFind($options);
$this->set('test_list', $this->paginate($list));

こういうイメージです。(もちろんこれでは動きませんが...)
0674nobodyさん2011/10/12(水) 17:02:09.88ID:???
>>673
モデルの中で自己流でfindをオーバーライドしてるなら
_findAll,_findCount,_findFirstあたりもきちっとつくらねばならん。
この辺はPagenateがどういう動きをしてるか、Modelクラスのソース追って下さい。
0675nobodyさん2011/10/12(水) 17:29:23.61ID:???
流れ図は思い浮かぶんだけど表現する方法がないのがもどかしいぉー
ずーっとJavaやってたからJavaベースで思い浮かぶのがそもそもの敗因
0676nobodyさん2011/10/12(水) 18:01:53.84ID:???
規模が大きくなると、ビューだけでもlayoutやelement数が増えるよね。
1つのファイルにif入れたり、コントローラーからsetするのも限界があるし。
(ソースが汚くなって見づらいから、ファイルを分けた方が視認性が良くなる
0677nobodyさん2011/10/12(水) 19:33:00.65ID:???
>>673
findしたデータをpaginateするんじゃなくて、paginateにSQLを渡すイメージ
じゃないと、findで余計なデータをメモリに持っちゃうじゃん

http://book.cakephp.org/ja/view/1237/カスタムしたクエリによるページ付
0678nobodyさん2011/10/12(水) 19:34:28.35ID:???
ごめんURLおかしかったかも
http://book.cakephp.org/ja/view/1237/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%81%97%E3%81%9F%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AB%E3%82%88%E3%82%8B%E3%83%9A%E3%83%BC%E3%82%B8%E4%BB%98%E3%81
0679nobodyさん2011/10/12(水) 20:36:58.14ID:???
>>677-678
ありがとうございます。参考にします。
0680nobodyさん2011/10/12(水) 23:14:24.71ID:???
>>673
672を書いたものですけど、勘違いされてるようなのでもう少し詳しく書くと

モデル :
function methodName($user_id)
{
return array(
'fields' => array('...'),
'conditions' => array('ModelName.user_id' => $user_id),
'order' => array('Hoge.id DESC'),
);
}

コントローラ :
function index(){
$this->paginate = $this->ModelName->methodName($this->Auth->user('id'));
$this->set('data', $this->paginate());
}

みたいな感じです
あなたがいうモデルでfind組み立てて、コントローラでpaginateに代入し、ビューに渡すという流れです
0681nobodyさん2011/10/13(木) 15:33:11.40ID:???
>>680
せっかく説明していただいたのに申し訳ないのですが、希望は違います。
findだけで済む箇所とpaginateまで生成したい箇所があるので、
コントローラーでそれを操作したいと思い、>>670のように質問しました。

680さんのは基本的なオプション指定だけをモデルに書いて
それをpaginateに渡すイメージですが、そうではありません。
0682nobodyさん2011/10/13(木) 18:19:08.28ID:???
なるほど。こちらの勘違いでした。すみません。

以下が妥当かと。

モデル:
public function getFind($paginate=true)
{
$criteria = array(
'fields' => array(...),
'order' => 'Word.id DESC',
);

if ($paginate)
return $criteria;
else
return $this->find('all', $criteria);
}

コントローラ:
public function ページネーションするアクション()
{
$this->paginate = $this->ModelName->getFind();
$this->set('models', $this->paginate());
}

public function ページネーションしないアクション()
{
$models = $this->ModelName->getFind(false);
$this->set(compact('models'));
}
0683nobodyさん2011/10/13(木) 18:45:40.47ID:???
>>682
ありがとうございます。ぜひ参考にさせていただきます。
0684nobodyさん2011/10/13(木) 19:35:17.24ID:???
viewとcontrollerで共通の処理はどこに置けばいいのかね?
今はhelperに書いてcontrollerからも読み込むようにしてるけど普通?
0685nobodyさん2011/10/13(木) 19:56:53.48ID:???
>>684
興味なのだが、viewとcontroller共通の処理って何?
その2つで共通なら、逆にmodelに書くべきと思うが。
0686nobodyさん2011/10/13(木) 21:26:35.92ID:???
cakephp初心者です。

コントローラクラス内で各メソッドがデータを共有操作できるメンバー変数のようなものはもてないでしょうか?
例えば、indexが呼ばれるたびに1加算されて表示されるようなことがしたいです。以下の方法はダメでした

public $ii = 0;
fanction index() {
  echo $ii;
  $ii++;
}

$iiのデータが共有されるのは全ユーザではなく、ユーザ単位である必要があります。
0687nobodyさん2011/10/13(木) 21:31:40.05ID:???
厳密には共通の処理じゃなくて、viewでpackしたものをcontrollerでunpackするような処理なんだけどな
modelも違うかな…そもそも設計間違ってるのか
0688nobodyさん2011/10/13(木) 22:14:15.35ID:???
>>686
セッション
0689nobodyさん2011/10/13(木) 23:05:30.03ID:???
>685
質問元と違うが、controllerの方でパンくずリストを登録して、viewの方で表示する場合など
0690nobodyさん2011/10/13(木) 23:58:06.07ID:???
・画像が投稿されているか否か調べる
・投稿されていたらその画像を表示。そうでなければno_image.gifを表示

という2つの処理をするだけでもviewに書いていくと汚くなるんだよな・・・
だからヘルパー作るかコントローラーでfind後に再処理する方が良いと思う
0691nobodyさん2011/10/14(金) 08:54:54.73ID:???
フォームで送信された値を参照するときにつかう $this->data と $this->paramsの違いがよくわかりません。
これらは違いがあるのでしょうか?
0692nobodyさん2011/10/14(金) 11:14:03.92ID:???
リクエストがPOST → $this->data
リクエストがGET → $this->params
0693nobodyさん2011/10/14(金) 12:01:41.71ID:???
え、POSTだけどparams使ってるわ
間違いなの?
0694nobodyさん2011/10/14(金) 12:05:51.56ID:???
ヘルパーってビューがプログラムで汚れそうなときに使えるのか
ifとか
0695nobodyさん2011/10/14(金) 13:09:12.64ID:???
URLの
コントローラー名/アクション名/引数
の引数の部分にファイル名を渡したら、.jpgなどの部分だけ削除されてコントローラーが受け取ってしまう
どうすれば拡張子の部分も受け取れますか?URLエンコードしても同じだった
0696nobodyさん2011/10/14(金) 13:56:40.84ID:???
>>690
そういうのはafterFindでいいんじゃね?
0697nobodyさん2011/10/14(金) 15:48:22.55ID:???
>>696
どういう風に>>690をafterFindするんだ?
0698nobodyさん2011/10/14(金) 18:09:04.28ID:???
>693
bakeしてみたコントローラ見てみるとif ($this->data) などという風に使われている。「出来るから間違いじゃない」という意味では間違いじゃないんだろうが、CakePHPの規約としてはdata使うようになってるみたいだね。
(cookbookだかチュートリアルのどこかにフォームのデータを一元化する為にdataを使うのが正しい、というような事が書いてあった希ガス)
0699nobodyさん2011/10/14(金) 18:45:42.02ID:???
>>697
696じゃないけど、viewに渡すデータ自体の画像の部分をno_image.gifに置き換えちゃうってことじゃないの?
そうすればデータには必ず画像が入ってるからviewはすっきりする。
ただ、MVCの役割を考えるとそこでやるべきかどうかは考えた方がいいかもね。
0700nobodyさん2011/10/15(土) 00:20:40.03ID:???
>>664 なんですが、
>>665で言われてる結合する、というのがよくわからないんです。
find の第2引数で 'joins' というのがありますが、
これだと 'conditions' でそれぞれのテーブルの対応するフィールドの値を入れてやって関連づけを行わないといけないですよね?
SQL はほとんどわからないので、的外れなことを言ってるかもしれませんが、
2つのテーブルを関連性などなしで単純に全て混ぜてしまって作成日で降順をかける、なんてことは可能でしょうか?
詳しく解説などされているサイトなど教えてもらえると助かります。
0701nobodyさん2011/10/15(土) 00:23:22.40ID:???
今からやるなら1.3と2.0どっちがいいですか?
0702nobodyさん2011/10/15(土) 00:41:56.90ID:???
>>700
そういうつもりならなおさら、DB側でViewを定義したほうがいいと思う。
0703nobodyさん2011/10/15(土) 00:42:16.57ID:???
英語マニュアルとAPI見ながら勉強するのに抵抗無ければ2.0でいいと思うよ
まあどのバージョンでも同じ話ではあるけど。
0704nobodyさん2011/10/15(土) 01:05:06.89ID:???
>>701
まだ1.3。
後々2.0がはやってくるとは思うけど、RC止まりなので勉強以上の事はまだ時期尚早。
0705nobodyさん2011/10/15(土) 01:44:09.51ID:???
>>699
なるほど。そう言う意味か。
俺はafterFind使わずに全てviewでやってるな。
日付のフォーマット変更する時もヘルパー作って。

でも、ヘルパーで対応するのは限界があるし、ifが増えて困ってたんだ。
afterFindを使いこなしてviewの内容を簡素にするのも有りだな
07067002011/10/15(土) 02:13:04.18ID:???
>>702
もう少し詳しく教えてもらえますか?
DB 側で View を定義っていうのは具体的にはどういうことでしょうか?
0707nobodyさん2011/10/15(土) 02:19:07.40ID:???
>>706
すんごいヒント与えてもらってるんだから、あとは使ってるDBのマニュアル見た方がよろしいのでは
0708nobodyさん2011/10/15(土) 16:01:05.22ID:???
すんごいヒントっつーか、答えそのものだと思うけど。
ビューの作り方はデータベース名 view とかビューとかで調べればすぐ分かるよ。
(データベースによって細かいとこ違った気がするから、自分で調べた方がいい)

要件に合ってるか分からんけどな。
0709nobodyさん2011/10/15(土) 17:06:30.92ID:???
MVCのVとごっちゃになってるのでは?
07107002011/10/15(土) 18:45:56.65ID:???
>>709
まさにそうでした。
MySQL に View という機能があるということなのですね。
今調べ始めましたが、MySQL文はちんぷんかんぷんなので苦戦中です。
View を作ってそこからデータを取ればいいということは理解しました。
みなさんありがとうございました。
0711nobodyさん2011/10/16(日) 10:45:57.40ID:85Bgp1nu
CakePHPは、Ruby on Railsの概念の多くを取り入れた、フレームワークです
とありますが、それはすなわち、Ruby開発者
まつもとゆきひろ がいなかったら
Cake phpは生まれなかった? ということですか。
0712nobodyさん2011/10/16(日) 10:47:33.20ID:???
Railsの開発にはまつもと氏は関わっていない。
というよりむしろ、Rubyがここまで広まったのはRailsがあったから、って事だったんじゃないかなぁ。
0713nobodyさん2011/10/16(日) 10:53:57.12ID:???
>>695わかるひといない?
0714nobodyさん2011/10/16(日) 11:09:56.42ID:85Bgp1nu
>>712
かかわっていですけど、CakePHPが影響をうけた
Ruby on Rails は まつもとゆきひろがいなかったら
生まれてなかったわけですよね。
0715nobodyさん2011/10/16(日) 11:11:11.55ID:???
RubyがなかったらPHP on Railsなんかが生まれてただけでしょ
PHPの部分は好きな言語に変えろや
0716nobodyさん2011/10/16(日) 13:25:11.56ID:???
>>713
RouterがURLを解釈してくれるからですよ。
$this->paramsを覗いてみればいいよ。
もしくは http://example.com/controller?arg=eroero.jpg みたいに普通のGetで渡すか。

行き詰まったらとりあえずdebug($hoge);で状態を把握すべきすよ。
0717nobodyさん2011/10/16(日) 15:03:58.44ID:???
>>713
確か拡張子が $this->params->url['ext'] とか、そんなとこに入ってたかと。
たとえば hoge/test.jpg で $this->params->url を debug したら、
Array(
'ext' => 'jpg'
url'' => hoge/test
)
こんな感じになってる。
だからコントローラーで拡張子の有無を調べてやるといいと思う。
0718nobodyさん2011/10/16(日) 15:38:22.27ID:???
了解。ありがとう!
0719nobodyさん2011/10/16(日) 16:36:56.47ID:???
こちらのスレは親切な人が多いのに
どうしてRuby on railsのスレは冷たい人間が多いの?

選択するFWでこんなにも平均的な人間性に優劣がつくもんなの?
0720nobodyさん2011/10/16(日) 17:08:46.25ID:???
マジレスすると、いい人と悪い人の数が少ないだけかと。
だから悪い奴のレスが目立つのであって、いい人もいるだろ。
ただし、悪いレスが多いスレにいい人が書き込むかは疑問だが。
0721nobodyさん2011/10/16(日) 17:46:52.93ID:???
マニュアル読んで来いクソ!みたいなのは別に冷たいわけじゃなくてLinuxとかOSS流の親切だろ。
一所懸命マニュアル書いた奴がいるんだから一所懸命マニュアル読め。ってのは間違ってない。
0722nobodyさん2011/10/16(日) 18:01:49.02ID:???
マニュアル嫁はよーするに、レベルが低すぎる質問しとる、みたいな感じじゃね?
おみゃーさんだってたとえば、三角関数の授業してる時に乗算の話が分かりません!なんて奴居たら追い出したくなるだろ?

まぁ問題は、大抵、質問してる奴は、自分がレベル低すぎってーのを分からないし認めたくないってー所にあるんだよな。
0723nobodyさん2011/10/16(日) 18:12:58.04ID:???
function detail($id){
 $data = $this->User->findById($id);
 if (!empty($data)) {
  $this->set('data', );
 } else {
  $this->redirect('/user/error');
 }
}
function delete($id){
// detailと同じ内容
 if ($this->data) {
  // 削除用のソース
 }
}

こんな感じのuser_controller.phpがあるとします。
削除(delete)する際に登録されているデータを表示して
「このデータを削除しても良いですか?」という画面を表示したいのですが、
deleteアクションにdetailと同じソースを書いてるので違和感があります。

何か良い書き方は無いでしょうか?
0724nobodyさん2011/10/16(日) 21:04:13.48ID:???
>「このデータを削除しても良いですか?」という画面を表示したいのですが、
標準で出てなかったっけ?
Javascriptでダイアログが出ると思ってたんだけど。

それじゃなくて、わざわざ削除してもいいですか画面だしたいのなら、削除してもいいですかアクションを作るか、状態を記録して、フラッシュで表示してやるとかなんとかだろうなぁ。
0725nobodyさん2011/10/16(日) 21:15:43.58ID:85Bgp1nu
cakephpで吐き出されるコード?は、
smarty式ですか?
php直書き式ですか?

0726nobodyさん2011/10/16(日) 21:55:26.93ID:???
昔はセキュリティーの関連からわざと
javascriptをオフにしてるユーザーが多いでしたけど
現在はどうなんでしょ?
そこらへんも考えて開発すべき?
0727nobodyさん2011/10/16(日) 22:53:07.52ID:???
>>726
ajaxと付くものは総じてjavascript有りきの機能です。
よほどのひねくれ者以外、javascriptをOFFにしていたら、Googleすら不便に感じる時代です。

ONにしていると考えてよいです。
クロスブラウザ設計を考えて、jqueryなどのjavascript用FWを導入するのを強くおすすめします。
07287232011/10/16(日) 23:38:10.16ID:???
>>724
いや、そう言う質問じゃなくて、>>723のようなソースを書くと、
「詳細画面」以外にも同じようなコードを書く必要があるので、
どうにか簡略化できないものか?と思っての質問です。

あと、javascriptではなくて、確認画面を出したいのです。
0729nobodyさん2011/10/17(月) 00:27:28.11ID:???
>>728
普通にメソッドで抜き出せば?
07307232011/10/17(月) 01:01:02.78ID:???
>>729
↓こうするという事ですか?
function delete($id){
 $this->detail($id);
 if ($this->data) {
  $this->User->deleteAll(array('User.id' => $id));
 }
}

これでも問題ないと思うのですが、、後々困らないか心配・・・
0731nobodyさん2011/10/17(月) 01:11:58.70ID:???
>>730
729はこういうことを言いたかったんだと思う。

function detail($id){
 $this->_common($id);
}
function delete($id){
 $this->_common($id);
 if ($this->data) {
  // 削除用のソース
 }
}
function _commonl($id){
 $data = $this->User->findById($id);
 if (!empty($data)) {
  $this->set('data', );
 } else {
  $this->redirect('/user/error');
 }
}
■ このスレッドは過去ログ倉庫に格納されています