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

【PHP】フレームワーク CakePHP 7ホール目【v1.2】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/01(火) 16:12:06ID:XVdxsVut
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです。

※sage推奨
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
thechaw
http://thechaw.com/projects
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
CakeMatsuriTokyo2009
http://matsuri.cakephp.jp/
0002nobodyさん2009/09/01(火) 16:12:35ID:???
■過去スレ
【PHP】フレームワーク CakePHP 6ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1236563737/
【PHP】フレームワーク CakePHP 5ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1229669539/
【PHP】フレームワーク CakePHP 4ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1213892680/
【PHP】フレームワーク CakePHP 3ホール目【本命】
http://pc11.2ch.net/test/read.cgi/php/1205475360/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0003nobodyさん2009/09/01(火) 16:13:00ID:???
■その他いろいろ
連載:CakePHPで高速Webアプリ開発|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/cakephp

CakePHP 規約ワードメーカー WordMaker for CakePHP Conventions
ttp://www.cpa-lab.com/tech2/inflects/

Free CakePHP Book (Matt Curry and Mark Story)
http://www.pseudocoder.com/free-cakephp-book/

あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/

CakePHP Note
http://www.garacter.com/notes/CakePHP+Note/ni:5

CakePHPを使ったMVC設計のベストプラクティス - Sooey
ttp://www.sooey.com/journal/2008/03/26/717/

Qdmail(日本語メールコンポーネントとして利用可能なライブラリ)
ttp://hal456.net/qdmail/

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

CakePHPカンファレンス東京(2008)
http://conference.cakephp.jp/
0004nobodyさん2009/09/01(火) 16:13:21ID:???
■ver1.1用
CakePHP プログラマーズ リファレンスガイド
http://cakephp.jp/doc/

CakePHPフレームワークによる快速WEB開発 |codezine
http://codezine.jp/a/article/aid/670.aspx


■関連書籍
・ver1.2系
CakePHP1.2ガイドブック
http://www.amazon.co.jp/dp/4839932468/
CakePHPによる実践Webアプリケーション開発
http://www.amazon.co.jp/dp/4839930651/
オープンソース徹底活用 CakePHPによるWebアプリケーション開発
http://www.amazon.co.jp/dp/4798022225/
CakePHP ポケットリファレンス※ver1.2beta
http://www.amazon.co.jp/dp/4774135038
CakePHP徹底入門
http://www.amazon.co.jp/dp/479811717X
・ver1.1系
CakePHPガイドブック
http://www.amazon.co.jp/dp/4839924317
Fast CakePHP
http://www.amazon.co.jp/dp/4774133418


■関連スレ
【PHP】フレームワークについて語るスレ13【総合】
http://pc11.2ch.net/test/read.cgi/php/1237825268/
0005nobodyさん2009/09/01(火) 16:13:48ID:???
テンプレらしきものは以上
補足があればどうぞ

Have a Nice Cooking !
0006nobodyさん2009/09/01(火) 17:42:35ID:???
乙
0007nobodyさん2009/09/01(火) 18:15:29ID:???
スレbake乙
0008nobodyさん2009/09/01(火) 18:16:13ID:???
スレscaffolding乙
0009nobodyさん2009/09/02(水) 13:12:39ID:???
スレアソシエーション乙。
0010nobodyさん2009/09/02(水) 15:49:16ID:???
cakeってキャッシュのグループ化とか出来ないのかね。
まとめて削除とかしたいんだけども。
0011nobodyさん2009/09/03(木) 12:27:23ID:???
ディレクトリ覗いてキャッシュ削除するのが、そんなに辛いの?
0012sage2009/09/03(木) 12:29:16ID:6RTv1eVY
1.2ガイドブックを読んでいます

テーブルに日付データを持たせてdatetime型で作成し、その後bake実行し、
ふんふんと眺めてみました。

新規作成のadd画面ではその日付データはドロップダウンリストになっているのですが、
そこに選択肢として、冒頭に「空白」(選択しない)を持たせたいと思っています。
現在、bakeされたソースコードは
echo $form->input('enddate',array('dateFormat'=>'YMD','monthNames'=>false,'timeFormat'=>'NONE'));
こんな感じでかかれているのですが、上記のようなことをしたい場合は

