トップページ⇒php
987コメント299KB

【PHP】フレームワーク CakePHP

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/18(土) 20:53:22ID:???
おら、とうとうガマンできなくて立てちまっただ

本家
http://www.cakephp.org/

10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/

マニュアル日本語化
http://www.cakephp.jp/doc/

日本語フォーラム
http://cakephp.jp/modules/newbb/

あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
0252nobodyさん2007/06/19(火) 12:44:17ID:???
長々書いてるけど、単に連想配列をループで書き換えるってだけだろ。
Set::merge使えばおわりじゃん。
0253nobodyさん2007/06/19(火) 14:07:17ID:???
>>251
お前バカだからもう来るなよ。
せっかくレスしてくれた>>246-247も読んでないじゃん
0254nobodyさん2007/06/19(火) 15:23:37ID:???
>>>253
お前より賢いよw
0255nobodyさん2007/06/19(火) 15:29:42ID:???
釣り堀
0256nobodyさん2007/06/19(火) 16:10:22ID:???
こういうのどう思いますか?

まず、ショッピングカートがあります。
そのショッピングカートはいろんなタイプの商品があります。
その商品タイプごとに入力できるデータ項目が違います。
(飲料商品タイプは内容量ミリリットル入力フィールドがあるけど、
雑誌商品タイプではISBNフィールドがあるなど。)

この場合に商品タイプごとに専用のテーブルをつくるのは
変な設計ではないと思いますが、この商品タイプを
CakePHPで作ったアプリの管理画面から増やそうと思ったら
create table文を発行することになると思います。
またこの商品タイプの管理画面を担当するphpファイルを
コピーして増やすことになると思います。

一般的にはbake等でプログラマが手動で追加していくコード・DB構造が
エンドユーザーが管理画面から操作することにより、
自動的にプログラムコードが拡張されていくようなイメージになります。

こういうのって気持ち悪いシステムなんでしょうか?
他にこのような自動的にプログラムが拡張されるような
仕組みを持ったものありますか?

このまま進めると大きな問題になりそうで不安です。
0257nobodyさん2007/06/19(火) 16:20:37ID:???
そもそも「商品タイプ」というものに必要な属性の抽出が出来てない感じをうけるな。

「飲料食品タイプ」の内容量ミリリットルって
「雑誌商品タイプ」でいうところの書籍重量ってのと、どう違うの?
逆にISBNコードってのは業界の商品流通コードなんですよ。各業界にも
あれこれあるでしょ?使うかどうかは別にして。
0258nobodyさん2007/06/20(水) 00:23:26ID:???
>>257
> そもそも「商品タイプ」というものに必要な属性の抽出が出来てない感じをうけるな。
世の中のすべての商品タイプをあらかじめ抽出なんて不可能でしょう?

> 「飲料食品タイプ」の内容量ミリリットルって
> 「雑誌商品タイプ」でいうところの書籍重量ってのと、どう違うの?
> 逆にISBNコードってのは業界の商品流通コードなんですよ。各業界にも
> あれこれあるでしょ?使うかどうかは別にして。
だからなんなんでしょうか?

例なんだから、細かいところにこだわりすぎ。
共通で汎用の商品タイプ作れとかそういう話ですか?
価格ドットコムで検索したことありますか?
不可能でしょ。そんなこと。
0259nobodyさん2007/06/20(水) 00:33:05ID:???
なんで顔真っ赤にして怒ってるんだ?w
0260nobodyさん2007/06/20(水) 00:41:44ID:???
>>259
荒らす気か? 話に参加する気がないのなら死ねよ。
0261nobodyさん2007/06/20(水) 02:21:55ID:???
横レスだがcake外の問題つうか、tableの設計と正規化についての問題と思われ
>>257 の「使うかどうかは別にして」というのはそういうことだと思うよ。
ただ「書籍重量」という例はちょっと悪いな

もしそういうものを作るんなら、たとえば
・商品カテゴリテーブル(id,商品名)
・商品詳細項目名テーブル(id,商品カテゴリid,項目名,項目タイプ)
・int項目タイプ詳細テーブル(id,商品カテゴリid,商品詳細項目id,値)
・varchar項目タイプ詳細テーブル(id,商品カテゴリid,商品詳細項目id,値)
・text項目タイプ詳細テーブル(id,商品カテゴリid,商品詳細項目id,値)

