09/01/23 17:31:45
>>484
sql の max 関数 調べてみい
488:nobodyさん
09/01/24 16:41:32
AuthComponent の認証をディレクトリ単位でわけるよい方法ってないでしょうか?
/document_root/siteA/ 配下と
/document_root/siteB/ 配下でわけたい。
siteA 配下は 教師モデルを対象に認証済みのユーザーはアクセス可能とし、
siteB 配下は 生徒モデルを対象認証済みのユーザーを対象にする。
当然、教師認証済みであってもは siteB にはアクセスできず、生徒は認証済みであっても
siteA にはアクセスできない
みたいな事がやりたいんですが。。。
489:nobodyさん
09/01/24 16:51:08
acl
490:488
09/01/24 17:14:12
acl は、同一ユーザーテーブルの中での権限の割り当てではないでしょうか?
がんばって読んでみたんですが、そもそもユーザー認証を行なうモデルが異なる場合は
対応できないように思いました。
今回は、教師と生徒で登録されているテーブルが違うのでログインページも教師用と生徒用があります。
教師は siteA/login.php にて。生徒は siteB/login.php にて認証します。
で、教師でログインした場合は siteA 配下のみアクセス可能。生徒でログインした場合は siteB のみ
アクセス可能としたい。
かっこ悪いすが、サブドメインきって cake そのものを2通り用意したほうが簡単かもしれないと思ってしまいました。
何かよい方法があればいいな、と。
491:nobodyさん
09/01/24 22:19:27
もっと嫁
492:nobodyさん
09/01/24 22:20:11
cake2個用意するとか前にも言ってるやつが居たが
プログラマーのやり方じゃない
493:nobodyさん
09/01/24 22:44:47
cakeはもっとサンプルが公開されてると、こうした初心者の人も助かりそうだね。
初心者がcakeのソースなんて追え無いんだから。
494:nobodyさん
09/01/24 22:58:31
つーか公式マニュアルにAROとACOの説明があるのに
>>490の理解になるのはおかしい
ちゃんと読んでない
495:nobodyさん
09/01/25 11:58:58
アクションが増えるとコントローラーの行数も増えるのたが、
お前らのコントローラーの行数は最大でどの位ですか。
496:nobodyさん
09/01/25 12:03:41
アクションの数自体、1コントローラ最大で10くらいしか経験無いわ
497:nobodyさん
09/01/25 19:50:45
「CakePHPポケットリファレンス」の資料に載ってる
CakePHPの命名規則って、かなりでたらめ?
498:nobodyさん
09/01/25 21:22:02
一つの関数(アクション)の行数を短くしろとは聞くが
一つのクラス(コントローラー)の行数を短くしろとは
あまり聞かない。
499:nobodyさん
09/01/25 23:34:20
>>497
「CakePHPポケットリファレンス」の命名規約(p.406-408)で
「これ、おかしんじゃない」のワースト3を教えて。
URLリンク(book.cakephp.org)の規約
500:nobodyさん
09/01/25 23:37:01
俺も手元の開いてみた
なんか楽しいw
501:nobodyさん
09/01/26 00:04:38
えーっと、どれも酷いので順番は付けられないけど
コントローラーの命名規則
英単語の単数形+"Controller" って書いてるのに、例が PowerUsersController
モデル名+"_id"って書いてるのに、例がpower_users_id
あとある?
502:nobodyさん
09/01/26 01:11:31
ホントだ。あるねえ。
コントローラの命名規約
○クラス名 英単語の複数形+"Controller" PowerUsersController
テーブルとカラムの命名規約
○外部キー モデル名+"_id" power_user_id、article_id
(モデル名は単数形だよね。)
修正しました。
503:nobodyさん
09/01/26 10:35:54
編集フォームの初期値をセットするには
$form->create('User');
で作っていたとしたらどういう変数名・配列構造でセットすればいいの?
504:nobodyさん
09/01/26 10:52:09
>>503
$this->data['User']['name'] = '麻生太郎';
505:nobodyさん
09/01/26 12:24:49 j8WtT0GU
1.2系のAuthComponentにおいて任意のidでユーザ認証されてしまう、という脆弱性が。
1.2.1.8004へアップデート推奨らしいぞ。
URLリンク(cakephp.jp)
URLリンク(www.pseudocoder.com)
506:nobodyさん
09/01/26 13:21:32
AuthComponentをStableから使い始めた俺は勝ち組w
507:nobodyさん
09/01/26 13:41:36
>>505
ワロタw
どこがAuthなんだよ
508:nobodyさん
09/01/26 16:40:15 j8WtT0GU
これってやばいんだよね?
509:nobodyさん
09/01/26 20:39:14
testsuiteって使ってる?
マニュアル見ても、よく分からん。
510:nobodyさん
09/01/26 22:55:14
>>508
機能として破綻してるw
511:nobodyさん
09/01/26 23:57:03
ああー
よくわからんままやったら、
フィールド消えたわ
まじか、これ
512:nobodyさん
09/01/27 10:11:27
バグが取れるまでstableにしませんとか誇らしげに語ってなかったっけ?w
513:nobodyさん
09/01/27 11:51:11
>511はtestsuiteの話しな
testsuiteの解説がガイドブックとかに無いし、
web上にもあんまり情報が無いので、よくわからん。
でも。simpletestをインスコしたら、bakeの際に
いろいろ聞かれなくなったのは楽だな。
514:nobodyさん
09/01/27 12:20:04
1.2.1.8004 Stable ですが
設置 URL が example.jp/t/ の時、tests というコントローラにアクセスしようと、
URLリンク(example.jp) ってやると、URLリンク(example.jp) に勝手になってしまって
Error: EstsController could not be found.
となります。 t に限らず webrootが1文字で とコントローラの最初の一文字が同じだと
上記のようになると思いますが、何か注意するところはありますか?
515:nobodyさん
09/01/27 12:32:20
>>514
URLリンク(cakephp.jp)
これと同じかな
516:nobodyさん
09/01/28 11:36:58 AHb2WVE2
既存テーブル名が日本語で、cakeが認識しません。
どうすればいいのでしょうか?
php直ですと日本語テーブル名でクエリは通ります。
517:nobodyさん
09/01/28 12:33:02
cake周りの文字コードをutf-8にしたら
とりあえず、認識した。
518:nobodyさん
09/01/28 18:06:35
テーブル名が日本語ってトラブルの元じゃない? って、以前言われた。
testって、データを入れて出して一致してるか確認してるんだって事が
ようやく少し分かった。
519:nobodyさん
09/01/28 18:29:34
テーブルとかカラムが全角文字だと激怒する奴いるけど
別に日本で使うシステムなら問題ないんだけどな
Oracle/Access+VBのシステムなんかよくあるし
PHPだって変数名ですら全角文字でもOKなんだし
520:nobodyさん
09/01/28 19:00:41
>>519
全角って、そんなに変じゃないの?
bakeする時に日本語で全部作ってくれると楽そうだなーって思ってた。
多言語化を考える必要なんて全くない物を作るのにi18nすら面倒で、
ソースに日本語のエラーメッセージを書いてやろうと思ってた。
521:nobodyさん
09/01/28 19:02:34
あ。でも、そうすると複数形ってどうすんだ?
522:nobodyさん
09/01/28 19:04:55
DB関連の開発系ツールも含めて全て対応出来てるんならいいんだろうけど
海外製のライブラリは対応出来てないものが多いし
結局、全角ゴリ押しは開発者側に負担を強いることが多いよ
プロジェクト内で使う環境を全部調査して、誰にも迷惑かけないと判明したら使えばいいと思うけど
523:nobodyさん
09/01/28 19:05:44
>>521
個別テーブル名定義で対応するしかないと思う
やったことないし試そうとも思わないから詳しくは知らない
524:nobodyさん
09/01/28 20:22:20
早速、日本語名utf8のテーブルやフィールドを作って、
cake bake allしてみた。
コンソールは微妙に文字化けしてたけど、難なく焼けた。
でも、アクセスしたらエラーが出た。ファイルを見たら、
ファイルがshift jisで認識されて、日本語部分は全部文字化け。
こんなことで苦労したくないので、これ以上は試すの止める。
525:nobodyさん
09/01/29 05:37:51
CakePHPは使ったことがありませんが、非常に興味があり質問させて
いただきます。
今まで自作の簡易フレームワークで業務アプリを作ってきました。
画面数は数十あります。
表示はSmartyを使っています。
これを少しづつCakePHPに置き換えたいと考えていますが、
フレームワークを変更するとかなり大掛かりな作業になりそう
ですし、部分的に置き換えていくのが実際できるのかわかりません。
CakePHPは、上述のように既存のWebアプリを部分的に置き換えていける
ものなのでしょうか?
それとも、新規Webアプリから採用するべきものなのでしょうか?
526:nobodyさん
09/01/29 11:43:51
>>525
新規案件だけにしたほうが苦労が少なくていいと思う
527:nobodyさん
09/01/29 11:51:59
>>525 思いついたところから書くと
最低クリアされるべき条件
・DBの構造(idとか)
・URL(/controller/action/param.. の形式)
がクリアされないといけない
そのうえで、Modelごと(≒tableごと)移行していくというのであれば、不可能ではないと思うが。
現実的には、DBを共通化して、Cakeによるサイトを作っていき、同時に稼働させてテストし、一気にリプレイスってことになりそうな気がするけど、どうなんだろうね。
ただ、Cakeに慣れるまである程度時間がかかるから、いずれにせよ新規アプリから始めないと、苦労すると思うよ。
528:525
09/01/30 06:58:44
>>526, 527
レスありがとうございました。
やはり新規案件からCakePHPをはじめたほうが無難ですね。
スキルを醸成してから、既存システムの変更を検討します。
529:nobodyさん
09/01/30 11:51:03
自作クラスのインスタンスを得るにはどうすればいいの?
データを引数に持たせてインスタンス同士をいろいろ比較してくれるクラスを
昔作ったんだけどどう持ち込めばいいのかわからない
530:nobodyさん
09/01/30 17:53:58
ポケットリファレンスを見てるんだが。
1.2になってModel::findが大幅に機能強化されたのに、
記述が少なすぎる。もしくは、Model::generateList()
のページに代わりの方法が書いてあればいいが、
Model::find()だけでは意味不明だろう。
531:nobodyさん
09/01/30 18:27:52
>>530
おとなしく改訂版を待ってろ
532:nobodyさん
09/01/30 18:55:05
改訂版って出るの?
533:nobodyさん
09/01/30 19:21:00
コントローラから2つのモデルとデータをやり取りする場合、
アソシエーションを使う方がいいのか、
Controller::usesで直接指定する方がいいのか。
534:nobodyさん
09/01/30 19:29:43
アソシエーション使うと結果変わる事ない?
たぶん親モデルと関連してるレコードしか該当しないよ
535:nobodyさん
09/01/30 23:31:39
コントローラからコントローラへデータを渡すのって、どうするの?
536:nobodyさん
09/01/31 01:44:15 ZNZRtHpp
flash
537:nobodyさん
09/01/31 04:27:13
>>536
なるほど。
urlでパラメータを渡すなら、redirectでも良さそう。
でも、urlだと大きなデータは渡せないよね。
データが丸見えになるし。
あと、同じウィンドウの中でのみ渡すってなると、
どんな方法が良さそう?
538:nobodyさん
09/01/31 04:30:59
>>537
まあなんだ。
ウェブアプリはデスクトップアプリと
考え方が違うが・・・
まあ、がんばれや。
539:nobodyさん
09/01/31 05:48:56
Session->renew()で新しいsession_idを割り振れば
いけるかな?と思ったが、甘かった。同じブラウザでは
renewする前のが消える。
別のブラウザなら大丈夫だった。(当たり前か)
540:nobodyさん
09/01/31 08:38:22
解決。セッションの使い方を間違ってる。
ユニークキーの発行が正しい。
541:nobodyさん
09/01/31 09:18:36
Cakeユーザーの低レベルさが泣けてくる
542:nobodyさん
09/01/31 09:28:15
>>541
今CakePHPが注目を集めている為、素人が「PHPフレームワークなら俺にも何か簡単に
Webアプリが作れるかな。」という気になっているじゃない?
見方を変えるとCakePHPの功績は大きいかも?
543:nobodyさん
09/01/31 09:38:59
にしてもプログラマーと呼べないレベルの質問が多すぎる
544:nobodyさん
09/01/31 09:47:48
そろそろsymfonyの時代か・・・?
545:nobodyさん
09/01/31 10:44:44
それでも作れちゃうなら凄いこと
546:nobodyさん
09/01/31 10:46:19
そんなレベルの人が正しくフレームワークを使いこなせてるとは思えない
保守不可能なシステムを作ってそう
547:nobodyさん
09/01/31 11:16:37
Web屋と呼べないレベルではあるが
exe屋だったら最初そんなもんだろ。
まあ、フレームワーク知識自慢しかできないようじゃ、
お前らすぐに抜かれるよ。
548:nobodyさん
09/01/31 13:50:46
>>529
自作クラスなんてコンポーネントにしちゃえばいいよ。
で、コントローラーで
$this->Myclass->eat('hoge');
で。
>>535
作り方としてデータを渡したいような内容のものがあるならモデルに書いた方がいい。
で、コントローラーからそのモデルのアクションを読み出してデータを取得。
549:nobodyさん
09/01/31 16:13:14 x6QrlarV
authcompornentでユーザ登録した後、自動的にログイン状態に遷移する処理について
なにか方法があれば教えていただけませんでしょうか?
550:nobodyさん
09/01/31 16:23:21
マニュアルを読め
551:nobodyさん
09/01/31 17:40:26
データが全然こなくて小一時間悩んでたけどconditionsて書く所がconditonsになってた~ 時間返せー
552:nobodyさん
09/01/31 17:50:06
色々読んでみたが、結局趣味でやるぶんにはイイFWってことか
553:nobodyさん
09/01/31 18:44:40
>>551
あるあるwwww
JavaScriptでもundefinedとunidentifiedをよく間違えるんだよな
554:nobodyさん
09/01/31 18:55:23
配列仕様だからそういうミスしても分からないんだよね
なにかあるたびに配列にミスが無いかチェックしてるわ
555:nobodyさん
09/01/31 19:10:10
よく使うやつはテキストエディタの強調表示設定に入れておくのが吉
556:nobodyさん
09/01/31 19:38:57
symfonyを採用したオープンソースのSNS OpenPNE3.0が1/27にリリースされたそうな。
URLリンク(www.openpne.jp)
と言う事は、OpenPNE3.0はPHP4のサーバにはインストール出来ないと言うことか?
多くのアプリがPHP4で開発されたもので、PHP5での稼働が保証されていないので、
サーバのPHPを5に出来ないんだよな。
557:nobodyさん
09/01/31 21:24:40
>>548
モデルAとモデルBで、一応形としては
A hasMany B
B blongTo A
なんだけど、普段必要になるのは、Bのうちnot deleteのフラグが立ってる
1つのデータだけなのよ。そして、まれに(not delete関係なく)全ての
データが必要になる。これをどう扱ったら良い?
A hasOne B
にしても、BにA_idというフィールドが必要なだけに、こちらが望む
通りに紐付けするには条件(not delete=true)が足りない気がするし、
SQLの実行に時間や負担がかからないか心配だし、汎用性がどうか?
Bのデータをidで直接呼び出した方が早いような気がしたので・・・
Aに、not deleteに当るBのデータのidを入れるフィールドを作っていて、
AのコントローラでBのモデルも扱ってread(Bのid)ってするつもりだった。
だけど、このやり方って変?
558:nobodyさん
09/01/31 21:53:45
>>557
ゆとりなの?死ぬの?
こんな風に A のモデル書いて
class A extends AppModel
{
var $hasMany = array('B' => array(
'className' => 'B',
'conditions' => array('B.delete' = 'not delete'),
),);
function hogehoge()
{
unset($this->hasMany['B']['conditions']['B.delete']);
return $this->find('all');
}
}
で、普段はコントローラから $this->A->find() でデータ取得して、
B.delete を無視する時は $this->A->hogehoge() 使うようにするだろう。jk
559:nobodyさん
09/01/31 23:42:40
コントローラーから別のコントローラーに値を渡す方法と言われて、セッションとかそういう話じゃなかったことしかないな
560:nobodyさん
09/02/01 01:12:20
質問です。
$data = array(
array(
'User' => array('id' => 1, 'name' => 'suzuki'),
'Tag' => array(
array('id' => 1, 'title' => 'hoge'),
array('id' => 2, 'name' => 'fuga')
),
),
array(
'User' => array('id' => 2, 'name' => 'sato'),
'Tag' => array(
array('id' => 1, 'name' => 'piyo'),
array('id' => 3, 'name' => 'moge')
)
)
);
$result = Set::extract('/Tag[id=1]/..', $data);
debug($result);
このとき$resultには、結果的に$dataと同じデータが入ると思うんですが、
「Notice (8): Undefined offset: 1 [CORE/cake/libs/set.php, line 415]」
というエラーが出て、2つめのデータが表示されません。何が原因なのでしょうか?
561:560
09/02/01 01:26:07
すみません、追記です。
PHPのバージョンは5.2.8、CakePHPのバージョンは1.2.1.8004です。
あと「array('id' => 1, 'name' => 'piyo'),」は、
「array('id' => 1, 'title' => 'hoge'),」とした方が自然ですね。
よろしくお願いします。
562:nobodyさん
09/02/01 22:33:35
>>560
よくわからんけど。
Tagの添字のID=1が二つあるからじゃね?
それ以外の条件での検索については、エラーは出ないし。
563:nobodyさん
09/02/01 22:46:30
ちょっと複雑?なアソシエーションについて教えて。
基本は A hasMany B , B belongTo A なんだけど、
AとBは hasAndBelongToMany でもある。
(Aが担当教員で、Bが生徒と思えば。
Aの中に担任が一人居るような感じ。)
belongTo のAと、hasAndBelongToManyのAsを
どうやって取得し分けたらいい?
564:nobodyさん
09/02/02 01:23:57
>>563
アソシエーションのbindとunbindを使い分ければいいんじゃない?
565:nobodyさん
09/02/02 05:46:05 lBmCzdKa
1.2でpaginatorを1画面に複数使う方法が書いてあった
blog、どこにあったか知ってるひといたら教えてプリーズ
あとで見ようとしててどっかにいってしまいました
566:563
09/02/02 15:51:42
>>564
一方を取得したくない時には、それでいけそうです。ありがとう。
だけど逆に、両方取得したい時に困りました。
当たり前かもしれませんが、両方が同じ変数に混ざってしまいます。
[B] => Array
(
[id] => 1
[name] => hoge
[0] => Array
(
[id] => 1
[name] => hoge
[AsB] => Array
(
[id] => 4
[A_id] => 1
[B_id] => 1
)
)
)
これ、どうやって分離する?
もしくは、別々の変数でとり出す方法は?
それとも、そもそもデータベースの設計がおかしい?
567:nobodyさん
09/02/02 16:28:39
>>566
良くのみこめてないけど、tableに問題がありそうなきがする
teachers , students があるのかな?
classes があればすべて解決するような気がするけど違うのかい?
568:563
09/02/02 19:05:21
Authも兼ねるつもりなので、 A hasMany B のAはusersなのです。
だからgroupsも作ってあるけど、classesやgroupsのいずれでも
B blongsTo~の関係にならないのです。
569:nobodyさん
09/02/02 19:06:34
URLリンク(www.google.co.jp)
逆転しそう
570:nobodyさん
09/02/02 19:55:59
>>568
いやいやそういうこっちゃないでしょ
もっと具体的に書いてみたらどうよ。
「A hasMany B , B belongTo A なんだけど、 AとBは hasAndBelongToMany でもある」って言われてもねえ
関係するModelと、そこで使われているアソシエーションの内容を、具体的にたのむ
571:nobodyさん
09/02/02 20:48:11
>>569
これってGoogleでの検索件数のトレンドグラフだよねえ。
CakePHPは色々と問題が多くて、その解決法を探す為にみんなせってと「CakePHP」
キーワードで検索をしている。だから最近検索件数がウナギ登りなんだ。
と言う見方もあるのかなあ?世間の注目を集める為のCakePHPの戦略では?
572:nobodyさん
09/02/02 21:19:08
>>566
必要なデータを得られるfindをして、自前で工夫すればいいんじゃないかな
573:563
09/02/02 21:22:19
usersテーブル
id
name
personsテーブル
id
name
user_id //これが主たるuser
persons_usersテーブル
id
person_id
user_id //その他のuser
Userモデル
var $hasMany = array('Person' => array('className' => 'Person',
'foreignKey' => 'user_id'));
Personモデル
var $belongsTo = array('User' => array('className' => 'User',
'foreignKey' => 'user_id'));
var $hasAndBelongsToMany = array('User' => array('className' => 'User',
'joinTable' => 'persons_users',
'foreignKey' => 'person_id',
'associationForeignKey' => 'user_id',
'unique' => true));
574:563
09/02/02 21:23:10
Personsコントローラ
class PersonsController extends AppController {
function view($id = null) {
$this->set('person', $this->Person->read(null, $id));
debug($this->Person->read(null, $id));
}
}
すると、$person['User']に、>566みたいに、belognsToとhasAndBelongsToManyの
両方のデータが入ってしまう。
['User'][id]
['User'][name]とかは、blongsToのデータ
['User'][0][id]
['User'][0][name]とかはhasAndBelongsToManyのデータだと思う。
575:nobodyさん
09/02/02 22:34:43
var $hasMany = array('Profile1' =>
array('className' => 'Profile',
'foreignKey' => 'user_id',
),
'Profile2' =>
array('className' => 'Profile',
'foreignKey' => 'user_id',
)
);
576:563
09/02/02 22:56:48
>>575
それだ!!うまくいきました!多謝多謝
577:nobodyさん
09/02/03 09:54:32
モデル間のデータのやり取りや、
一つのモデルで複数のフィールドの
データを操作するのって、どうやるの?
というか、そういうのは奨められない?
あるフィールドにデータが書き込まれたら、
同時に別のフィールドにもデータを書き込みたい。
(DBの設計がそもそも冗長との批判は分かる。)
578:nobodyさん
09/02/03 10:15:42
>>577
afterSave , afterDelete
579:nobodyさん
09/02/04 16:42:15
セレクトメニューを作るために、find('list')で配列を取得して、
この配列の先頭に、例えば、
$sel[0]='ここから選んで';
みたいなのを追加するのって、どうする?
array_unshiftだと、IDに当る数字が再割り付けされてしまう。
580:nobodyさん
09/02/04 17:30:08
formヘルパーのオプション指定にそういう機能が無いかと
配列に直にデータを入れてバリデーションと合わせて簡単にやれないかを検討する
581:nobodyさん
09/02/04 18:18:31
ポケットリファレンスだと、そもそも
$form->input('sel_id')
の説明が無いんだよなー。
$form->selectにもなさげ。
配列に直にデータ入れて、ksortでできたからいいか。
582:nobodyさん
09/02/04 18:39:48
>>581 え?
$form->select()だと第5引数showEmptyに文字列指定
調べてないけどinputもいけるはず
583:nobodyさん
09/02/04 19:26:25
ほんとだ。出来た。
そうだよなー。素人の私でも、出来ないと不便だって思うもんなー。
584:nobodyさん
09/02/04 23:27:52
ポケットなんとかがどんなもんだか知らないけど、まずマニュアル見ましょうよ。
せっかくCakeは日本語ドキュメントが充実してるんだから。
585:nobodyさん
09/02/05 00:17:23
うむ・・・おっしゃる通り。結局、Webの日本語マニュアルが一番参考になってる。
これだけでもCakePHPを選んで良かったと思う。
だけど、紙の本で探す方が早い事も多いし、狭い画面でやってるのでwebマニュアル
を開いてる場所が無いのです。
ポケリファの1.2.1対応した改訂版が早く出て欲しい。できれば、Authとか1.2の
新機能をきっちり説明して欲しい。
586:nobodyさん
09/02/05 00:26:39
1.2stable出たし、各社対応版発売を狙ってるでしょ
逆引き的なのは欲しいなぁ~
587:582
09/02/05 09:29:26
>>584
まずマニュアル見ようというのは同意だけど、マニュアルの記述がまだまだ不完全なのは事実
今回の件であれば
select(string $fieldName, array $options, mixed $selected, array $attributes, boolean $showEmpty)
空の選択オプションを表示したくない場合、$showEmpty を false にします。
と、ある
boolean の引数にテキストを指定するなんて、URLリンク(api.cakephp.org) でソースを見るしかない
(今回はポケットリファレンス見たというから、つっこんだまで)
588:nobodyさん
09/02/05 09:35:20
>>581
付け加えると、詰まったら URLリンク(api.cakephp.org) を見るのが、一番手っ取り早い
こっちは、マニュアルよりは更新早いし、最終的にはソースを追えるし
まあ、がんばってくれ
589:nobodyさん
09/02/05 17:58:21
findAll で フィールド price か item のどちらかにマッチするというクエリを書く場合って
どうすればいいの?
590:nobodyさん
09/02/05 18:28:27
>>589
1.2だったら
$this->MODELNAME->find('all',
array(
'conditions'=>array(
'MODELNAME.price' => '2000',
'MODELNAME.item' => 'ITEM')
)
);
こんな感じ
591:nobodyさん
09/02/05 18:29:43
>>590
ありがとう!
その前にMYSQLが日本語ひっかからないという。。。
なんでだろ。
参考になりました。ありがとうございます。
592:589
09/02/05 18:34:16
cakephp とは関係ないと思いますけど
$option = array('Faqlist.name LIKE BINARY' => $str);
ってBINARY ってのをつけると 日本語もうまくひっかかるようになります。
今まではちゃんとひっかかってたのに。MYSQLの仕様がかわったのかなー
593:nobodyさん
09/02/05 18:52:42
>>590
"or"とか入れなくても良いんでしたっけ?
594:nobodyさん
09/02/05 18:55:11
db側の文字コードがLatin1とかだとBinaryで処理するしかないってことだと思うけどね。
595:nobodyさん
09/02/06 03:00:32
Model::save()の際に、複製を残したいと思って、
idが空になれば新規保存されるのかな?と思って、
モデルに
function beforeSave() {
unset ($this->data[$this->name]['id']);
return true;
}
と書いてみたが、UPDATEされてしまった。
かといって、
function beforeSave() {
$d = $this->data;
unset ($d[$this->name]['id']);
$this->create();
$this->set($d);
return true;
}
ってしたら、createdの日付が0になってしまった。
何か良い方法無い?
596:nobodyさん
09/02/06 08:05:18 OIEK7Rhk
複製を残したいなら二回saveする必要があるんじゃねーか?
597:nobodyさん
09/02/06 09:38:20
>>595
どのように複製したいのだろうか?
updateだろうがinsertだろうが、同じデータをinsertするということなら
afterSaveで、create後saveすれば良いと思われ
別のDBに保存したいというのならuseDbConfigを変更してsaveかな?
いずれにせよafterSaveじゃないと、validationErrorのときにもsaveされちゃうんじゃないかな
598:nobodyさん
09/02/06 10:28:16
>>596,597
複製って表現が違ったかもしれん。すまん
「バックアップを残す」って感じ。
既存のデータの編集の際、既存のデータは
そのまま(削除のフラグを立てる)で、
新しいidで保存したい。
すると、afterSaveでは上書きされた後だから
ダメでしょ? そこで、beforeSaveでidを
空にすれば新しいidで保存されるかなと思ったが、
なぜか上書きされてしまった(前者)。
コピーしたデータで書き込んだら、createの
情報が抜けてしまった(後者)。という次第であります。
599:nobodyさん
09/02/06 10:42:52
>>599
履歴を残すってことね。理解した。
でも、それでもafterSaveだろう
新規のデータをinsertして、afterSaveで既存のデータをupdateする感じじゃないかな
URLリンク(book.cakephp.org)
beforeSaveはあくまで保存するデータをいじったりするときに使うものだと思うよ
※>>597のvalidationErrorのときにもsaveされるは間違いのようだ
600:nobodyさん
09/02/06 10:53:08
>>599
>新規のデータをinsertして、afterSaveで既存のデータをupdateする
↑
この処理はコントローラに書くことになるよね?
どこかで、「ビジネスロジックはモデルに」なんて書いてあったので、
モデルに書く方法を考えてた。(コントローラからは普通にsaveしてる
ように見えるけど、モデルの方でバックアップを残してる、って感じ)
もしくは、モデルに上記の処理をするメソッドを作る方法もある?
Model::save()を上書きしたら・・・さすがにややこしいことになるよな。
601:nobodyさん
09/02/06 11:04:42
>>600
afterSaveと言ってるくらいだから、Modelでしょーが
おまいさんのいうように、自動的に履歴が残るぞ。
まずは、マニュアル読んでコールバックメソッドを理解するべし
602:nobodyさん
09/02/06 11:08:14
あ。そうか。ちょっと勉強して、試してみる。
603:nobodyさん
09/02/06 11:16:38
>>602 Have a nice cooking !
604:nobodyさん
09/02/06 12:54:05
>>601
「新規のデータをinsertして」もModel??
その後、afterSaveの中でgetIDできるのは
新しい方のデータで、既存のデータのidは
取得できないのでは?
605:nobodyさん
09/02/06 12:58:50 Fuxx6e9Y
バリデーションが効かない。助けて下さい。
モデルに追加するだけで動作するよね?
var $validate = array(
'xxx' => array(
'rule' => VALID_NOT_EMPTY,
'message' => '必須項目です。'
)
606:nobodyさん
09/02/06 13:12:45
>>604
それは、Controller
既存のidについては、自分で工夫してみてくれ。getIDする必要があるとは思えんから
607:nobodyさん
09/02/06 13:51:55
>>606
ありがとう。わかりました。
いくつかのモデルで同様の処理が有るので、
メソッド作って、AppModelに書いてみました。
608:nobodyさん
09/02/06 14:27:27
CakePHPってXSSとかSQLINJECTIONに対応してますか?
自分で処理するしかないですあk?
609:nobodyさん
09/02/06 14:49:58
基本的に処理はされるが、知らずに穴を作ることはできるので、
自分で意識する必要はある。当然だが。
610:nobodyさん
09/02/06 16:08:24
>>608
XSSやSQLインジェクションの仕組みと対策方法を知っていれば、
おのずと分かる話だと思うが?
611:nobodyさん
09/02/06 16:17:31
Cakeのセキュリティ関係はあまり信用出来ないけど
612:nobodyさん
09/02/06 16:32:25
さすがにXSSについては、Helper使わない限りは、自分でh()に通すしかないわな
613:nobodyさん
09/02/06 16:44:06
Ajaxしてると見落とすこともあるかも。
614:nobodyさん
09/02/06 22:15:58 OIEK7Rhk
これってDBにロックかけることってできないの?
BEGINでトランザクション開始
SELECT FOR UPDATEで更新用データ取得と同時にロック
UPDATEでデータ更新
COMMITでトランザクション終了
みたいな感じにしたいんだけど、SELECT FOR UPDATEって
どうやって設定してやったらいいんだ?
615:nobodyさん
09/02/07 09:27:29 u7AiZVmn
webrootの.phpファイルからcakeのコントローラを読んで
表示したいのですが、
includeでコントローラが読めませんでした。
viewにすれば解決するのはわかるのですが、
外部からcakeの結果を受けとることって無理なんですかね?
616:nobodyさん
09/02/07 10:22:18
>>615
(今考えている解決方法がどうやったらできるかじゃなくて)
具体的に今抱えている問題を書き込んだほうが、解決につながりやすいと思うよ
webrootにphpファイルを置くというのは、方向性が間違っている可能性が高い
617:nobodyさん
09/02/07 18:26:40
複数のモデルデータを保存したい時ってどうやってる?
条件としてはどちらもバリデーション通ったら保存。
バリデーションチェックとその表示との両立が上手くできない。
618:nobodyさん
09/02/07 18:37:09
>>617
'validate' => 'first' でsaveAll()
URLリンク(book.cakephp.org)
619:nobodyさん
09/02/07 19:28:59
>>618
明確な答えをありがとう。
フォームのバリデーションエラー表示も少してこずりましたが試して見ます。
saveAllをネット上の情報で試したんですが、エラー表示がきちんと出なかったんですよね。
フォームヘルパーの指定方法の問題じゃないかと思っていましたが。
taskモデルと、アソシエーションしたTimelineモデル(hasMany)のフォームはこんな感じで書いてます。
echo $form->input('task');
echo $form->input('Timeline.progress');
ちょっと前見たときはsaveAllの説明なかった気がするのは気のせいかな・・。
履歴を見ると気のせいじゃない気もする、今月に入って誰か訳してくれたんだねありがとう訳者さん。
620:nobodyさん
09/02/07 23:38:50 K4fXwaLQ
「マニュアル/開発例/ACLを制御するシンプルなアプリケーション」で
User自身が書いたPostのみ編集できて、他人のPostは編集できないようにしたいのですが、
どうしたらいいのかわかりません。><
isAuthorized()とかbeforeFilter()になんかちまちま書くしかないんでしょうか?
例えば、ACL使ってないけど、
function isAuthorized() {
if ($this->Auth->user('username') == 'admin') {
return true;
}
if (!empty($this->params['pass'][0])){ // ユーザー名
if ($this->Auth->user('username') != $this->params['pass'][0]) {
return false;
}
}
return true;
}
こんな感じとか?
621:nobodyさん
09/02/07 23:48:49
URLリンク(book.cakephp.org)
622:nobodyさん
09/02/08 00:16:52 XBcxfvCP
TRPGオタしか喜ばなそうな上記説明を熟読すれば、
「マニュアル/開発例/ACL~」のサンプルで
id:1のUserのみがuser_id:1のPostを編集できるようにできるんですか?
623:nobodyさん
09/02/08 01:12:57
>>622
「TRPGオタしか喜ばなそうな上記説明を熟読すれば、」ってことは、
ちゃんと読んでないのか。
マニュアルくらい読めよw
それとも読めないくらい馬鹿なの?ww
もしそうだったらごめんねwww
624:nobodyさん
09/02/08 02:18:10
>>622
マニュアルの更なる理解のために「指輪物語」を読破するんだw
625:nobodyさん
09/02/08 02:30:48
formヘルパーで、複数のテキスト入力boxを
1行に並べるのって、どうするの?
626:nobodyさん
09/02/08 04:45:10
>>625
自分でフォームを書く
627:nobodyさん
09/02/08 04:56:26
>>626
えっ、マジ?
628:nobodyさん
09/02/08 11:29:47 XBcxfvCP
いや、読んだ上で言ってるんだが。。。
これだとテーブル単位では大丈夫だけど、レコード単位での権限の設定が
できないんじゃないかと思うんだが、違うのか?
なんか、ここはレベル低いなぁ。
629:nobodyさん
09/02/08 11:49:57
その処理は、自分で書くんだよ。
自分が投稿したやつだけ編集できるって。
当たり前だろ。
管理者は全員のものを編集できるかもしれないし、
別に編集者という人を作るかもしれない。
誰が何を編集できるかを決めるのはお前。
よってお前がそういうコードを書く。OK?
レベルが低いのはお前。
630:nobodyさん
09/02/08 12:03:59
>>625
tableタグ使うと$form->text()を1行に並べること出来るよ。
後は、app/webroot/css/cake.generic.cssの内容を自分の好みに編集するだな。
(でも、なんでCakePHP1.2のdefaultのcssはこんなに変態なのだろ?)
631:nobodyさん
09/02/08 12:10:49
'div' => 'false' とかで横に並べられた気もするが・・・
> (でも、なんでCakePHP1.2のdefaultのcssはこんなに変態なのだろ?)
同意。デフォルトのフォントの大きさとかマージンとか
各ブラウザの間での違いを吸収する程度にしておけばいいのに。
632:nobodyさん
09/02/08 12:17:33 XBcxfvCP
>>629
> その処理は、自分で書くんだよ。
いや、書かなきゃならないのは、最初からわかってるよ。
でも、どこに書けばいいのかがわからない。
isAuthorized()やbeforeFilter()に書くのか?
633:nobodyさん
09/02/08 12:21:23
チケットを投げるんだ。
Summary: "cake.generic.css" looks like hentai
Type: RFC
634:nobodyさん
09/02/08 12:23:13
>>632
ご飯から食べるか味噌汁から食べるか。
好きにしろw
635:nobodyさん
09/02/08 13:06:23
>>631
<?php
echo $form->text('hoge0', array('div' => 'false'));
echo $form->text('hoge1', array('div' => 'false'));
echo $form->text('hoge2', array('div' => 'false'));
?>
これでは縦に3つ並んでしまったが、こんな書き方ではないのかな??
636:nobodyさん
09/02/08 13:29:45
>>628
レベルが低いのはお前の頭
637:622
09/02/08 13:32:48 ByGZ6/FB
>>632
教えてやるから土下座して「自分の頭の程度が悪うございました」とPCの前で言え
単にACOにmodel,foreign_keyを目的のレコードのものに設定して登録して、
AROとACOの関係を定義するだけ
ACO登録位置は種類考えて適宜選べ
関係の定義とチェック関数については>>622に書かれてる
638:621
09/02/08 13:33:26 ByGZ6/FB
622じゃなくて621だった
639:nobodyさん
09/02/08 14:40:18
CakePHPで掲示板作れます?
640:nobodyさん
09/02/08 14:43:20
>>639
お前は何を言っているんだ?
641:nobodyさん
09/02/08 14:45:17
>>640
質問しているのです。
642:nobodyさん
09/02/08 15:03:43
>>641
はいはい、ソーデスネ。
次のネタが思いつかないので、マジレスする。
作れます。
以上。
643:nobodyさん
09/02/08 15:04:30
>>639
ベタのPHPで作るより、短時間で、高機能(Ajaxなど)な掲示板が作れますよ。
がんばってください。
644:nobodyさん
09/02/08 16:07:39
>>642-643
がんばります!
645:nobodyさん
09/02/08 16:20:11
自分の頭の程度が悪うございました
646:nobodyさん
09/02/08 16:26:13 SHT1by4H
バリデーションで、一つのフィールドに対して、
複数のルールを設定していた場合に、
一つのエラーが検知した場合以降の
バリデーションはおこわないことは、出来ますか?
例えば、期間の入力があった場合、入力値が正しく
なかった場合、その後の妥当な期間であるかどうかの
チェックはいらないのですが。
647:nobodyさん
09/02/08 16:41:27
>>644
これから始めるなら、この本お勧め。
「CakePHP徹底入門」 CakePHP1.2で説明してあるから、とても楽に入門できた。
URLリンク(www.amazon.co.jp)徹底入門-イージーゲート/dp/479811717X
↓このページも入門者にお勧めかな。
URLリンク(kuri6005.sakura.ne.jp)
648:nobodyさん
09/02/08 16:53:37
>>646
URLリンク(book.cakephp.org)
'last' => true
649:nobodyさん
09/02/08 17:20:04
>>648
ありがとうございます。
すみません。
しっかりと説明されていますね。
もっとちゃんと読まないといけませんね。
650:nobodyさん
09/02/08 17:46:55 srWubjja
携帯対応ページを作ろうと思って、/m/でリクエストされたら携帯ページを表示ってやろうとしていて
表示はうまくできたんですけど、PC用ページのフォームで、
$form->create('post', array('action' => 'view'));
ってやったときに、$this->dataにデータが入っているときは、
action="/post/view/1"とかになるんだけど、データが入ってないと
action="/m/post/view"って/m/が先頭につけられてしまいます。
プログラム中で/m/をつけてるのはroutes.phpで
Router::connect('/m/:controller/:action/*", array('prefix' => 'mobile'));
としているとこだけなんだけど、$form->createってここを見てURLを
自動生成してるんでしょうか?
だとしたらどうやったらうまく解決できるんでしょうか?
651:nobodyさん
09/02/08 18:01:22 srWubjja
すんません、Router::Connectをコメントにしたらちゃんとうごきました。
ということは$form->createではこれをみてURLを生成してるんですね。
携帯、PCの両用サイト作ってる人はどうやって解決してるんでしょうか?
652:nobodyさん
09/02/08 21:16:52
>>647
ご丁寧にありがとうございます。
明日の夜にでも本屋に行ってこようと思います!
653:nobodyさん
09/02/08 21:59:25
URLリンク(cakephp.jp)
654:nobodyさん
09/02/08 22:39:55
>>635
うちもそれ試した。3行になっちゃった。
やっぱ、>626の言う通り、自分で
フォームを書かないといけないのか・・・マンドクセ
生年月日を入力させるのに、セレクトメニューでは
不便なので、直接「年」「月」「日」の数字を
入力させたいのね。
何か、簡単な方法ある?
できれば、年号(MTSH)が付いてると西暦に直して
欲しいんだけど・・・(そこまで求めるのは無理か。)
655:nobodyさん
09/02/08 22:49:40
素のhtmlのタグを、cake流に変換するようなフィルタとかあればいいなー
656:nobodyさん
09/02/08 23:14:43
>>654
'div' => false にして、出てくるフォームが改行されるのは、FormHelperの問題と違う。
CSSでそう指定してあるから改行される。
input {
clear: both;
}
みたいな感じで。
いっぺん、読み込んでるCSSファイルを移動するなりして、読み込めないようにしてみろ。
657:nobodyさん
09/02/09 00:07:57
>>656
CakePHP1.2の変態cssをとっぱらったら、'div' => 'false'を付けなくてもtextBoxが1行に
ちゃんと3つ並ぶ。質問者はCakePHP1.2の変態cssを突破してtextBoxを1行に並べる方法を
質問しているのだと思う。
<?php
echo $form->text('hoge0');
echo $form->text('hoge1');
echo $form->text('hoge2');
?>
<br>
<br>
<?php
echo $form->text('hoge0', array('div' => 'false'));
echo $form->text('hoge1', array('div' => 'false'));
echo $form->text('hoge2', array('div' => 'false'));
?>
>>654
自分でフォームを直接書いたとしても、CakePHP1.2の変態cssの壁に阻まれると思う。
敵はCakePHP1.2の変態cssだと思う。変態cssを攻略するのが近道。
tableタグを使うと変態cssの中でもtextBoxを1行で表示できる。が詳細なレイアウトを
調整しようとすると変態cssと戦わざるを得ない。
<table>
<tr>
<td><?php echo $form->text('hoge0'); ?></td>
<td><?php echo $form->text('hoge1'); ?></td>
<td><?php echo $form->text('hoge2'); ?></td>
</tr>
</table>
658:nobodyさん
09/02/09 00:13:00
何で変態CSSのために
無駄な労力使ってるんだw
659:nobodyさん
09/02/09 00:18:41
>>658
暇で他にやる事もないので、チョットやってみただけ。
660:nobodyさん
09/02/09 01:19:15
てことはCSSを、YUIとかのリセットに変えればいいだけか
661:nobodyさん
09/02/09 02:53:29
>>659
じゃあ僕のサイト作るの手伝ってくれません?