$form->selectの形で全体を書き換えなくてはいけないのでしょうか。
日付選択なので、現状の年月を取得するためのロジックはあえて書きたくないので、ピンポイントで
修正できる方法がないかと思っています。

それともbakeは本当に枠組みだけなので詳細なオプション等は書き換えが前提なのでしょうか。

よろしくお願いします。
0013nobodyさん2009/09/03(木) 13:58:34ID:???
>>12
オプションに
'empty' => '選択してちょ'
だったと思う

select 使う場合は、'showEmpty' => 'select me'
0014132009/09/03(木) 13:59:43ID:???
ごめん。select使うときは>>13じゃなくて、第5引数に設定だた
0015nobodyさん2009/09/03(木) 14:45:27ID:???
>>11
ファイルベースでやるなら
rmコマンド使ってまとめて消せるからいいんだけど
memcacheとか使うと出来ないじゃん。
0016122009/09/03(木) 18:07:45ID:???
>>13
ありがとうございます!!
無事に
echo $form->input('enddate',array('dateFormat'=>'YMD','monthNames'=>false,'timeFormat'=>'NONE','empty' => '選択してちょ' ));
こう書くことで一番初めの選択肢に追加することができました!
これを読んだあと、
http://book.cakephp.org/ja/view/189/Automagic-Form-Elements
こちらに同じことがかいてありました・・、すいません。
inputの第一引数の値によって、表示するタイプが違うので勝手にドロップダウンリストになるのですね。

実際、ビューに自作で手を入れるときはinputではなくselectを使用するほうがいいのかな、とは
思っているのですが(見た目で何が表示されるのかわかりづらい気がしました)
ありがとうございました。

ガイドブックにはここらへんの説明があまりかかれてないので、助かりました、ありがとうございます。
0017nobodyさん2009/09/03(木) 22:56:22ID:l9lqLow/
>>16
どういたしまして。がんばりや。
0018nobodyさん2009/09/04(金) 13:12:26ID:???
cakeでSNS作ってて質問があります。
1つの検索フォームに「ユーザー」「日記」の2つのラジオボタンを置いてラジオボタン別に検索内容を出し分けたい。
この場合フォームの送り先のControllerはどうするのが適切なのかな?

1. UsersControllerに送信してラジオボタンが「日記」だった場合はDiaryControllerにリダイレクトする
2. SearchesControllerみたいなのを作ってそこに送信。その中でどちらかのモデルから検索結果を取得
3. 根本的に頭の中がおかしい

アドバイスお願いします。
0019nobodyさん2009/09/04(金) 13:12:50ID:???
HttpSocketつかえねーな

Cookieの発行がおかしい
⇒チケット出てるみたいだけど、Cookieの仕様書どおりに作ったと言い張ってる?
リダイレクト
⇒3xxのリダイレクトを追跡してくれない。まぁ自分で追跡すればいいんだけど面倒

すなおにPear::HTTP_Clientつかった
0020nobodyさん2009/09/04(金) 14:40:43ID:???
>>18
PCならJavascriptで切り替えればいいと思うけどそれをしないなら
俺は2を使うな。

>>19
複数クッキーに対応してないだけでしょ。
書き直したら使えたよ。
0021nobodyさん2009/09/04(金) 14:55:30ID:???
core書き直しはヤダ
継承したクラス・・・めんどい
0022nobodyさん2009/09/04(金) 15:32:52ID:???
CURLでええやん
0023nobodyさん2009/09/04(金) 19:30:20ID:???
あのさ、今めっちゃ困ってたんだけど、cakeでねshuffleしたんだよ。配列を。

じゃあさ普通毎回配列の中身変わるじゃん?変わんないの。

なんでなん?shuffleって確か中身はrandだからsrandが固定されてんのかなって思って

コアライブラリにgrep掛けて探したら居るわけ。
cake\libs\security.php
********************************************
if (!defined('CIPHER_SEED')) {
//This is temporary will change later
define('CIPHER_SEED', '76859309657453542496749683645');
}
srand(CIPHER_SEED);
********************************************

