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

【PHP】フレームワーク CakePHP 11ホール目【v1.3】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/02/16(水) 21:52:35ID:zCTGjUMq
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
0270nobodyさん2011/03/03(木) 02:42:06.82ID:???
2冊ほど持ってるけど、どっちもオススメはしないなぁ。
それなりに役には立ってるけど、不満点もそれなりにあるからなぁ。
0271nobodyさん2011/03/03(木) 03:02:42.33ID:???
俺も2冊持ってるけど、どっちも同じ作者だw(CakePHP辞典の人)
0272nobodyさん2011/03/03(木) 04:10:32.91ID:???
CakePHP1.2ガイドブック
0273nobodyさん2011/03/03(木) 07:15:43.65ID:???
CakePHP1.3.7を使ってるんだけど
cake/libs/validaton.phpのminLength, maxLengthのメンバ関数でmb_strlen使ってるんだけど
これって日本語でも対応してますってこと?
0274nobodyさん2011/03/03(木) 07:27:41.47ID:???
>>273
そうだよ
0275nobodyさん2011/03/03(木) 16:09:06.49ID:???
1.2系使ってたときはmodelに
function maxLengthJP($wordvalue, $length) {
$value = array_shift($wordvalue);
return (mb_strlen($value, mb_detect_encoding($value)) <= $length);
}
とか書いてたんだけど
そういうのやらなくて良くなったってことかな?
0276nobodyさん2011/03/03(木) 17:57:07.62ID:P58hQK5O
セッションコンポーネントにて...

セッションがタイムアウトしたのと、
ログアウト時に明示的にdestroyしたのって区別つかないのかな?
expireが取得できるメソッドでもあればいいんだけども
0277nobodyさん2011/03/04(金) 02:57:20.01ID:8qRY678r
>>243
大幅なデザイン変更あったときは
デザイナがhtmlファイル作って、PGがテンプレに移して・・・
って作業をやり直しになるの?

あくまでデザインの変更なんだからPGは一切作業無しで・・・
という風にできる方法はないのかな?
0278nobodyさん2011/03/04(金) 04:38:20.99ID:???
>>277
お互いにきっちり話し合ってデザイナー向けにマニュアルでも作るしかないんじゃないすかね。

でも実際大変じゃないの?
例えば入力フォームのページ1個作るにしたって
デザイナーにform helperの使い方を調べてもらって・・・なんてお互いに不安にしかならないもんなw
0279nobodyさん2011/03/04(金) 14:10:42.75ID:???
smartyはそう言うのを解決してくれるって姉さまが言ってた
0280nobodyさん2011/03/04(金) 14:32:27.79ID:???
頑張ってctpをSmartyに置き換えてもヘルパーは使う事になるから無意味
0281nobodyさん2011/03/04(金) 18:29:37.51ID:???
Smartyのヘルパー使えよ
0282nobodyさん2011/03/04(金) 19:12:13.54ID:???
CakeはFormHelperとHtmlHelperは必須といって良いレベルだからな。
特にFormHelper。
Smartyのヘルパーがどういうものか知らないけど、
置き換えられるものじゃぁないと思うよ。
FormHelperを使わないことで発生する問題や制約を飲み込めるなら、
使ったら良いんじゃないかな。
Smartyの囲い文字もctpのphpタグも、変わらないと思うけどね。
0283nobodyさん2011/03/04(金) 20:47:18.49ID:???
データベースに保存した画像をビューで出力したいです。
以下のようにしたけど、表示できませんでした。

※コントローラ
function index(){
$images = $this->Image->find('all');
$this->set('images',$images);
}

※ビュー
foreach ($images as $image) {
$photo = base64_encode($image['Image']['contents']);
echo "<img src='data:image/jpg;base64,${photo}' />";
}

ちなみに、コントローラ側からechoするとちゃんと表示されます。

参考にした記事
http://matya.dyndns.info/diary/?p=283
0284nobodyさん2011/03/04(金) 20:48:58.33ID:???
俺としてはHtmlHelperはいらないと思うが、
FormHelperは必須だな。特にCMS系システム開発には。