この4つですむじゃん。たとえばだけど

とにかく>>256は正規化でしらべやがれ、
DB板(ドラゴンボール板)に行け、そして戻ってくるな
つうか、初心者増えたのか?cake界は
0262nobodyさん2007/06/20(水) 02:26:57ID:???
>>261
それってデータベースレベルでのチェックができなくね?
つか、そういう使い方ってアリなのか…
0263nobodyさん2007/06/20(水) 02:34:35ID:???
そこらじゅうでcakeの話題が出てるからそんなかには素人もいるわな。
0264nobodyさん2007/06/20(水) 06:53:32ID:???
>232
>239
>242
>245
>256
厨発生中だな。

245と256は同一?
0265nobodyさん2007/06/20(水) 10:48:12ID:zjQXSfAj
ここより、PHP自体の話題と思ったので、【PHP】下らねぇ質問はここに書き込みやがれ 47 の>>626に書き込んだんですけど、
やっぱり、CakePHPが絡んでくるので、どうしてもCakePHPの説明が入ってしまいます。
ここの方がよかったかもしれません。
どなたかご回答お願いします。。
0266nobodyさん2007/06/20(水) 12:04:49ID:???
読みに行ったが、627で速攻答えが出てて禿げワロタ
なにがしたいのかわからん。タイプ数減らしたいだけか?
0267nobodyさん2007/06/20(水) 13:57:48ID:zjQXSfAj
<?php
class Bbs1Controller extends AppController
{
  var $m = ここに$this->Itemと同等のが入れたい

  function index()
  {
    $this->m->findAll()
  }
}

こんな感じのを想像していて、
$m(コントローラで使いたいモデル)をあとで変更できるようにしたいのです。
$this->Item->findAll()みたいな、モデルを使うところがたくさんあるので、
継承したあとに、var $mだけ書き換えれば、違うテーブルを使えるようになったらいいかなぁと思ったんですが。。。
get_object_varsではできませんでした。
0268nobodyさん2007/06/20(水) 16:31:30ID:???
>>267
PHPやめてRubyにしなよ。
みんなもっと親切だぜ?
0269nobodyさん2007/06/20(水) 16:59:59ID:zjQXSfAj
開発してるときはRailsのほうがいいんだけどな。
本番環境に移行するとなると、いろいろとめんどくさいんだよな。
0270nobodyさん2007/06/20(水) 17:58:58ID:???
>>267
class anyclass extends base
{
$model = 'default';
function index()
{
$this->{$this->model}->findAll();

}
function setter($model)
{
$this->model = $model;
}
}

$class = new anyclass();
$class->findAll();
$class->setter('other');
$class->findAll();
0271nobodyさん2007/06/20(水) 18:07:04ID:???
>>261
>DB板(ドラゴンボール板)に行け、そして戻ってくるな
>つうか、初心者増えたのか?cake界は

君のテーブル見る限り、君自身が完全に初心者なんだが…
0272nobodyさん2007/06/20(水) 18:15:21ID:???
>>269
ID:zjQXSfAj 君、急に口調変わるねぇ。
0273nobodyさん2007/06/20(水) 18:23:54ID:???
飲料のミリリットルは商品の大切な要素だけど
書籍重量って書籍が決まればそれに付随して一意に決まるだろ…
喩え出す奴が馬鹿すぎるとダメだなw
しかもそれに面白レスしてる261が別人ってのはにわかに信じがたい
さすがcakeかっけーぜ
0274nobodyさん2007/06/20(水) 18:57:14ID:???
意味不明
0275nobodyさん2007/06/20(水) 19:22:59ID:???
そもそもDB設計の質問する奴がスレ違い以前に板違い
0276nobodyさん2007/06/20(水) 19:29:34ID:???
>>273
自分を批判する奴がひとりだと思いたい中2病乙
0277nobodyさん2007/06/21(木) 09:42:13ID:???
>>261みたいな面倒なことしなくても
商品テーブル
・商品ID
・カテゴリID
・品名
・価格
・詳細説明
・更新日
・登録日
・特徴1
・特徴2
・特徴3
・特徴4
商品カテゴリテーブル
・カテゴリID
・カテゴリ名
・特徴1の項目名
・特徴2の項目名
・特徴3の項目名
・特徴4の項目名
でいいんじゃね?
特徴1〜4はカテゴリによって使用しなくてもOK。