まぁsrandちゃんとしない俺が悪いけどさ、
76859309657453542496749683645ってなんなのさ
誰か教えてよ!
0024nobodyさん2009/09/04(金) 19:43:31ID:???
最近、CakePHPに興味を持って触りだした初心者なんだが先人達にauthコンポーネントの使い方について質問したい。
みなさんは、認証が必要なページと不要なページが混在している場合ってどうしてますか?

1.AppControllerでauthコンポーネントを読ませて、認証が不要なページでAuth::allow()を呼ぶ
2.認証が必要なページでのみauthコンポーネントを読ませる
3.authコンポーネントを使用しない

どれもスマートさに欠ける気がするのだが、何か他に良い方法があったら教えて欲しい。
0025nobodyさん2009/09/04(金) 19:56:15ID:???
>>24
認証が必要なページってどんなページ
0026242009/09/04(金) 20:19:56ID:???
>>25
データの更新が可能なページ

参照系のページは、認証(ログイン)不要にしたい。
ゲストアカウント作っても良いのだが、一々ログインさせるのは面倒かなと思っています。
自動的にゲストアカウントでログインさせる様な巧い手があれば、それもアリかな?とも思っています。

ちなみにaclコンポーネントは自前で書いて、Auth->autherise=array('object'=>'HogeAcl');しようと画策してます。
※autherise:スペル違うカモ…手元にPC無いので確認出来ない
0027nobodyさん2009/09/04(金) 22:32:15ID:???
>>24
CakePHPのマニュアル的には1と2を場合によって使い分けるのがスタンダードじゃないのかな。
0028242009/09/05(土) 00:34:22ID:???
>>27
やっぱり、それがスタンダードですか。

とりあえず、今は↓みたいな感じでやってみようかと妄想してます。
・AppControllerでauthコンポーネントを読ませる
・beforeFilter()内で、未認証だった場合に Auth->login($dummy_user) を呼び出してダミーアカウントで認証
・afterFilter()又はbefore/afterRender()内で、ダミーアカウントで認証されていた場合にログアウト処理を呼び出す

0029nobodyさん2009/09/05(土) 11:21:53ID:4jU9VbTX
>>28

beforeFilter()内で
$this->Auth->allow()
$this->Auth->deny()
使ってやるのはダメなの?
0030242009/09/05(土) 18:13:26ID:???
>>29
あ、、、
確かに、>>28みたいにするくらいならbeforeFilter()内で自前のACL用コンポーネントのチェックメソッド呼んでallow()、deny() する方がスマートですね。
いつの間にか、Auth->authorize を使用する事に固執してしまっていたようです。
0031122009/09/05(土) 18:43:41ID:???
答えになってないかもな初心者ですが、ガイドブックの方では
(もしごらんになっていたらすいません)

・ユーザー登録(認証いらない)
・ブックマーク登録(認証必要)
みたいなケースの場合
app/app_controller.phpに認証必要フラグ$needAuthをfalseにし、trueの場合は
認証が正しくない場合は、エラーをだす。falseのときは何もしない。
というような処理をさせておいて
各コントローラーに、その認証必要フラグをいちいち
true,falseに切り替えることで処理していました。

userのコントローラーはneedAuthフラグをfalseにし
bookmarkコントローラーはneedAuthフラグをtrueにすると上位の
コントローラーでログイン情報の有無を確認する、という感じでしょうか。

まだ私がneedAuthコンポーネント使ってないので参考にならないかもしれません。
0032nobodyさん2009/09/07(月) 12:31:03ID:???
CakeのAuthは思ったより複雑だよね。

CakeでLDAP認証制御できたら、
フォルダのパーミッション毎に認証のON, OFFの切り分けできるのになぁと夢想したりする。