でも、FormHelperを開発するのってそれほど難しくないよね。
みんなもCake使う前は、自作のFormHelper作ってたんじゃないか?
だから、どうしてもSmartyをビューで使いたい場合は、
Smarty用のFormHelperを作っても良いと思う。Cakeの書式に合わせて。
0285nobodyさん2011/03/04(金) 21:34:56.65ID:6a/ByBcS
Lithium 0.9.9でユニットテストをしようとしたんですが
/test/にアクセスしても、自分が作ったテストクラスが表示されません
解決方法知っておられたら教えてください。
0286nobodyさん2011/03/04(金) 21:41:22.39ID:???
スレ間違ってますよ
0287nobodyさん2011/03/05(土) 01:09:29.31ID:???
FormHelperなんて使ったことないな
まともに動かない
0288nobodyさん2011/03/05(土) 01:14:50.42ID:???
まともにってどういう意味で?
フォーム処理のやりとりに関しては、普通に出来てるけど。
0289nobodyさん2011/03/05(土) 01:38:37.36ID:???
CakePHP使う前はFormHelper的なものは使ってなかったなぁ。
だから最初はフォーム書くだけなのにphpなのめんどくさいって思ってた。
まぁ正直今でもちょっと思ってる。
でもちゃんと使ってるよ。
0290nobodyさん2011/03/05(土) 14:11:52.90ID:???
モデルから読み書きするときだけえ使えばええんちゃうん
0291nobodyさん2011/03/05(土) 14:48:19.68ID:???
>>289
inputならわかるけど、selectやcheckbox(などの選択肢)はどうしてたの?
PHP使わないと逆に難しいと思うんだが。
0292nobodyさん2011/03/05(土) 23:54:54.72ID:???
ねえねえ何で君たちはこんな時代遅れのフレームワークを使い続けるの?
もっと良いフレームワークあるでしょ
0293nobodyさん2011/03/06(日) 00:51:15.65ID:???
>>292
お前の言うもっと良いフレームワークを教えてくれ。
0294nobodyさん2011/03/06(日) 01:03:43.63ID:???
CakePHPの2.0.0っていつになったら正式リリースされるのかね?
0295nobodyさん2011/03/06(日) 01:55:17.88ID:5hZ883U1
夏以降って聞いたよ
0296nobodyさん2011/03/06(日) 02:11:40.72ID:???
いつも>>292-293この流れで止まるなw
煽りに来たんだろうが、あっさり論破されちゃ世話無いぜ
0297nobodyさん2011/03/06(日) 02:15:51.79ID:???
>>296
いやきっと >>292 みたいな人はcakePHPに使われるような仕事して
ストレス溜まってるんだろうなーって生暖かい目で見てるよw