書籍は「重量」を入れなくてもいいが、「作者名」・「ISBN」が必要。
飲料は「商品コード」は入れなくてもいいが、「容量」が必要。
0278nobodyさん2007/06/21(木) 10:12:17ID:???
>>277
特徴が5個になったらどうすんだ?
0279nobodyさん2007/06/21(木) 10:21:46ID:???
そんな第一正規形にもなってないテーブル作らないで下さい。
0280nobodyさん2007/06/21(木) 11:25:20ID:???
全然cakeの話じゃないやん
0281nobodyさん2007/06/21(木) 12:21:36ID:???
>>278
クライアントに「特徴が5つ以上必要なカテゴリが出てきたら
別途見積もりになりますのでご連絡下さい」と言えばOK

>>279
クライアントが満足して使えりゃそれでいいんだよ
0282nobodyさん2007/06/21(木) 12:25:37ID:???
それで満足するクライアントという特殊な条件下でなら提案しなくてOK
0283nobodyさん2007/06/21(木) 13:01:06ID:???
こんなレベルで仕事できるんだな。
0284nobodyさん2007/06/22(金) 07:56:43ID:???
でもcakeみたいにDB構造かえやすいフレームワークなら必要に応じて増やしていくのもありかとおもう今日この頃
0285nobodyさん2007/06/22(金) 10:50:28ID:???
それは足場段階でやることであって、運用段階でやることではない
0286nobodyさん2007/06/23(土) 02:10:21ID:???
>>281みたいなあほな仕事してた奴が、こないだ失踪した。
0287nobodyさん2007/06/23(土) 02:46:18ID:???
おまいらそろそろ馬鹿はほっといてcake話しようぜ。まあ大体いい情報はフォーラムかGoogleグループにでてるがな。
cake本はやくでないもんか。
0288nobodyさん2007/06/23(土) 02:52:45ID:???
1.2が正式になってからでいいよ
0289nobodyさん2007/06/24(日) 20:00:51ID:???
開発環境(Windows)から、本番環境(Linux)に移行するとき、何か気をつけたほうがいいことってあります?
本番環境はPHP+mod_rewriteが使えるApache+MySQLは使えるんですが、すぐ移行ってできるもんなんでしょうか?
そういうのを説明してくれているサイトって無いですよね。。
0290nobodyさん2007/06/24(日) 21:19:34ID:???
>>289
ディレクトリセパレータにcakeが用意してる定数DSを使うとか・・
特に気にせずとも動いちゃってるので気にしたことがないっす
0291nobodyさん2007/06/24(日) 21:29:19ID:???
>>290
え、cakephpのフォルダをそのまま本番ディレクトリへコピーするだけなんでしょうか?
webrootだけをdocumentroot下に置いて、それ以外は上に置くとかなんかありませんでした?
0292nobodyさん2007/06/24(日) 21:30:54ID:???
そんなもん使い方や設定によるだろ
一概にどうすればいいとは言えない
0293nobodyさん2007/06/24(日) 21:47:03ID:???
>>292
使い方や設定っていうと?
もうスタンダードな使い方でいいんですけど、そのままコピっておkですかね?
0294nobodyさん2007/06/24(日) 21:52:03ID:???
テスト環境つくってやってみるのが吉とおもわれ
0295nobodyさん2007/06/24(日) 22:12:50ID:???
>>294
ありがとうございます。
もちろんテスト環境つくってやるつもりなんですが、
やっぱり試行錯誤する感じでいくしかないですかね。
0296nobodyさん2007/06/25(月) 00:55:35ID:???
webrootだけをrootにおいて(つまりはhttpでアクセスを許可させて)後はアクセスできないようにしとくくらいじゃないか?
テスト環境で動くなら。
0297nobodyさん2007/06/25(月) 18:13:58ID:???
HTMLヘルパーに<input type="button">がないよな。。
0298nobodyさん2007/06/25(月) 19:46:41ID:???
$html->input('Unkos/unko' , array('type'=>'button'))
0299nobodyさん2007/06/26(火) 14:03:38ID:???
>>298
あざっす!
0300nobodyさん2007/06/27(水) 12:00:32ID:5woCK0g1
Cakeのディレクトリ構成がうまく理解できないです。
コントローラで、
webroot/temp/test.txt
を削除したかったら、unlink()にどう指定してあげればいいんですか?
unlink('/temp/test.txt');
初めこうしたのですが、$this->webrootという変数があったので、
unlink($this->webroot . '/temp/test.txt');
こうしたのですが、
これでもだめでした。
No such file or directoryとエラーが出てしまいます。
0301nobodyさん2007/06/27(水) 12:28:55ID:???
>300
適当なビューでecho $this->webroot;して試してみたらどお?
0302nobodyさん2007/06/27(水) 12:45:14ID:5woCK0g1
>>301
どういうことですか?コントローラからunlinkしたいんですが、、、
ためしにやってみましたが、
http://localhost/ 以下(コントローラ名含まず)が出力されました。
0303nobodyさん2007/06/27(水) 12:58:04ID:xI/8M0tS
win鯖で作ったプログラムをリナクスにそのまま貼り付けて使えるでしょうか?
鯖のOS変わるとプログラムの書き方も変わるんでしょうか?
0304nobodyさん2007/06/27(水) 13:05:02ID:???
>>300
unlinkの引数はURLじゃなくてパス。
システム内での実体のある絶対パスか相対パスを与える。