0033nobodyさん2009/09/07(月) 17:12:43ID:???
AuthというかACLね。面倒なのは。
0034nobodyさん2009/09/08(火) 00:46:21ID:xTRWhMD6
ACLって開発の最後に使う? 最初に使う?
0035nobodyさん2009/09/08(火) 00:53:44ID:???
最初に作っちゃうといろいろメンドクサイよね。
ある程度コントローラが固まった段階で入れてます。
0036nobodyさん2009/09/08(火) 06:26:04ID:???
MySQL、PostgreSQL、SQLiteの使えないサーバでCakePHP使ってる人いますか?
0037nobodyさん2009/09/08(火) 10:31:43ID:???
>>36
MySQLもない格安レンタルサーバーでCakeが動くかどうかわからないぞ。
もしPHPのメモリが足りたとしても、
大人しくCodeIgniterあたりでも使った方が良い。
0038nobodyさん2009/09/08(火) 11:14:35ID:???
>>37
ばっか。Oracl使ってんだよ。きっと。
0039nobodyさん2009/09/08(火) 12:10:55ID:???
そういえば、DB使わない開発できるけど、
DB無しの環境で動くのかどうか判らないなぁ
0040nobodyさん2009/09/08(火) 13:16:29ID:???
>>39
設定次第では普通に動くでしょ
0041nobodyさん2009/09/08(火) 13:22:21ID:???
app_modelに
$uses = false;
とか書けばいいだけじゃないの?

modelのCRUDを全てファイル操作にマップするビヘイビアとか探せばありそう。
いろいろ制限はされるし動作は遅いだろうけど
0042nobodyさん2009/09/08(火) 14:04:23ID:???
ちょっと趣旨は違うけどSQliteとかPosqlとか使えばいいんじゃない
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2061&forum=6
0043362009/09/08(火) 22:15:21ID:???
>>37
軽いフレームワークなんですね。>CodeIgniter
なかなか良さげなので調べてみます。

>>42
Posqlいいですね!pure PHPのデータベースでCakePHP対応してるなんて、まさに求めてた物です。
早速使ってみようかな。速度とか、安定性とかちょっと心配ですが…
0044nobodyさん2009/09/09(水) 00:40:18ID:???
フォームからのファイルアップロードのページを作ってるんですけど、

アップロードされたファイルを確かめて、
ファイルの種類によって処理を分けて(例えば画像だったらExifを解析したりサムネイルをつくるとか)
データを登録・・・っていう流れなんですけど、
そのまま直線的に書くと、コントローラーがどどーっと長くなってしまいます。

どの辺からモデルの仕事と分けるべきでしょうか?
0045nobodyさん2009/09/09(水) 00:43:12ID:???
全部じゃね?
0046nobodyさん2009/09/09(水) 00:44:11ID:???
class.uploadだっけ?
みたいな既存のライブラリをベンダーで読み込むとか
コンポーネント使うとか
0047nobodyさん2009/09/09(水) 01:01:21ID:rQurxkXZ
>>44

つMedia Plugin
0048442009/09/09(水) 02:17:00ID:???
ありがとうございます。
確かに >>46 さんの言うようにコンポーネントかなあとも思ったりしたんだけど、
コンポーネントでいろいろやってDB保存用のデータを出してくるんだったら、
最初からモデルなのかなあ。とも悩んでみたところでした。

Media Pluginつうのを調べてみたらビヘイビアで処理してるんですね。
これをちょっと試してみます。
0049nobodyさん2009/09/09(水) 03:01:54ID:???
コントローラ
処理を分ける部分。if文と各種呼び出しのみ。
if文が連なって長くなってもそれは仕方が無い。

コンポーネント
アップロードされたファイルの処理の部分

モデル
その他
0050nobodyさん2009/09/09(水) 10:37:42ID:???
モデルに処理書いてついでにアップロードのバリデーションエラーも書く
0051nobodyさん2009/09/09(水) 18:58:34ID:rQurxkXZ
MeioUpload ってやつもあるよ
0052nobodyさん2009/09/10(木) 15:07:21ID:???
こんにちは^^
hoge.com/users/login
としたいんですが

hoge.com/app/users/login になってしまいます><
app不要なんですがどこを弄ればいいですか?
0053nobodyさん2009/09/10(木) 16:28:33ID:???
>>52
ウェブルート/app/index.php
を読み込むからだろ。