よく小学校の頃、学校なんてクソ。無くなれ〜とか思ってたじゃん。それと同じだろ。
0298nobodyさん2011/03/06(日) 02:18:28.83ID:???
CakePHPはお世辞にもモダンなフレームワークとは言えないけど、
良いフレームワークだよ。
0299nobodyさん2011/03/06(日) 03:09:18.50ID:???
CodeIgniterでいいやん
0300nobodyさん2011/03/06(日) 04:38:39.78ID:???
CodeIgniterはもっと古臭いフレームワークだからなぁ。
まったく興味がわかない。
0301nobodyさん2011/03/06(日) 11:18:22.21ID:???
MVACアーキテクチャができるFWないかな
0302nobodyさん2011/03/06(日) 12:25:25.49ID:???
M = モデル
V = ビュー
A = アクション?
C = コントローラー
0303nobodyさん2011/03/06(日) 14:37:58.37ID:???
もうMCだけでいいよ
0304nobodyさん2011/03/06(日) 16:00:47.25ID:PLgQNz0S
デザインとシステムの部分を切り分けるのに最も都合良いFWってなんだろう?
ちょっとしたデザイン変更でいちいちシステム屋が出ていくのもねぇ
0305nobodyさん2011/03/06(日) 16:31:51.55ID:???
意外とSmartyなんじゃないか?
0306nobodyさん2011/03/06(日) 16:44:51.04ID:???
Smartyはねーだろ…
0307nobodyさん2011/03/06(日) 17:01:10.08ID:???
なぁ、そんなことより
CakePHPの2.0.0はいつくらいに正式リリースされるのよ?
0308nobodyさん2011/03/06(日) 17:14:43.69ID:???
>>304
デザインとシステムの両方がhtml部分に手を入れる必要があるから、
切り分けは出来ないだろう。
無理を承知で言えば、cssはデザイナーの領域だから、
なるべくcssで頑張ってもらう。
0309nobodyさん2011/03/06(日) 18:00:21.86ID:???
システムを使う処理にはどうしてもプログラム書かないと駄目だもんな。
で、PHPはDreamweaverで反映されるけど、プレビューはサーバがないと駄目。
だから、完全に分離できないとデザイナーが手間かかるし、
デザインを表示させる為に下手にソースから得られたら、プログラマが困る。
0310nobodyさん2011/03/06(日) 18:01:57.60ID:???
普通は一番最初にHTMLの紙芝居をお客さんに見せて
Goが出たらそのHTMLをテンプレート化するだろ。
簡単な修正の場合はCSS含めてプログラマがやるし
大幅な修正や画面追加はデザイナに任せればええやん。
0311nobodyさん2011/03/07(月) 16:31:11.34ID:2kfcEYNx
Web Applicationを綺麗に設計するためのMVACという考え方 - Dive into the Tech World! <http://d.hatena.ne.jp/shiba_yu36/20110303/1299123350>;

MVACってどうなんだろ
0312nobodyさん2011/03/07(月) 16:41:54.60ID:???
ファイルや処理を細分化するのは、1ファイルのデータ量を減らして
同じコードを書かなくても良いという目理とがあるけど、
ファイル数が増えてややこしくならないか?という懸念もある。
0313nobodyさん2011/03/07(月) 17:52:16.77ID:???
規模によるんだろうけどな。
俺が扱ってる規模なら不要だな。
JAVAでも使っとけって思う。
0314nobodyさん2011/03/07(月) 21:38:40.02ID:???
Yiiのスレもよろしく
0315nobodyさん2011/03/08(火) 21:31:52.80ID:PsYppCp1
ビューやコントローラ、モデルなどで、金額*税率を返す関数を使いたいんですが、
どこで定義するのがベストでしょうか?
ちなみに金額と税率はDB内にあり、別テーブルに入っています。
0316nobodyさん2011/03/08(火) 21:48:16.11ID:???
じゃあモデルでいいんじゃね
0317nobodyさん2011/03/08(火) 22:37:46.87ID:???
コンポーネントは?
0318nobodyさん2011/03/08(火) 22:53:06.76ID:PsYppCp1
>>316
どのモデルに書くのが良いんでしょう?

>>317
金額*税率が必要な部分で毎回コンポーネント読み込むんでしょうか?
0319nobodyさん2011/03/08(火) 23:11:48.23ID:PsYppCp1
小出しで申し訳ないんですが、
Array
(
  [Item] => Array
    (
      [0] => Array
        (
          [id] => 2
          [name] => aaaa
          [price] => 1000
          [created] => 2011-01-01 04:41:50
          [modified] => 2011-01-01 04:41:50
        )
      [1] => Array
        (
          [id] => 3
          [name] => bbbb
          [price] => 1300
          [created] => 2011-01-01 22:17:20
          [modified] => 2011-01-01 22:17:20
        )
               :
    )
)
こんな感じで、商品DBには税抜価格が入っているんですが、
別テーブルに税率フィールドがあり、それを掛けた値を表示させたいのです。
0320nobodyさん2011/03/08(火) 23:23:55.87ID:???
>>319
俺ならモデルから税率データを取ってきてsetに入れて
ビューで計算して表示する。
0321nobodyさん2011/03/08(火) 23:27:37.73ID:???
#Controller
$this->set('TaxConfig', $this->TaxConfig->find('first') );

