【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/
0244nobodyさん
2007/06/18(月) 18:30:53ID:???DboSource::delete(&$model, $conditions) を呼び出せば一応出来る。
$db =& ConnectionManager::getDataSource($model->useDbConfig);
$db->delete($model, 'id = 1 or id = 2');
ただこの方法だとbeforeDelete()とかはされないので
必要なら明示的にやらないといけないが。
0245nobodyさん
2007/06/18(月) 18:47:07ID:???送信ボタン押したら、確認画面にいくようにしてるんですけど、
この間でバリデーションを行って、エラーが出れば、
edit.thtmlに戻るようにしてるんですが、パラメータのidの値をvalueに入れちゃってるんで、
フォームで編集(変更)した値が消えて、初期値に戻ってしまうんですが、
何かスマートな方法ありますでしょうか?
私の考えでは、
editアクションで、データが送信されなかった場合のみ、valueに設定する初期値を、
コントローラからビューにsetさせ、ビュー側でsetされたかifで調べて、valueに入れる。
データが送信されたら、何も渡さない(inputのfieldNameに基づき送信データがvalueに入る)ようにしているんですが、
inputの数だけifで調べて、コントローラ側でもinputの数だけsetしなければいけないので、かなり面倒なことになってます。
もっとスマートな方法があれば助言お願いいたします。
0246nobodyさん
2007/06/18(月) 18:59:27ID:???何もしてないのに勝手に初期値に戻るわけないだろ。
findとかでDBから値を読み込んでるところがあるはず。
そこを確認画面以降は行わないようにすればいいだけなんじゃないのか?
これで分かんなかったらコントローラのソース晒せ。
0247242
2007/06/18(月) 19:01:11ID:???thx
結構、奥の方まで食い込まないとなのね
>>245
的を射てるか分からないけど
コントローラ側で$this->dataに代入するしないを分岐するだけでいいんじゃないかな
0248nobodyさん
2007/06/18(月) 23:44:54ID:???デフォのvalidatorってpreg系なので、UTFなら日本語自体は通るが、
「ひらがなのみOK」とかってできなくね?
ということで結局mb_ereg系のバリデータ書いちゃったよ。これでええのんか・・・?
0249nobodyさん
2007/06/19(火) 00:13:11ID:???UTF-8なら、u修飾子つかえばOK
var_dump(preg_match('/^[ぁ-ん]+$/u', 'あいうえお'));
var_dump(preg_match('/^[ぁ-ん]+$/u', '漢字かな交じり'));
0251245
2007/06/19(火) 11:37:07ID:OkFSOfnZ$hoge1_attribute['size'] = 20;
$hoge1_attribute['value'] = null;
if(!empty($Hoge['Hoge']['hoge1'])){
$hoge1_attribute['value'] = $hoge['Hoge']['hoge1'];
}
echo $html->input('Hoge/hoge1', $hoge1_attribute);
こんな感じでinputの数だけ直前に記述しているんですが、こんな感じでやるしかないんでしょうかね?
かなりビューがみにくくなっちゃいますが・・・
みなさんならどうしますでしょうか、助言おねがいします。
0252nobodyさん
2007/06/19(火) 12:44:17ID:???Set::merge使えばおわりじゃん。
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:???> そもそも「商品タイプ」というものに必要な属性の抽出が出来てない感じをうけるな。
世の中のすべての商品タイプをあらかじめ抽出なんて不可能でしょう?
> 「飲料食品タイプ」の内容量ミリリットルって
> 「雑誌商品タイプ」でいうところの書籍重量ってのと、どう違うの?
> 逆にISBNコードってのは業界の商品流通コードなんですよ。各業界にも
> あれこれあるでしょ?使うかどうかは別にして。
だからなんなんでしょうか?
例なんだから、細かいところにこだわりすぎ。
共通で汎用の商品タイプ作れとかそういう話ですか?
価格ドットコムで検索したことありますか?
不可能でしょ。そんなこと。
0259nobodyさん
2007/06/20(水) 00:33:05ID:???0261nobodyさん
2007/06/20(水) 02:21:55ID:???>>257 の「使うかどうかは別にして」というのはそういうことだと思うよ。
ただ「書籍重量」という例はちょっと悪いな
もしそういうものを作るんなら、たとえば
・商品カテゴリテーブル(id,商品名)
・商品詳細項目名テーブル(id,商品カテゴリid,項目名,項目タイプ)
・int項目タイプ詳細テーブル(id,商品カテゴリid,商品詳細項目id,値)
・varchar項目タイプ詳細テーブル(id,商品カテゴリid,商品詳細項目id,値)
・text項目タイプ詳細テーブル(id,商品カテゴリid,商品詳細項目id,値)
この4つですむじゃん。たとえばだけど
とにかく>>256は正規化でしらべやがれ、
DB板(ドラゴンボール板)に行け、そして戻ってくるな
つうか、初心者増えたのか?cake界は
0263nobodyさん
2007/06/20(水) 02:34:35ID:???0264nobodyさん
2007/06/20(水) 06:53:32ID:???>239
>242
>245
>256
厨発生中だな。
245と256は同一?
0265nobodyさん
2007/06/20(水) 10:48:12ID:zjQXSfAjやっぱり、CakePHPが絡んでくるので、どうしてもCakePHPの説明が入ってしまいます。
ここの方がよかったかもしれません。
どなたかご回答お願いします。。
0266nobodyさん
2007/06/20(水) 12:04:49ID:???なにがしたいのかわからん。タイプ数減らしたいだけか?
0267nobodyさん
2007/06/20(水) 13:57:48ID:zjQXSfAjclass Bbs1Controller extends AppController
{
var $m = ここに$this->Itemと同等のが入れたい
function index()
{
$this->m->findAll()
}
}
こんな感じのを想像していて、
$m(コントローラで使いたいモデル)をあとで変更できるようにしたいのです。
$this->Item->findAll()みたいな、モデルを使うところがたくさんあるので、
継承したあとに、var $mだけ書き換えれば、違うテーブルを使えるようになったらいいかなぁと思ったんですが。。。
get_object_varsではできませんでした。
0269nobodyさん
2007/06/20(水) 16:59:59ID:zjQXSfAj本番環境に移行するとなると、いろいろとめんどくさいんだよな。
0270nobodyさん
2007/06/20(水) 17:58:58ID:???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:???>DB板(ドラゴンボール板)に行け、そして戻ってくるな
>つうか、初心者増えたのか?cake界は
君のテーブル見る限り、君自身が完全に初心者なんだが…
0273nobodyさん
2007/06/20(水) 18:23:54ID:???書籍重量って書籍が決まればそれに付随して一意に決まるだろ…
喩え出す奴が馬鹿すぎるとダメだなw
しかもそれに面白レスしてる261が別人ってのはにわかに信じがたい
さすがcakeかっけーぜ
0274nobodyさん
2007/06/20(水) 18:57:14ID:???0275nobodyさん
2007/06/20(水) 19:22:59ID:???0277nobodyさん
2007/06/21(木) 09:42:13ID:???商品テーブル
・商品ID
・カテゴリID
・品名
・価格
・詳細説明
・更新日
・登録日
・特徴1
・特徴2
・特徴3
・特徴4
商品カテゴリテーブル
・カテゴリID
・カテゴリ名
・特徴1の項目名
・特徴2の項目名
・特徴3の項目名
・特徴4の項目名
でいいんじゃね?
特徴1〜4はカテゴリによって使用しなくてもOK。
書籍は「重量」を入れなくてもいいが、「作者名」・「ISBN」が必要。
飲料は「商品コード」は入れなくてもいいが、「容量」が必要。
0279nobodyさん
2007/06/21(木) 10:21:46ID:???0280nobodyさん
2007/06/21(木) 11:25:20ID:???0281nobodyさん
2007/06/21(木) 12:21:36ID:???クライアントに「特徴が5つ以上必要なカテゴリが出てきたら
別途見積もりになりますのでご連絡下さい」と言えばOK
>>279
クライアントが満足して使えりゃそれでいいんだよ
0282nobodyさん
2007/06/21(木) 12:25:37ID:???0283nobodyさん
2007/06/21(木) 13:01:06ID:???0284nobodyさん
2007/06/22(金) 07:56:43ID:???0285nobodyさん
2007/06/22(金) 10:50:28ID:???0287nobodyさん
2007/06/23(土) 02:46:18ID:???cake本はやくでないもんか。
0288nobodyさん
2007/06/23(土) 02:52:45ID:???0289nobodyさん
2007/06/24(日) 20:00:51ID:???本番環境はPHP+mod_rewriteが使えるApache+MySQLは使えるんですが、すぐ移行ってできるもんなんでしょうか?
そういうのを説明してくれているサイトって無いですよね。。
0290nobodyさん
2007/06/24(日) 21:19:34ID:???ディレクトリセパレータにcakeが用意してる定数DSを使うとか・・
特に気にせずとも動いちゃってるので気にしたことがないっす
0291nobodyさん
2007/06/24(日) 21:29:19ID:???え、cakephpのフォルダをそのまま本番ディレクトリへコピーするだけなんでしょうか?
webrootだけをdocumentroot下に置いて、それ以外は上に置くとかなんかありませんでした?
0292nobodyさん
2007/06/24(日) 21:30:54ID:???一概にどうすればいいとは言えない
0294nobodyさん
2007/06/24(日) 21:52:03ID:???0295nobodyさん
2007/06/24(日) 22:12:50ID:???ありがとうございます。
もちろんテスト環境つくってやるつもりなんですが、
やっぱり試行錯誤する感じでいくしかないですかね。
0296nobodyさん
2007/06/25(月) 00:55:35ID:???テスト環境で動くなら。
0297nobodyさん
2007/06/25(月) 18:13:58ID:???0298nobodyさん
2007/06/25(月) 19:46:41ID:???0300nobodyさん
2007/06/27(水) 12:00:32ID:5woCK0g1コントローラで、
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:???適当なビューでecho $this->webroot;して試してみたらどお?
0302nobodyさん
2007/06/27(水) 12:45:14ID:5woCK0g1どういうことですか?コントローラからunlinkしたいんですが、、、
ためしにやってみましたが、
http://localhost/ 以下(コントローラ名含まず)が出力されました。
0303nobodyさん
2007/06/27(水) 12:58:04ID:xI/8M0tS鯖のOS変わるとプログラムの書き方も変わるんでしょうか?
0304nobodyさん
2007/06/27(水) 13:05:02ID:???unlinkの引数はURLじゃなくてパス。
システム内での実体のある絶対パスか相対パスを与える。
>>303
場合による
0305nobodyさん
2007/06/27(水) 13:42:59ID:5woCK0g1うーん、何度やっても同じエラーがでます。
具体的にどう書けばいいんでしょうか。。
0306nobodyさん
2007/06/27(水) 14:01:16ID:???$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ご丁寧にありがとうございます。
ローカルとサーバでOSが違うので、相対パス(../../webroot/.......みたいな)にしました。
0308nobodyさん
2007/06/27(水) 16:06:07ID:???0309nobodyさん
2007/06/27(水) 18:10:43ID:???0310nobodyさん
2007/06/27(水) 20:12:38ID:???0311nobodyさん
2007/06/27(水) 22:00:42ID:???すべてのレベルのプログラマという名目だが、さすがにPHPの基礎くらいは出来てないとな。
0312sage
2007/06/28(木) 09:22:28ID:???ttp://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=550&forum=6
0313nobodyさん
2007/06/28(木) 16:45:47ID:b86P8EwS0314nobodyさん
2007/06/29(金) 01:42:18ID:???0315nobodyさん
2007/06/29(金) 11:03:28ID:???投稿記事を削除するときに、コメントも削除したいんですが、どう書くんでしょうか。
アソシエーションは機能しているので、関連して呼び出すことはできています。
0316nobodyさん
2007/06/29(金) 14:09:47ID:???0317nobodyさん
2007/06/29(金) 15:27:07ID:XE3VOI38相対指定じゃないといけないんでしょうか?よろしければコード例をお願いしたいです。。
0318nobodyさん
2007/06/29(金) 16:01:14ID:???0319nobodyさん
2007/06/29(金) 16:16:09ID:XE3VOI38やっぱビューからじゃアクセスできないみたいですね・・・。
せっかくtmpがあるのに、webroot以下にまたtmpディレクトリ作るのはちょっとやな感じですが、そうします。
0320nobodyさん
2007/06/29(金) 21:34:10ID:???>レベル低っ・・・・フレームワーク使う前に、ほかにやることありそう
0321nobodyさん
2007/06/30(土) 00:36:03ID:???君におススメ!
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
0325nobodyさん
2007/07/02(月) 20:59:09ID:???0326nobodyさん
2007/07/02(月) 21:51:21ID:???本当に有難うございました。
0327nobodyさん
2007/07/03(火) 11:48:07ID:???レベルが低かろうがほっとけばいいのに。
0328nobodyさん
2007/07/03(火) 12:21:28ID:???0329nobodyさん
2007/07/03(火) 13:41:23ID:8i5o6UCU0330nobodyさん
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<?php if(isset($session->User)){ ?>
って普通にビューからコンポーネントにアクセスできるんですね。
自己解決しました。
>330
有難うございます
0334nobodyさん
2007/07/04(水) 05:14:32ID:gN4ff124var_dump($_COOKIE);
としても全部のクッキーが表示されないのはCakePHP1.1のせい?なんかやってる?
0335nobodyさん
2007/07/04(水) 10:10:25ID:???Cake通さなければ普通に表示される?
0336nobodyさん
2007/07/04(水) 21:48:23ID:???0337nobodyさん
2007/07/04(水) 22:10:12ID:???これか?読んでないんだが、一言で言うと何?
0338nobodyさん
2007/07/05(木) 00:53:35ID:???0340nobodyさん
2007/07/05(木) 04:42:53ID:???0341nobodyさん
2007/07/05(木) 09:02:47ID:???0342nobodyさん
2007/07/05(木) 17:37:10ID:???0343nobodyさん
2007/07/05(木) 19:23:19ID:???■ このスレッドは過去ログ倉庫に格納されています