ウェブルート直下にindex.php置けや。
0054nobodyさん2009/09/10(木) 16:45:19ID:???
ありがとうございます
できました><
0055nobodyさん2009/09/10(木) 17:16:22ID:???
>>52
一応言っておくけどそれ、apacheの質問だからね。
スレ違い
0056nobodyさん2009/09/10(木) 17:19:33ID:???
>>55
ちげーし
0057nobodyさん2009/09/10(木) 17:54:11ID:???
>>56
アパッチのことなんもわからんとリライト使ってるcakeなんか使うから
わからんくなるんだろ。
0058nobodyさん2009/09/10(木) 18:24:29ID:???
なんで喧嘩腰やねん
0059nobodyさん2009/09/10(木) 19:01:52ID:???
>>58
お前が慣れへん関西弁なんか使うからやないか
0060nobodyさん2009/09/10(木) 20:09:26ID:???
お前が慣れへん関西弁なんか使うからやないか〜い
0061nobodyさん2009/09/10(木) 20:19:38ID:???
おまえら関西バカにすんなや
怒るでしかしw
0062nobodyさん2009/09/10(木) 20:30:45ID:???
ワイが浪速のケーキ職人やでホンマ
0063582009/09/10(木) 20:34:14ID:???
大阪生まれ大阪生まれやヴォケ
0064nobodyさん2009/09/10(木) 20:34:54ID:???
後半育ちって書こうとしてまちごーたやないかボケ
0065nobodyさん2009/09/10(木) 21:29:59ID:vjF96vcK
SELECT tables.created + INTERVAL 1 HOUR FROM tables
とかどうすればいいん?