#View
価格:<?php echo number_format( $data['Item']['price'] * $TaxConfig['num']); ?>

こんな感じで。
0322nobodyさん2011/03/08(火) 23:42:55.57ID:PsYppCp1
>>320-321
お〜。とりあえずそれで行ってみようかな?
0323nobodyさん2011/03/09(水) 12:25:58.46ID:???
jsヘルパーで質問です。

jQueryを使用して、下記のようにjsヘルパーでサブミットボタンを2個並べてます。
action「jstest」は、10秒待ってレスポンスを返すだけのメソッドです。
保存1、保存2と間をおかず連続してボタンを押した際、end2のalertが表示されるのが
保存1を押してから約20秒後となります。
期待してるのは約10秒後にend1、2のalertが連続表示されることなのですが、
なにかおかしい点はありますでしょうか?

<?php e($js->submit('保存1',array(
'url'=>array('action'=>'jstest'),
'buffer'=>false,
'complete'=>'alert("end1");'
)
)); ?>
<?php e($js->submit('保存2',array(
'url'=>array('action'=>'jstest'),
'buffer'=>false,
'complete'=>'alert("end2");'
)
)); ?>
0324nobodyさん2011/03/09(水) 12:44:59.72ID:???
コントローラーを太らせたくなくてロジックを全部コンポーネントで書いてたら
コンポーネントが100個ぐらいになった
0325nobodyさん2011/03/09(水) 17:15:23.38ID:4pX38QJO
ビューやコントローラで共通で使える関数ってどこで定義したらいいですか?
0326nobodyさん2011/03/09(水) 19:03:25.55ID:???
>>325
本当にModelやComponentにも属さないなら app/vendors/ 以下だね。
0327nobodyさん2011/03/09(水) 21:23:05.27ID:???
Cake1.2です

何箇所か画像をアップロードする機能をもたせていて現状下のようになっています。

1.画像を保存する処理を書いたファイル
2.渡された変数を適切なフォーマットにして1.を呼び出すファイル
3.ユーザーが画像をアップロードする際に使うファイル

3.でフォームから画像を指定してsubmit
2.が受け取って色々いじった後1.にデータを投げて画像を保存

1.2.では文字を表示する必要は一切無いため画像を保存したら
3.にリダイレクトをかけたいのですがどのようにすればいいかわからず悩んでいます。

よろしくお願いします。
0328nobodyさん2011/03/09(水) 22:26:17.55ID:???
こちらこそよろしく!
0329nobodyさん2011/03/10(木) 02:46:04.73ID:???
よろしくよろしく!
0330nobodyさん2011/03/10(木) 13:00:58.69ID:???
夜露死苦
0331nobodyさん2011/03/10(木) 13:20:34.19ID:???
>>327
マジレスすると、何いってんのかよくわからん。
何だよファイルって。
コントローラー、ビュー、モデル、コンポーネント、ヘルパー、ビヘイビア、アクション
を使って説明を書き直してくれ。
0332nobodyさん2011/03/10(木) 13:57:01.02ID:???
すいませんがそれは教えられません
0333nobodyさん2011/03/10(木) 14:46:49.27ID:???
それでは、お引き取りください
0334nobodyさん2011/03/10(木) 22:40:30.49ID:???
>>327
1と2を3のファイルにぶっこんどけ
0335nobodyさん2011/03/11(金) 04:04:16.21ID:???
>>334
そのようにします。ありがとうございました。
0336nobodyさん2011/03/11(金) 10:09:36.88ID:???
とりあえずテーブルをつくり、
scaffoldで値を入れてみようと思ったのですが、
外部キーをうまく認識してくれません。

テーブルは、次の二つを作成しました。

products
 id, created, updated, name, product_type_id

product_types
 id, created, updated, name

両コントロールは、以下のように作成しました。

//class ProductsController extends AppController
class ProductTypesController extends AppController
{
//public $name = 'Products';
public $name = 'ProductTypes';
public $scaffold;
}