>>303
場合による
0305nobodyさん2007/06/27(水) 13:42:59ID:5woCK0g1
>>304
うーん、何度やっても同じエラーがでます。
具体的にどう書けばいいんでしょうか。。
0306nobodyさん2007/06/27(水) 14:01:16ID:???
>>305
$this->webrootに入ってるのは「http://localhost/以下」なんでしょ?
unlinkの引数はURLじゃなくてパスなんだから、$this->webrootをunlinkに
突っ込んでも無駄。
×unlink('http://localhost/hoge/temp/test.txt');
○unlink('/home/hoge/cake/app/webroot/temp/test.txt');
0307nobodyさん2007/06/27(水) 15:13:03ID:5woCK0g1
>>306
ご丁寧にありがとうございます。
ローカルとサーバでOSが違うので、相対パス(../../webroot/.......みたいな)にしました。
0308nobodyさん2007/06/27(水) 16:06:07ID:???
webrootのフルパスなら定数 WWW_ROOT で定義されてない?
0309nobodyさん2007/06/27(水) 18:10:43ID:???
レベル低っ・・・・フレームワーク使う前に、ほかにやることありそう
0310nobodyさん2007/06/27(水) 20:12:38ID:???
本質的な質問が最近全くでてこない件
0311nobodyさん2007/06/27(水) 22:00:42ID:???
フレームワーク使うメリットがまったく享受できないレベルのやつがいるな。
すべてのレベルのプログラマという名目だが、さすがにPHPの基礎くらいは出来てないとな。
0312sage2007/06/28(木) 09:22:28ID:???
これってまだ trunk でも実装されてないですよね?
ttp://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=550&forum=6
0313nobodyさん2007/06/28(木) 16:45:47ID:b86P8EwS
delにcondition付けろ
0314nobodyさん2007/06/29(金) 01:42:18ID:???
Cakeが焼けるようになっても作りたいお菓子がありません。
0315nobodyさん2007/06/29(金) 11:03:28ID:???
たとえば投稿記事に関連してコメントがつけられている場合、
投稿記事を削除するときに、コメントも削除したいんですが、どう書くんでしょうか。
アソシエーションは機能しているので、関連して呼び出すことはできています。
0316nobodyさん2007/06/29(金) 14:09:47ID:???
マニュアルのModelsのAssosiationsのdependentの辺りを100回読む
0317nobodyさん2007/06/29(金) 15:27:07ID:XE3VOI38
/app/tmp/の中にある画像をビューで表示させたいんだけど、どうもうまくいかないです。
相対指定じゃないといけないんでしょうか?よろしければコード例をお願いしたいです。。
0318nobodyさん2007/06/29(金) 16:01:14ID:???
webroot以下に置けよ
0319nobodyさん2007/06/29(金) 16:16:09ID:XE3VOI38
>>318
やっぱビューからじゃアクセスできないみたいですね・・・。
せっかくtmpがあるのに、webroot以下にまたtmpディレクトリ作るのはちょっとやな感じですが、そうします。
0320nobodyさん2007/06/29(金) 21:34:10ID:???
再掲