$this->Table->find('all',array('fields'=>'Table.created + INTERVAL 1
HOUR AS hoge'));
だと
SELECT `Took`.`created + INTERVAL 1 HOUR` AS `hoge` FROM `tables` AS `Table`
とかになってエラーになる

$this->Table->query('SELECT tables.created + INTERVAL 1 HOUR AS hoge
FROM books');
$this->Table->{'SELECT tables.created + INTERVAL 1 HOUR AS hoge FROM books'}();
しかないの?
0066nobodyさん2009/09/10(木) 22:51:58ID:???
>>65
DATE_ADD( Table.created, INTERVAL 1 HOUR) as hoge
ではどうでしょ?
0067nobodyさん2009/09/10(木) 22:57:56ID:???
>>65
パフォーマンス上問題が無いのであれば、
PHP側で実装する。

そうするとデータベース変更しても使えるしね。
E○-○UBEみたいに、ifでDB判断して
実行するSQLを切り替えなくてすむぞw
0068nobodyさん2009/09/11(金) 11:07:52ID:breeYuOb
ご質問させてください。
hoge_controllerがあって、
使うのテーブルがhoge1とhoge2がある場合、
モデルはhoge1.phpとhoge2.phpになるのでしょうか?

今までコントローラー名とモデル名は同じで作成していたのですが、
一つのコントローラーで2つのテーブルに同時にsaveしたい時に
どうしてもこのやり方ではできなくなってしまったので・・・

$this->Model->query()で無理矢理やれない事もないのですが、
$this->Model->query()がクエリに成功しても失敗しても
レスポンスが返ってこないのでエラー処理できなくて困ってます。

ご教授いただけるとありがたいです。
0069nobodyさん2009/09/11(金) 11:17:45ID:???
>>68
アソシエーションをちゃんとかいてれば、まとめてsaveするよ。

hoge1とhoge2の関係性とか書いたほうがいいんじゃないかな。
0070nobodyさん2009/09/11(金) 11:35:25ID:breeYuOb
>>69
ありがとうございます。

hoge1とhoge2の関係が1:多の関係で、
今やっているのが、hogeControllerに
$users= array('Hoge');
と記述していて、

hogeModelには
useTable = "hoge1";
となっています。

hogeModelからfindでhoge1の情報を取得しているのですが
最終的にその情報をもとに、hoge1とhoge2にそれぞれ
UPDATEとINSERTをやりたいのです。

その場合、それぞれテーブルごとにモデルを作成して、
hoge1側に$hasOneを設定すればいいのでしょうか?

0071nobodyさん2009/09/11(金) 11:39:45ID:???
>>70
× $users = array('Hoge');
○ $uses = array('Hoge');

ですね、失礼しました。
0072nobodyさん2009/09/11(金) 12:00:54ID:???
>>70
Hoge1 を Article
Hoge2 を Comment
とすると

Articleモデルは
$hasMany = array('Comment');

Commentモデルは
$belongsTo = array('Article');
としておけばよい

あとは、ArticlesControllerで
$this->Article->saveAll とか $this->Article->Comment->save とかする
0073nobodyさん2009/09/11(金) 12:02:31ID:???
>>70
>その場合、それぞれテーブルごとにモデルを作成して、
>hoge1側に$hasOneを設定すればいいのでしょうか?
それでいいと思うよ。

なるべく$usesとか使わないで、命名ルールに素直に従う方が後々楽ですよ。
例えば、テーブル名をhogeとhoge1にしてHogeモデルとhogeコントローラーを作るとか
0074nobodyさん2009/09/11(金) 12:03:42ID:???
>>72
$this->Article->save
$this->Article->Comment->save
で分けて保存した場合トランザクションが利かないことがあるよね。
0075nobodyさん2009/09/11(金) 12:14:43ID:???
>>72
>>73
ありがとうございます!参考にさせて頂いてやってみます。
0076nobodyさん2009/09/11(金) 13:11:22ID:???
>>75
なんか敬語が変だよね。
0077nobodyさん2009/09/11(金) 13:48:03ID:???
でたな揚げ足マン
0078nobodyさん2009/09/11(金) 16:43:55ID:???
なぁなぁ、デバッグオフの時にもエラーログ吐かせたいんやけど、
できやへんの?
0079nobodyさん2009/09/11(金) 19:05:57ID:???
何すんの?
0080782009/09/11(金) 19:29:39ID:???
>>79
もしかして俺に聞いてくれてる?


いやほら、なんか予期せぬエラーが出て処理が止まったりしたりしても気づけないじゃん。
0081nobodyさん2009/09/11(金) 20:02:35ID:???
error_reporting(E_ALL)
0082nobodyさん2009/09/11(金) 20:16:33ID:???
>>78
さぁ、このページで「log」で検索する作業に入るんだ。
マニュアルに結構載ってるから一通り読んで、まず検索してみろ。
ググっても結構あったぞ。
0083nobodyさん2009/09/11(金) 20:44:00ID:???
>>82
このページでlogなんかなかったし><
0084nobodyさん2009/09/11(金) 21:02:25ID:???
>>82
あ、ごめん。数ヶ月前に見たけど出来なかったサイトがあったんだけど、

もう一度見たら出来たわ。ごめんあさい。

http://www.a24loveweb.net/cake/%E9%81%8B%E7%94%A8%E6%99%82%E3%81%ABphp%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
これね!
0085652009/09/12(土) 00:56:23ID:???
>>66
いやあ、勝手にパースされて`が変なところに付くということなんで
SQLを変えても意味がないというか。
$this->Table->selectAdd('tables.created + INTERVAL '.$this->Table->escape('$hour').' HOUR AS hoge');
みたいなのがあればいいんだがなあ、と。

>>67
EC-Cubeは使ったことないからわからないが、
今回は単純なSQLだからいいけど、
複雑なのだと非常にパフォーマンス上問題になりそうなのでご勘弁願いたい。

つうかDB乗り換えるような変更があったとしたら、
SQLだけ対応しててもそのまま動くとは思えないんだが。
0086nobodyさん2009/09/12(土) 01:13:40ID:???
paginatorのsortKeyの第二引数$options['sort']って何ですか?

preg_match('/(?:\w+\.)?(\w+)/', $options['sort'], $result)
とか書いてあるけど全然意味がわかりません。
0087122009/09/12(土) 11:58:30ID:???
PostテーブルにFROMのUser.idと
toのUser.idを格納するフィールドを作りました。

Post.user_id
Post.from_user_id
と作成し、
'from_User' =>array('className' => 'User','foreignKey' => 'from_user_id'),
'to_User' =>array('className' => 'User','foreignKey' => 'user_id'),
のように$belongsToを設定しました。

ここでPostの編集画面(edit)でそれぞれのUserを選択させるコンボボックスを表示させる場合に
他所でbakeしたソースを見ると
$users = $this->Post->to_User->find('list');
$this->set(compact('users'));
こうセットしているようなのですが、これだけだとfromの方はtextでidがそのまま出てしまいます。
試行錯誤の結果
$from_users = $this->Post->from_User->find('list');
$this->set(compact('from_users'));
が必要なことがわかったのですが、ここの$from_usersという名称はどこで関連付けた名前なのでしょうか。
toの方は$usersで良いのがなぜだかわからず。
ためしに$usersを$to_usersにしたら動かなくなりました・・・。
モデルの基本的なところが理解できていないかもしれませんが、
こういう場合はどのようにするべきなのでしょうか。
わかりにくい質問ですいません。
0088nobodyさん2009/09/12(土) 12:05:02ID:???
>>85
ちゃんとやってみたのか?>>66の言うとおり
$this->Table->find('all',array('fields'=>'DATE_ADD(Table.created, INTERVAL 1 HOUR) as hoge'));
でいけるはずだぞ。

>>86
普通は第2引数は指定しないと思う。
そうするとデフォルト値とquery stringをマージして現在のソートキーを返してくれるから。

$options['sort']は、'Model.id'みたいなのから'id'を取り出してるだけじゃなかろうか。
0089822009/09/12(土) 12:24:36ID:???
>>82は
http://book.cakephp.org/ja/view/2/x1-2-Collection
というurlを入れるつもりだったのは秘密だ ><
ごめんな!>>78
0090nobodyさん2009/09/12(土) 17:49:07ID:???
; * PHP versions 4 and 5
; *
; * CakePHP(tm) : Rapid Development Framework <http://www.cakephp.org/>;
・
・
・
よくコードに上記のようなコメント書いてるけど絶対書かないといけないんですか?
書き方載ってるサイト教えてください
0091nobodyさん2009/09/12(土) 18:13:52ID:???
>>90
phpDocumentor でググるといいかな。
絶対必要というわけではないけど、
自分で作ったファンクションとかAPIのドキュメントを自動生成するために書式が決まってる。
後から自分のコードを読みやすくするには書いとくクセを付けといた方がいいのかも。
0092nobodyさん2009/09/12(土) 20:34:34ID:???
>>91
ありがとうございます早速調べてきます
0093nobodyさん2009/09/13(日) 01:37:39ID:???
最近いいスレだなって思う
うん、それだけ。
0094nobodyさん2009/09/14(月) 21:33:44ID:SnxRq9UL
uuidほど広範囲でなくて、
そのテーブル内でユニークなランダム文字列ないし数字を振ってくれる便利なものないですか?
UUIDは長過ぎて8文字程度のランダムな文字列を割り当てたいんだけど
0095nobodyさん2009/09/14(月) 22:22:12ID:???
>>94
MySQLのauto incrementじゃ駄目なん?
あとこの質問はスレ違いじゃない?
0096nobodyさん2009/09/14(月) 23:05:17ID:SnxRq9UL
ランダムがいいんだよ

CakeのString::uuid()がらみで聞いてみたけど確かにすれ違いかも
Cakeに用意されてたら同じくStringクラスにあるはずだしね。。
0097nobodyさん2009/09/15(火) 00:35:27ID:???
ちょうどtwitterでよく使われてる短縮urlサービスのbit.lyについてるユニークidみたいな文字列が作りたくて
以前作ってみた。
処理としては、app_modelに、ランダムな/[a-zA-Z0-9]{8}/を返す関数を作り、
save時にそいつを呼び出して割り当てる(既に割り当て済みの文字列だったら、新しいものが出てくるまで処理を繰り返す)
これでいけた。まあ自前で作っても簡単。
0098nobodyさん2009/09/15(火) 01:27:37ID:???
uuid を crc32 するとか
なんかアホらしい気もするが
0099nobodyさん2009/09/15(火) 13:15:24ID:???
>>95
俺なら、それをmd5やらbase64やらsubstrして取り出すけどな。
0100nobodyさん2009/09/15(火) 13:20:04ID:???
もうタイムスタンプか、それを16進数化とかが一番被らなくていいんじゃね
0101nobodyさん2009/09/15(火) 13:31:25ID:jnkEds0n
あー皆さんありがとうございます。
速度遅そうですが以下のようにしました。

Model->__schemaあたりからidのカラム長を取得
Text_Passwordでカラム長のパスワードを生成
Model->findしてかぶりがないかチェック
かぶっていれば10回まで再帰

ってなビヘイビアを作り読み込む。
■ このスレッドは過去ログ倉庫に格納されています