product_types/addで任意のデータを追加した後
products/addでさらにデータ追加しようと思ったのですが、
product_type_idのセレクトボックスに選択できる値が入っておらず、
データを追加できませんでした。

products/add時にproduct_typesテーブルの内容を選択肢として表示するには
どのようにすればよろしいのでしょうか。
よろしくお願いします。
0337nobodyさん2011/03/11(金) 10:15:46.74ID:???
>>336
外部キーをつける対象が逆。
0338nobodyさん2011/03/11(金) 10:16:22.95ID:???
ごめん、嘘。
0339nobodyさん2011/03/11(金) 10:17:13.31ID:???
アソシエーションの設定教えてくれ
0340nobodyさん2011/03/11(金) 11:21:00.08ID:???
>339
ありがとうございます。

モデル・ビューともに作成していませんでした。
scaffoldでは、必要ないみたいなことを読んだのですが、
違ったということでしょうか。

後で、アソシエーションを設定するモデルファイルを作成してみます。
0341nobodyさん2011/03/11(金) 12:31:08.42ID:???
ビューはいらないけどモデルはいるよ。アクションもいらない
(最近scaffold使ってないから記憶薄いけど)
0342nobodyさん2011/03/11(金) 13:01:08.61ID:???
原因不明だけど、scaffoldでセレクトボックスにだけ値が入らないことはよくある。
気まぐれに入っていたりもする。
でもそのまま使うことはないからみんな放置してるんじゃないかな。
0343nobodyさん2011/03/11(金) 13:12:04.29ID:???
scaffoldって使ったことないなぁ。
使い道がよく分からん。
0344nobodyさん2011/03/11(金) 13:17:13.19ID:???
コントローラーやモデルって使った事無いなあ
使い方がよくわからん
0345nobodyさん2011/03/11(金) 13:20:52.41ID:???
scaffoldで日本語表示出来ればいいのに
0346nobodyさん2011/03/11(金) 13:55:53.93ID:???
俺はWebrootにhtml置いて使ってる
コントローラとかモデルは小規模サイトだし必要ない
0347nobodyさん2011/03/11(金) 23:09:11.08ID:34T7XTKb
http://d.hatena.ne.jp/bennylee/20090402/1238665508
↑この問題が自分の環境でも起こっているんですが、
解決法などありますか?

Cookieコンポーネントを使って配列を書きこむと、一番最後の配列以外がArrayとなってデータが消えてしまいます。
Array
(
  [0] => Array
  [1] => Array
  [2] => Array
    (
      [id] => 1
      [ab] => 2
      [cd] => 1
      [ef] => 3
    )

)
↑このように、同じデータを追加しているはずなのですが、末尾のデータしか残っていません。
0348nobodyさん2011/03/11(金) 23:11:03.03ID:34T7XTKb
http://www.materializing.net/archives/2011/02/03130231.php
この記事でも同じようなこといっていますね。

「cakephp cookie 配列」などで検索すると出てきます。
0349nobodyさん2011/03/12(土) 10:57:04.39ID:???
最近以下のように対応したんだが
Cookie::readの最後で
return $this->__values[$key][$names[1]];
//return Set::extract($this->__values[$key], $names[1]);

いいのかな。。
0350nobodyさん2011/03/13(日) 23:51:06.58ID:JC24c2uV
コントローラでの$this->Model->validates()の使い方がわからん。
事前に何をsetしようがcreateしようが必ずtrueが帰ってくる。2日悩んだがお手上げ状態
たしけて
0351nobodyさん2011/03/14(月) 03:21:55.17ID:???
>>350
setしたか?Modelにsetしないと値は渡らないぞ
0352nobodyさん2011/03/14(月) 03:25:24.81ID:???
すまん、setしたって書いてるな・・。俺は↓のようにやってるよ。