>レベル低っ・・・・フレームワーク使う前に、ほかにやることありそう
0321nobodyさん2007/06/30(土) 00:36:03ID:???
>>319
君におススメ!
http://www.amazon.co.jp/Ethna%C3%97PHP-LL%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFBooks-%E8%97%A4%E6%9C%AC-%E7%9C%9F%E6%A8%B9-%E4%B8%80%E4%BA%95/dp/4774131393/ref=pd_bbs_sr_1/249-9902260-8715545?ie=UTF8&s=books&qid=1182839405&sr=8-1
0322nobodyさん2007/06/30(土) 01:20:18ID:???
>>317はウェブの仕組みを勉強した方がいいだろ
0323nobodyさん2007/06/30(土) 02:06:58ID:???
>>317の人気に嫉妬
0324nobodyさん2007/07/02(月) 15:09:11ID:???
>>320-322
ん?ビューからwebroot以外にはアクセスできないだろ
0325nobodyさん2007/07/02(月) 20:59:09ID:???
レベル低いの上塗り乙
0326nobodyさん2007/07/02(月) 21:51:21ID:???
cakeの使用感が知りたくて来ましたがこのスレは何の参考にもなりませんでした。
本当に有難うございました。
0327nobodyさん2007/07/03(火) 11:48:07ID:???
なんで技術系のスレってキモいやつが多いんだろうね。
レベルが低かろうがほっとけばいいのに。
0328nobodyさん2007/07/03(火) 12:21:28ID:???
と、一言書くやつのほうがきもいなw
0329nobodyさん2007/07/03(火) 13:41:23ID:8i5o6UCU
セッションの値によって管理者用のメニューの表示・非表示を切り替えるような処理って、>196みたいに手動でセッションをセットするもんですか?
0330nobodyさん2007/07/03(火) 14:06:51ID:???
場合によるだろ。それだけでは分からん。

レイアウトを切り替えれば事が済むなら
自分で用意したAppControllerでコンストラクタをオーバーライドして
セッションの値によってlayout変数を切り替えればいいだろうし。
0331nobodyさん2007/07/03(火) 15:31:24ID:???
むしろ
>手動でセッションをセットする
という意味がわからない。
0332nobodyさん2007/07/03(火) 18:18:52ID:F4VpoSCG
テーブルを継承したいです。
でもcakePHPでは無理です。
Ruby on Railsをつかいましょう。
0333nobodyさん2007/07/04(水) 02:48:45ID:gN4ff124
>329