$this->Model->set($this->data);
if ($this->Model->validates()) {
 $this->Model->save($this->data);
}
0353nobodyさん2011/03/14(月) 10:38:15.65ID:3Afc8bli
>>352
そのとおりやってるんだけど、どんな値を渡してもtrueが帰ってくる。
0354nobodyさん2011/03/14(月) 17:45:24.61ID:???
>>353
じゃ、文字コード疑ってみろ。モデルの。
たまにそこがShift_JISになっていて、エラーにならない時がある。
0355nobodyさん2011/03/15(火) 11:45:26.02ID:pIi0VVUh
>>354
UTF-8だったわ。
<?php
class Stock extends AppModel {
  var $belongsTo = array('Item', 'Size', 'Color');
  var $validate = array(
      'name' => array(
        'rule' => array('notEmpty'),
      ),
      'item_id' => array(
        'rule' => array('notEmpty'),
      ),
      'size_id' => array(
        'rule' => array('notEmpty'),
      ),
      'color_id' => array(
        'rule' => array('notEmpty'),
      ),
      'quantity' => array(
        'rule' => array('numeric'),
        'message' => '半角数字で入力してください'
      ),
  );
}
?>
なんだ?バリデーションのかき方間違ってるわけじゃないよな
ファイル壊れてんのかね?
0356nobodyさん2011/03/15(火) 11:54:53.37ID:???
ちょwwwお前バリデーションの書き方間違ってるじゃんw
なんでnotEmptyを配列にしてるんだw

'name' => array(
 array(
  'rule' => 'notEmpty'
 )
)

こうだろ。もう少し勉強しろよ
0357nobodyさん2011/03/15(火) 12:03:25.03ID:???
あ、すまん。俺は1つのフィールドに複数ルール書くから↑してるけど、
'name' => array(
  'rule' => 'notEmpty'
)

これでも動くよ。(むしろこっちが一般的かも知れない)
0358nobodyさん2011/03/15(火) 15:15:08.89ID:???
書き方間違ってないなら、
もう本体のソースにdebug()入れて目デバッグするしかないんじゃないの?
こんなところで聞くよりずっとはやいぜ。
0359nobodyさん2011/03/15(火) 17:30:17.19ID:pIi0VVUh
>>356
サンクス。
いろいろ試したが、
そのコードに、'required' => true,つけたらfalse帰ってきたわ。

'name' => array(
 array(
  'rule' => 'notEmpty'
 )
)

'name' => array(
 array(
  'rule' => 'notEmpty'
  'required' => true,
 )
)
0360nobodyさん2011/03/15(火) 18:34:32.58ID:???
お前、根本から間違ってるよ。
冗談抜きでcookbookの例見ながらやれよ
0361nobodyさん2011/03/15(火) 21:33:40.21ID:pIi0VVUh
>>360
いや、ブックもAPIも毎日見てるよ。
何が間違ってる教えてくれ
>>369のやりかたで今のとこうまくいってるんだが
0362nobodyさん2011/03/15(火) 22:54:50.70ID:???
見てたら何で>>355なコード書いてんだよ。後出しで言い訳するなって。
0363nobodyさん2011/03/16(水) 00:11:30.27ID:H/WJFHht
そもそもルールで、「空はダメ」って指定してるのに
requiredが必要な設計が悪いんだよ。
0364nobodyさん2011/03/16(水) 00:45:40.08ID:???
何故bakeしたものを書き直さないのか・・・
だからそういう凡ミスするんだよ。開発プロセスを見直せ
0365nobodyさん2011/03/16(水) 12:36:45.89ID:???
まぁrequiredだのallowEmptyだのnotEmptyだの、ややこしいといけばややこしい
0366nobodyさん2011/03/16(水) 14:38:25.17ID:???
CakePHPの売上を被災地に寄付しよう!
0367nobodyさん2011/03/16(水) 17:08:05.35ID:???
>>366
それは運営が決めることで外部から善意という名の圧力かけるような卑劣な方法は止めてくれ
0368nobodyさん2011/03/16(水) 17:41:11.35ID:OBkWdnDA
実際の開発でbakeって使ってますか?
0369nobodyさん2011/03/16(水) 19:10:01.24ID:aP3af6LX
cakephp 1.3.7
ダウンロードできないんだが・・・。

さばおち?
■ このスレッドは過去ログ倉庫に格納されています