<?php if(isset($session->User)){ ?>

って普通にビューからコンポーネントにアクセスできるんですね。
自己解決しました。

>330
有難うございます
0334nobodyさん2007/07/04(水) 05:14:32ID:gN4ff124
アクションの中で
var_dump($_COOKIE);
としても全部のクッキーが表示されないのはCakePHP1.1のせい?なんかやってる?
0335nobodyさん2007/07/04(水) 10:10:25ID:???
クッキーをセットする時のパスが間違ってるとかじゃないのか。
Cake通さなければ普通に表示される?
0336nobodyさん2007/07/04(水) 21:48:23ID:???
Rhino on Railsってどうよ
0337nobodyさん2007/07/04(水) 22:10:12ID:???
ttp://www.aoky.net/articles/steve_yegge/rhino-on-rails.htm
これか?読んでないんだが、一言で言うと何?
0338nobodyさん2007/07/05(木) 00:53:35ID:???
そもそもJavaScriptのクロージャに悩まされる俺にはムリ
0339nobodyさん2007/07/05(木) 01:17:46ID:K+ZRu43A
>>334は>>335でした
さんきゅー
0340nobodyさん2007/07/05(木) 04:42:53ID:???
CakeのRSSヘルパーってないの??
0341nobodyさん2007/07/05(木) 09:02:47ID:???
探してから言え
0342nobodyさん2007/07/05(木) 17:37:10ID:???
一応ヘルパーみていったんだがあるのか
0343nobodyさん2007/07/05(木) 19:23:19ID:???
だから公式で探してから言えよ
0344nobodyさん2007/07/05(木) 21:33:11ID:???
つか、layoutとviewだけでRSSなら吐けるんじゃ・・
layoutの方で頭にRSS用のヘッダ吐くようにして。
03453442007/07/05(木) 21:33:49ID:???
その辺は昔CheeseCake PhotoBlogを参考にしていろいろやってた
0346nobodyさん2007/07/06(金) 04:07:26ID:???
いやな、rssは出力したんよ。ただrssのurlをheadにかくじゃん?あれをhtmlヘルパーみたいなのでかきたかったのよ。ヘルパーのヘルプみてもみあたらなかったからさ
0347nobodyさん2007/07/06(金) 10:06:30ID:???
>>346
わかりにくっ。link要素のことか。
1.1観た限りでは無さげ
0348nobodyさん2007/07/06(金) 10:41:52ID:???
rss出力自体をさすがにヘルパーで出せないだろと思ってたからヘルパー使う=リンクみたいな前提があっちゃったのよ。一個前のレスで確かにわかりづらいなとオモタよ!
0349nobodyさん2007/07/06(金) 14:15:24ID:???
みなさんDATE型、というかTIMESTAMP型の扱いってどうしてますか?

例えばDB(他は試してないけどpostgreSQL7.x 8.x)に
birthday DATE
って列があって、

cakePHP側ではビューに
$html->dateTimeOptionTag('Profile/birthday', 'YMD' , 'NONE', $html->tagValue('Profile/birthday'), array())
こんな感じでコントローラーに受け渡してしまえば、
コントローラーでは
$this->Profile->save($this->data)

これでサックリ、
と普通だったらそうなんですが、
何も選択してないままだとSQLに
birthday=''
を吐き出してしまって、DBからいつも
「DATE型やっちゅうのに何おまえ(空)文字入れようとしとんねん!」
と怒られるんです。

かといって誕生日なんて(システム的にどーでもいい)情報、NOT_EMPTYにできないし
仕方がないのでコントローラーでわざわざSQL書いたり、
空白だったら1970-1-1にしといて、ビュー側で1970-1-1だったらNULLと同じ扱いにする、
などなど、日時情報にイチイチぶさいくな事してるんだけど、
どこにも話題が無いって事は自分がぶさいくなだけで絶対
何かcakePHP的に合理的な方法があるはず!と思ってますが
ヒントだけでも誰か教えてください。
0350nobodyさん2007/07/06(金) 14:24:20ID:???
MySQLなので空文字放り込んでも0000-00-00になるからあんまり気にしてなかったなあ
0351nobodyさん2007/07/06(金) 15:05:44ID:???
自己解決しました。
cake/controller/controller.phpにある
cleanUpFields
をコピペして
app_controller.phpに突っ込んで、
$this->params['data'][$modelName][$field['name'] . '_year']
$this->params['data'][$modelName][$field['name'] . '_month']
$this->params['data'][$modelName][$field['name'] . '_day']
などなど、
dateTimeOptionTagで生成されるパラメータのいずれかがemptyなら
$this->data[$modelName][$field['name']] = $newDate;
を発行しない、という処理を加えていくだけ。


独自でconfirm作ってる場合は、cleanUpFieldsかける前に
いずれかが空白(未選択)なら確認画面に戻す処理を書き加えても良いだけだし。


こんな小一時間考えればわかるような事に俺は…
お騒がせしました。
■ このスレッドは過去ログ倉庫に格納されています