トップページ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
0117nobodyさん2011/02/22(火) 21:52:12.81ID:???
今日の住人はツンの日か
0118nobodyさん2011/02/22(火) 21:56:31.59ID:???
>>116
そこをなんとかお願いします
0119nobodyさん2011/02/22(火) 22:39:56.66ID:???
>>104
お前の稚拙な考えはmixiとかで発表してろ。
お前のようなど素人は秀丸とかでちまちまやってから
辛いかもしれんがプロはIDE使ってるんだよ。心配すんな。
0120nobodyさん2011/02/22(火) 22:41:35.07ID:???
>>119
お前、秀丸つかってんの?
俺はイクリプス一択なんだけど?w
0121nobodyさん2011/02/22(火) 22:44:08.89ID:???
なんか口の悪いおっさん多いなぁ
0122nobodyさん2011/02/22(火) 23:17:03.04ID:???
秀丸はダサイ
0123nobodyさん2011/02/22(火) 23:17:28.23ID:fDDX4hLa
すみません。素人ですが横から質問させてください。

モデルのuser.php(usersテーブルを呼び出し)と
コントローラのregisters_controllers.phpと
ビューのregistersフォルダがあります。

registers_controllers.phpを下記のようにしてモデルのuser.phpを呼び出し
usersテーブルを読み込もうとするのですが
Error: The view for UserController::add() was not found. が出ます。
viewsにはregistersフォルダを用意してあり、index.ctpも配備されているのですが
なぜエラーが出るのでしょうか?


---registers_controller.php----------------------------------
<?php
class RegistersController extends AppController {

var $name = 'User';
以下略
------------------------------------------------------------



---user.php-------------------------------------------------
<?php
class User extends AppModel {
var $name = 'User';

以下略
0124nobodyさん2011/02/22(火) 23:31:02.14ID:???
class RegistersController extends AppController {
var $name = 'Registers';
var $uses = array('User');
0125nobodyさん2011/02/22(火) 23:32:12.94ID:???
>>123
エラーメッセージ読めよ。
UserControllerはあるのか?
CakePHPはUserControllerがあるという認識で動いてるぞ。
0126nobodyさん2011/02/22(火) 23:35:19.01ID:fDDX4hLa
>>124, >>125
ありがとうございました。おかげさまで出来るようになりました。
0127nobodyさん2011/02/22(火) 23:47:54.53ID:fDDX4hLa
ごめんなさい、初心者ごとで申し訳ないのですがもう1つだけ質問させてください。

コントローラ(registers)で他モデル(user)を呼び出した後、
コントローラ内に他モデル(user)を扱う場合は
$this->User->ほにゃらら で使えますよね?

では、viewから下記のようにデータを受け取ったときはどのように
すればいいのでしょうか?純粋に
$this->register-> でOKですか?

echo $this->Form->create('Register');
echo $this->Form->input('email');
echo $this->Form->submit();
echo $this->Form->end();
0128nobodyさん2011/02/22(火) 23:51:58.04ID:???
>>127
いくら分かりにくくて間違いも多いといわれるCookbookとはいえ、
それくらいはちゃんと書いてあるぞ。

そのレベルの質問をするなら、
せめて
http://book.cakephp.org/ja/view/1528/CakePHP%E3%83%96%E3%83%AD%E3%82%B0%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB
この実務で使いそうなちょっと込み入った使い方には一切触れてないチュートリアルで
ブログ(笑 を作ってみれ
0129nobodyさん2011/02/22(火) 23:55:07.65ID:fDDX4hLa
>>127
すみません。一応このチュートリアルもACLもやったんですが、
いまだに理解できていないのが現状です。。。
0130nobodyさん2011/02/23(水) 00:03:55.10ID:gK6lHkB0
>>128さん

>>127でviewのForm->create()で実質ユーザーテーブルへ登録することになるけど
飛び先はそのままのページ(register.add)へ遷移させたいので
echo $this->Form->create('User',array('url'=>'.'))
としていますが、おかしいようです・・・・
0131nobodyさん2011/02/23(水) 00:09:28.68ID:gK6lHkB0
hoge.com/registers/addに飛ばしたいのですが、
formで別モデル(User)を指定しているのでジャンプ先が必ず
hoge.com/users/registers/add になってしまいますねorz
0132nobodyさん2011/02/23(水) 00:25:23.06ID:???
>>129
うーん、やったとは思えんのだがなぁ。

> では、viewから下記のようにデータを受け取ったときはどのように
> すればいいのでしょうか?純粋に
> $this->register-> でOKですか?

http://book.cakephp.org/ja/view/1537/%E8%A8%98%E4%BA%8B%E3%81%AE%E8%BF%BD%E5%8A%A0

流石にチュートリアルやっといて$this->dataを忘れるとは思えぬ・・・

俺モデル名とコントローラー名は規約どおりにしかやったこと無いからなぁ。
初心者ならあまりトリッキーな事はしないほうが、無用なトラブルを避けられると思うよ。
0133nobodyさん2011/02/23(水) 00:41:36.70ID:gK6lHkB0
>>132
すみません。チュートリアルもやるにはやって本も400ページほど読んだのですが、
完全に把握できず、どういうものか良く分からないで何となくやってるのが現状です。

こういう理解でよいものでしょうか?

1.フォーム入力から受け取ったデータは、取り扱っているモデル名に関わらず
$this->dataという変数に連想配列形式で格納される

2.DBからのデータは $this->(モデル名)->(様々な関数コマンド)を利用して
必要な分だけを呼び出す。
もし、Modelでアソシエーションを組んでいた場合、その呼び出した際の
メインテーブルの対象レコードに紐づくアソシエーション先も自動的に呼び出される。
すなわち モデルTable1にTables2をアソシエーションで設定していたら
$str = $this->Table1->find('all');

この時点で$str[0][Table2][任意フィールド]の中に
Table1で絞られたレコードのTable2の関連レコードが格納されている

という認識でいいんですよね?

あと良く分からないのがアソシエーションを組んでるときに
$this->Table1->Table2->save()
みたいに複数のテーブルを跨いでいってる場合です。
普通に
$this->Table2->save()
じゃ駄目なのでしょうか?
0134nobodyさん2011/02/23(水) 00:46:24.44ID:gK6lHkB0
>>132
これもコントローラ名(URL)を複数形やテーブル名と同じにしなければいけないという
基本規約のせいなんです。

たとえば皆さんは会員登録もメンバーリスト参照も同じusersコントローラでするのですか?
http://hoge.com/users/register
http://hoge.com/users/view
のように

この場合、cakephpで作っているのがミエミエで攻撃されやすくなりません?
皆様のご意見も聞かせていただければ幸いです。
0135nobodyさん2011/02/23(水) 01:09:41.82ID:???
>>133
ふーむ、しょうがないのう。
> 1.
POSTに限りyes。モデルがどうなってるかは、コントローラーでdebug($this->data)とかして、
自分で見てみると良い。
あと、CakePHPでGETメソッドは上級者向けなのでなるべく使わないほうが良い。
> 2.
大体そんな感じ。このあたりは奥が深いので、
とても1レスで全てを伝えるのは無理、というか俺も把握しきれてない。
$this->Model->Model->save()はあまりしないな。
トリッキーな事をしてなければ、UsersコントローラーではUserモデルへのデータと、
アソシエーションで紐ついてるデータを保存するわけだからな。
$this->User->save()か$this->User->saveAll()で基本的には十分。
Userモデルに紐付く何かも、ViewをFormHelper使って無難に作っていれば、
$this->dataをsave()かsaveAll()すれば問題なく保存されるはず。
ただ、どういう場合にsave()かsaveAll()は俺もちょっと語れるほどじゃない。たまに試行錯誤する。
0136nobodyさん2011/02/23(水) 01:20:15.27ID:???
>>134
CakePHPではURLの見栄えはroutesで調節するのがセオリー。
ただ、これはちょっと難易度が高いのが難点。
ここでのやり取りから察するに、質問者はroutesにかなり時間をかけて取り組むことになるとは思う。

一応Cookbookはこのページだけど、なんかだらだらと書いてあって要点を得ない。
とても分かりにくい。が、しかたがない。

http://book.cakephp.org/ja/view/945/%E3%83%AB%E3%83%BC%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A

> 一般的な Router の他の使い方は、コントローラの別名(alias)を定義することです。通常の /users/someAction/5 という URL の代わりに、/cooks/someAction/5 でアクセスさせたいとしましょう。このようなルートの設定は、次のようにすることで簡単に実現できます。
> Router::connect(
'/cooks/:action/*', array('controller' => 'users', 'action' => 'index')
);


一応この方法でUserControllerのまま、URLを変える事が出来る。
ただ、これだと/cools/add みたいなのもUsersController->index()に行っちゃいそうな気がするけど・・・
Cookbookが間違ってるのか俺が間違ってるのか。面倒だから確認はしない。
0137nobodyさん2011/02/23(水) 01:35:30.01ID:gK6lHkB0
>>135さん,>>136さん
ありがとうございます!!!感謝感激です。

>>127の件は下記で解決できました!!!
echo $this->Form->create('Register');
echo $this->Form->input('User.email');←モデル名. をフィールド名の前へ追加
echo $this->Form->submit();
echo $this->Form->end();


>>134についてですが、皆さんは規約どおり
usersテーブルに関連するものであれば全てURLを
hoge.com/users/○○○○○
としてるのですか?
CakePHPで作ってるのを隠蔽したいのであれば、工夫などされていませんか?
0138nobodyさん2011/02/23(水) 01:40:49.20ID:gK6lHkB0
それと例えば hoge.com/register/でアクセスさせたいのに規約のせいで
hoge.com/registers/と複数形になるのは諦めてますか?
それとも>>136さんが言うようにroutesで調整してます?

そうなれば、そもそもusersコントローラとregistersコントローラに分ける
必要はなくて最後にroutesで全て設定すればいいんでしょうか?
どういうやり方が標準なのか分からず、ごめんなさい。
0139nobodyさん2011/02/23(水) 01:52:29.68ID:???
これソース読めん。
0140nobodyさん2011/02/23(水) 01:56:59.29ID:???
>>137
そりゃたまにはコントローラーとモデルの規約に沿わない名前にすることもあるよ。
1モデルに大して2コントローラーなケースとか、その逆とかな。
ただ、それなりにCakePHPの中身を分かってるから出来るだけで、
初心者がURLに見栄え目的に規約に沿わない名前にすると、
今見たくトラブるだけさね。

CakePHPは規約に沿う事で色々と工数を省略できるようになってるわけで、なるべく沿ったほうが良い。
ただ、コントローラー名=URLだと困る事も想定はされる。
でも規約に沿わないとめんどくさくなる。
だからroutesで設定できるようになってるんだ。

別に規約に沿わなくても開発は出来るよ。
ただ、CakePHPの利点を使わないで作るから、めんどうになるし、
/register/addに遷移したいのに/users/addに遷移したりとトラブルになりやすいだけ。
FormHelperでいちいちModel.fieldにしないといけなくなったのも、規約に沿ってない弊害だな。
0141nobodyさん2011/02/23(水) 02:06:04.37ID:gK6lHkB0
>>140
懇切丁寧な解説ありがとうございます。
非常に説得力があります。
確かにこれではCakePHPのメリット(省略による開発速度)が損なわれてしまいますね

やはり、基本的には
関連するテーブルは一つのコントローラ、モデル、ビューに収めていく形式がいいのですね。

そうすると、一つのコントローラの中に多くメソッド(アクション)が入りすぎてゴチャゴチャになるという理由からもコントローラを二つにして、メソッドを分けようと思っていたのですが、そのやり方は一般的ではないんですね?

一つのコントローラ内にアクションが30個入るとか普通なのかなぁー(^_^;)

URLの見栄えの件はroutes設定で了解です。


ただ全てのコントローラ(URL)が複数形になっていますが、これを全部単数系にroutes内で弄っていくのが一般的なのでしょうか?
0142nobodyさん2011/02/23(水) 02:06:45.51ID:???
そもそもCakePHPであることを隠してなんになるというんだろう。
CakePHPは、元々CakePHPである特徴が多くて隠蔽しにくいフレームワークだからな。
そりゃなんのフレームワークを使っているか、隠せるなら隠したほうが良いけど、
手間対効果を考えれば、あまり気にするとこじゃないと思うんだけどな。

俺だったら、予算をくれるんならやらないこともないけどね。
予算が足りなきゃ、むりっすーって言ってつっぱねるだけだわ。
0143nobodyさん2011/02/23(水) 02:14:02.29ID:???
>>142
予算とかではないのですが海外で公開する予定なんで、
攻撃されまくりそうで怖いんですf^_^;)

Ruby on railsとかなら、こういうCakePHPの規約ならではの弊害みたいなの無いんですかねー?
0144nobodyさん2011/02/23(水) 02:24:46.99ID:???
>>141
どんなのを作ってるのか知らんからなんとも言えないとこではあるが、
1コントローラーに30アクションは多いかもね。
そんなにアクションが必要になるのを作った事が無いから、イメージわかないな。
むしろ何を作ろうとすればその数のアクションが必要になるのか、ちょっと興味があるな。

とりあえず単数形にしようと思ったことが無いからよく分からん。
複数形で別にいいじゃん。何か問題でもあるの?
それで機能しないわけでもあるまいし、意味不明なURLになるわけでもないし。
0145nobodyさん2011/02/23(水) 02:59:23.91ID:???
FormヘルパーでModel.Fieldとするのは一般的ではないのですか?
購入した初心者用の本の中では多用されてました。

単数系、複数形については

users/register(仮登録。ハッシュURL付きメール送信まで)
users/regcheck(仮登録後、ハッシュURLをクリックで本登録への動作)
users/list(メンバーリスト閲覧)

となるよりは

register
regcheck
list
となったほうが見た目もスッキリになるからです
0146nobodyさん2011/02/23(水) 03:25:33.34ID:???
>>145
一般的かと聞かれると、まぁなんとも言えないところはあるね。
俺自身、CakePHPの省略に悩まされる事もあったし。まぁ、好みにもよると思うよ。

例えば、UsersController で規約どおり UserModel がusesされてる場合。
/users/add.ctpにFormHelper->create()したら、
規約(これも規約って呼んで良いのかしらんが)によってcreate('User')と同じになる。
規約によってcreate()でもcreate('User')でも、
その時点で$this->Form->input('field')はinput('User.field')と同じ。
そこにアソシエーションで紐付いたUser以外のモデルのを書く場合は、input('Comment.field')と書かないならない。

これが前提として、省略はあくまで省略なので、逐一Model.fieldと書いてももちろん良い。
トラブルは避けやすいかもね。規約による楽さを捨ててるけど。
ただ、省略が出来る以上、ネット上の情報では省略されてることもあり、
規約に沿わない作り方をしてcreate()てかいて/register/addじゃなく/users/addに遷移して困るのは、
それはそれとしてって事かな。
0147nobodyさん2011/02/23(水) 03:35:51.27ID:???
>>145
まぁ、どうしても単数系にしたかったらroutesに沢山書くのがセオリーなんじゃないかな。
俺もCakePHPを完全に使いこなしてるわけじゃないから、他にも方法があるかしらんけど。
さっきも書いたけど、規約に沿うのを特に進めたのは、
質問のレベル的に、そこに手を出すのは早いんじゃないかと思ったのがあるからね。
流石に$this->dataを知らない風な質問をされたら、ね。

使いこなしてる人は色々と自分なりの使い方でやってると思うよ。
例えばコントローラじゃなくてモデルだけど、これの「4. アクション毎にModelを作る」とか
http://www.1x1.jp/blog/2010/12/thinking_abount_cakephp_mode.html
あとCakePHPの隠蔽について。後半はネタっぽいが。
http://d.hatena.ne.jp/k1LoW/20101202/1291262612

この2つはCakePHP Advent Calendar 2010でのだけど、
このイベントの記事はそこそこ良い記事ばかりだし一通り読んでみるのも良いかもね。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2510&forum=16
0148nobodyさん2011/02/23(水) 09:43:30.81ID:???
CakePHPのctpを使いたくないです
テンプレートと入れ替える方法どこかに載ってないでしょうか
0149nobodyさん2011/02/23(水) 14:34:50.64ID:???
>>148
「cakephp smarty」とかでググれば幸せになれるよ
0150nobodyさん2011/02/23(水) 16:34:55.81ID:???
Smartyなんて久しぶりに聞いたな
0151nobodyさん2011/02/23(水) 18:09:23.62ID:???
<?php e($test)?>
こうするのも
{$test}
こうするのも一緒なんだけど、
後者の方がデザイナーとかには分かりやすいんじゃない?
0152nobodyさん2011/02/23(水) 18:18:28.09ID:???
HTMLが分かるほうのデザイナーなら、
囲い文字がどっちでも一緒だと思うけどね。
まぁ確かに<?php echoはちょっとめんどくさいけど。
でもSmartyはオワコン感が強いな俺の中で。
0153nobodyさん2011/02/23(水) 21:46:12.22ID:???
えっwww

Smarty使わないって仕事でCakePHPを使ってない人ですよね?www
0154nobodyさん2011/02/23(水) 22:15:58.50ID:???
0155nobodyさん2011/02/23(水) 23:02:33.16ID:???
何年も繰り返し議論し尽くされてきたが、
PHP自体が所謂テンプレート言語の類なのに、
その上にテンプレートエンジン構築してどうする
0156nobodyさん2011/02/23(水) 23:19:25.45ID:???
デザイナーがsmartyを使いたいと言ったら使わざるを得ない状況もある
というのも繰り返し言われてきた

俺もテンプレートエンジン不要派だけど、必要だという人がいるのなら使うのもしょうがないんじゃないかなー
0157nobodyさん2011/02/24(木) 13:43:09.42ID:???
PHPのコード見るだけで逃げ出すデザイナもいるからな
あとデザイナにPHPのコード壊されたりもしたから、基本いじらせたくないな。
0158nobodyさん2011/02/24(木) 14:52:21.15ID:???
そんなデザイナーは廃業してもらうしか・・・
今日日サーバーサイドに何らかのプログラムが絡む案件なんて珍しくないし、
phpに理解が無くても、HTML構造の特定のまとまりを崩さなければ、
phpコードを崩す事なんてそうそうないわけで。
それを崩しちゃう人って、
もうHTMLレベルで平気で閉じの無いタグを量産する可能性があるって事だろ。
webデザイナーとしてそれってどうなの?
0159nobodyさん2011/02/24(木) 15:24:05.68ID:???
wordpressやMTのテンプレートなんかを作れる程度の知識はあっても
cakeの場合はcakeの動きを知らなきゃviewを作るのは難しいと思うよ。
0160nobodyさん2011/02/24(木) 17:03:24.16ID:???
下記をもっとスマートにコーディングするとしたら、どんな風になるのでしょうか?

function verify($urlparam = null) {

$data = $this->Regurl->findAllByRandomUrl($urlparam);
if (!$data) {
$this->flash('Invalid URL!!','index');
}else{
if ($data[0]['User']['activated'] == 0) {
//print_r($this->data);
$this->User->id = $data[0]['Regurl']['user_id'];
$this->User->saveField('activated', 1);

$this->flash('Now activated!!','index');

}elseif($data[0]['User']['activated'] == 1){
$this->flash('Already activated!!','index');
}
}

}



コントローラUserから、外部モデルRegurlの中のrandom_urlフィールドと照合して、
一致するものがあればアソシエーション先のUserテーブルのactivatedフィールド(フラグ)を
1へ書きかえる処理です。

UserモデルではRegurlのuser_idに対しhasOneで、RegurlモデルではUserのidに対してbelongsToで
アソシエーションを設定してあります。

0161nobodyさん2011/02/24(木) 18:06:12.76ID:???
>>160
まあこの程度ならどっちでもいいって言えばどっちでもいいけど、
randomurlのチェックやらsaveFieldなんかの処理は
モデルに書くとすっきりすると思うのねん。

コントローラーは
if($this->User->checkRandomUrl()){
 $this->User->activate();
 $this->Session->setFlash('どったらこったら', true));
}else{
....
}

こんな感じで何やってるかわかりやすくなるっしょ。
0162nobodyさん2011/02/24(木) 18:18:50.60ID:???
ビューの中で表示の分岐処理ってやらないほうがいいよね?
0163nobodyさん2011/02/24(木) 18:26:50.80ID:???
>>162
ifメンバーだったらここになになにを表示とか普通にやってるけどダメなの?
0164nobodyさん2011/02/24(木) 18:35:27.29ID:???
>>161
ありがとうございます。
コントローラ内でするとしたら
どういう書き方がスマートになりますでしょうか?
0165nobodyさん2011/02/24(木) 19:49:49.23ID:???
>>164
コントローラーに書くこと自体がスマートじゃない
0166nobodyさん2011/02/24(木) 22:04:42.87ID:???
Ktai Libraryで、振り分けをしたいんですが
1.3で、bootstrap.php内に

App::import('Vendor', 'ecw/Lib3gkCarrier');
$carrier = Lib3gkCarrier::get_instance();

if($carrier->is_ktai()) {
App::build(array(
'views' => array(ROOT . DS . APP_DIR . DS . 'views' . DS . 'm' . DS)
));
}

って記載したのですが、振り分け出来ないです。
他にすることってあるんですか?
0167nobodyさん2011/02/24(木) 22:42:35.95ID:???
>>165
モデルにコーディングするしたら、どのように書けばスマートかを、コントローラへの記述とのセットで見せていただければ幸いです。

初心者ながらに試行錯誤して最終的に出来たの結果が、あのコードでした。
経験豊富の方のコーディングの仕方を見てみたいです。

0168nobodyさん2011/02/25(金) 03:38:33.94ID:???
>>167
経験豊富じゃないけど、
ロジックはモデルに書けるならモデルに書くべきってだけなんだよね。
そのままモデルに持っていけば良いと思うんだ。
以下つっこみどころ豊富なコード。動かして無いから間違いはたぶんある。

UserModel extends AppModel{
function activate($url){
$data = $this->Regurl->findByRandomUrl($url);
if(empty($data))
return false;
if($data['User']['activated'])
return 'already';
$this->id = $data['User']['id'];
$this->saveField('activated', 1);
return 'activated';
}
}
SomeController extends AppController{
function index(){
if(!$result = $this->User->activate($this->data['url'])) {
$this->Session->setFlash('Invalid URL!!','index');
return;
if($result === 'activated'){
$this->Session->setFlash('Now activated!!','index');
return;
}
if($result === 'already'){
$this->Session->setFlash('Already activated!!','index');
}
}
}
0169nobodyさん2011/02/25(金) 10:26:28.95ID:???
シンタックスなど各種色々エラーが出たので素人ながら手直しさせていただきました。下記で大丈夫ですか?もっとスマートなコードになればいいのいですが・・・
---MODEL-------------------------------------------------------
Class RegurlModel extends AppModel{
var $name = 'Regurl';
function activate($url){
$data = $this->Regurl->findByRandomUrl($url);
if(empty($data)){
return false;
}
if($data['User']['activated']==1){
return 'already';
}else {
$this->id = $data['User']['id'];
$this->saveField('activated', 1);
return 'activated';
}
}
}
---CONTROLLER------------------------------------------------
Class UsersController extends AppController{
function index($this->data['url'] == null){
if(!$result = $this->User->activate($this->data['url'])) {
$this->Session->setFlash('Invalid URL!!','index');
}
elseif($result === 'activated'){
$this->Session->setFlash('Now activated!!','index');
}
else($result === 'already'){
$this->Session->setFlash('Already activated!!','index');
}
$this->Session->setFlash('Invalid URL!!','index');
}
0170nobodyさん2011/02/25(金) 14:11:48.82ID:???
function index($this->data['url'] == null){

これが気になったんだけど、何でこんな事してるの?
0171nobodyさん2011/02/25(金) 14:30:13.42ID:???
パラメーター部分が未入力だとエラーになるからです
0172nobodyさん2011/02/25(金) 14:47:53.68ID:???
$this->dataってことはPOSTで来てるの?
未入力がどうこう言う場合はValidationかけましょうや。
0173nobodyさん2011/02/25(金) 14:57:37.07ID:???
>>170
ああ、モデルに移したやつには余計だったね。
このコードが何のコードか、いまいちよく分かってなかったから、
そのまま書いちゃったよ
0174nobodyさん2011/02/25(金) 15:21:25.48ID:???
>>173
あれ?と思ったら>>168ではちゃんと消してるじゃないか。

>>169
コントローラーのアクションの引数を使って、パラメーターを受け取る方法もあるけど、
あんまり使わないんじゃないかな。

function index($this->data['url'] == null){
というか、これは動くの?メソッドの引数に$thisが入ってるなんて初めてみるんだけど。

なんかめんどくさくなってきたから、もうコントローラに書いたら良いんじゃないか?
何の実装かがわからないと、スマートになんてかけない気がしてきた。
beforeValidate()やbefore/afterSave()とか使ったほうがスマートになりそうな雰囲気あるけど、
詳細わからんとねぇ。

とりあえず引数に書くよりif(!empty($this->data['url']))しといたほうが良いんじゃないか。
0175nobodyさん2011/02/25(金) 15:42:56.64ID:???
わからない場合は、少々複雑でも単純に書けば良いんだよ。

function index(){
$url = isset($this->data['url']) ? $this->data['url'] : null;

にすればいいじゃないか。
0176nobodyさん2011/02/25(金) 15:45:11.29ID:4/qlOsDP
CakePHPでコミュニケーションアプリ作っていよいよAmazonかNECのクラウドにのせてテスト運用だけになったんだけど本日クライアントがGAEなら500万PVまで無料らしいから最初はそうしたいって言いやがった。。。
0177nobodyさん2011/02/25(金) 16:24:48.62ID:4/qlOsDP
JavaVM上にPHP動作環境作ってそのままCakePHP動かせるのかはたまたPythonに変換しなきゃならんのか...頭禿げそう
0178nobodyさん2011/02/25(金) 16:33:34.12ID:???
ハゲは甘え
0179nobodyさん2011/02/25(金) 16:46:01.81ID:???
>>176
そんなの、予算がなければNoだろ。
GAEは最初はもなにも、かなり依存するつもりじゃないとつかえねぇよ。
使ったら最後、追加予算無ければAmazon EC2への移行も出来ない。
0180nobodyさん2011/02/25(金) 17:35:37.03ID:???
鯖台すら出せない奴にアプリ作るなよ・・・
0181nobodyさん2011/02/26(土) 16:25:16.00ID:???
変更頻度の少ない変数をConfigure::writeで書くなよ。
それ定数にしろよwwwって場合が多いよ
0182nobodyさん2011/02/26(土) 17:15:32.84ID:QnS5kZ07
Lithium試したことないんだけど、
Cakeと比べてどうよ?
0183nobodyさん2011/02/26(土) 17:45:41.68ID:???
複数DBのトランザクションどうしてる?
model の__cunstruct で ClassRegistry に登録されてるから
その情報を元に関数で一気にbeginとcommitをしてるんだけど、、いいのかな?
0184nobodyさん2011/02/26(土) 22:12:17.89ID:???
最初にbeginしてあとでcommitするという、普通のやり方で良いだろ
0185nobodyさん2011/02/26(土) 22:57:00.84ID:???
CakePHPのO/Rマッピングって全然オブジェクトにマッピングしてねーじゃん。
嘘ついてんなよw
0186nobodyさん2011/02/27(日) 00:25:16.65ID:???
確かにモデルはエンティティオブジェクトじゃないな
0187nobodyさん2011/02/27(日) 14:26:52.35ID:???
HABTMを使う場合って、どんなケースがある?具体的な例を教えてください!
0188nobodyさん2011/02/27(日) 15:12:11.70ID:n/cFKC+5
>>187
タグとか
0189nobodyさん2011/02/27(日) 15:47:05.19ID:???
>>188
どことどこを、どういうふうに繋ぐの?
0190nobodyさん2011/02/27(日) 15:55:26.24ID:???
使うケースを無理して探して使わなくても良いと思うが。

ユーザーが投稿した何かにつけるタグとか、
ユーザーがグループに所属するとか、
そういうのだろ。
0191nobodyさん2011/02/27(日) 16:01:26.01ID:???
>>190
ユーザーがグループに所属するは
分かりやすい

ユーザーテーブルから
中間テーブルをまたいで
向こうの所属しているグループのレコードを絞り込んでグループ名一覧とかを表示するとき

とかに使うってこと?
0192nobodyさん2011/02/27(日) 17:31:22.17ID:???
>>191
実は単に1ユーザーが所属できるのが1グループだったら、HABTMじゃなくても良い。
1ユーザーが複数のグループに所属できるようにする場合、HABTMになる。
絞込みをしたいからHABTMというのはちょっと変で、hasManyだって絞込みする。
HABTMはhasAndBelongsToManyと書くとおり、多対多の関係を作るためにある。
確か、第4正規形だったかな?
0193nobodyさん2011/02/27(日) 17:35:40.03ID:???
>>192
例えば下記の3つのテーブルがあったとして

users
user_groups
groups

usersのコントローラで特定のユーザーが
所属している全てのグループを表示する

時とかにHABTMは使うんじゃないの?
0194nobodyさん2011/02/27(日) 17:46:10.12ID:???
>>193
その構成を扱うなら基本HABTMだろ。
多対多だからな。
まぁ細かい事を言えば、そのテーブル構成でも複雑な事をしようとすると、
HABTMじゃ力不足な場面はあるが。
0195nobodyさん2011/02/27(日) 18:26:20.02ID:???
>>194
複雑なことって例えば?
0196nobodyさん2011/02/27(日) 18:28:28.88ID:???
一緒にサイトを立ち上げたい!協力して一緒に作り上げようと言って

インターフェースやデザインの部分だけにしか携わらないパートナーがいる。
(コーディング関係一切しない)

そのパートナーとの取り分は
何対何くらいが妥当?

こっちはアルゴリズムから詳細設計まで全て受け持ってるんだが
0197nobodyさん2011/02/27(日) 18:29:56.01ID:???
5:5だろ。デザイン舐めすぎ。
0198nobodyさん2011/02/27(日) 18:31:26.94ID:???
だってデザインのほうが気楽じゃん
連動するところとか論理的思考とか
必要ないしw
0199nobodyさん2011/02/27(日) 19:29:47.30ID:???
>>195
さっきのテーブル構成で行くと、user_groupsテーブルにはこの3つのカラムしか、
実質作る事ができない。

id,
user_id
group_id

createdとかmodifiedを作っても、関係テーブルに限り
日時は書き込まれないし、書き込んだとしても消える事になる。
例えば、ユーザーAが既にaとb2つのグループに所属しているとして
3つ目のcに所属するための処理をすると、
一旦ユーザーAの関係テーブル上からユーザーAがaとbに所属というデータを削除し、
改めてユーザーAがaとbとcに所属というデータを書き込む。
という動きをする。
なので複雑な事は例えば、関係テーブルに何か他のデータを合わせて置く。などだな
0200nobodyさん2011/02/27(日) 19:32:45.15ID:???
なんだか難しいんだなw
0201nobodyさん2011/02/27(日) 19:35:45.60ID:???
>>196
設計からプログラミング、デザインとhtmlコーディングを全部やることがあるけど、
気楽さでいえば、俺はデザインよりプログラミングの方が楽だな。
もちろん工数見積はプログラミング>デザインだけど。
ただ、その時のデザインは、無難に整って見れればおkってやつだけどね。

何つくろうってのかしらんけど、
web系って基本はDBに書いて取って調節して出力だし、
あんまアルゴリズムとかいらなくないか?
そんなむずかしい事をするわけでも無い気がする。

やることが全然違うし、単純に比較できるものじゃないと思うけどね。
0202nobodyさん2011/02/27(日) 20:15:04.52ID:???
>>198
「綺麗なデザインは?」「使いやすいデザインは?」「格好いいデザインは?」

これらに答えを出せますか?

しかし、「会員登録する機能を作る」「メールを送信する機能を作る」
これらに答えは出せますよね。

果たしてどちらが”気軽”なんでしょうかね。
0203nobodyさん2011/02/27(日) 20:17:11.08ID:???
196「顔より中身が重要です!(キリッ」
0204nobodyさん2011/02/27(日) 21:02:31.40ID:???
>>202
お前バカだな

コーディング部分を担当だと
最終的に機能条件を100%満たせる。

けれどデザインったら、世界レベルから
html最近覚えましたレベルでも一応完成させることが出来る。

君は後者のヘナチョコデザイナーにも
100%機能要求を満たせたプログラマーと同じ対価を与える訳?
0205nobodyさん2011/02/27(日) 21:48:04.01ID:???
errorというコントローラーを作ったらアクセスできないんだけど、
使えないの?
0206nobodyさん2011/02/27(日) 22:07:01.59ID:???
>>204
自分でもわかってるじゃん。デザインに答えがないって。
答えがないもの・判断が付かない物に対して比較するのがそもそもの間違い。

で、君みたいな凄腕プログラマーは当然パートナーにも
凄いデザイナーがいるわけだよね?ヘナチョコとなんてやらないよね。
だったら、凄いデザイナーさんの方がもっと貰うべきだよね。
0207nobodyさん2011/02/27(日) 22:08:56.45ID:???
>>206
料理の素材を育てる人と

料理を作る人

どちらが難しいかくらいかは君にも分かるよね?w
0208nobodyさん2011/02/27(日) 22:09:46.67ID:???
あ、そうそう君の質問に答えてなかったね。

>君は後者のヘナチョコデザイナーにも
>100%機能要求を満たせたプログラマーと同じ対価を与える訳?

僕はヘナチョコデザイナーを雇わないからね。
僕より出来るデザイナーに僕より多くの金額を与えるよね。当然だろ?
0209nobodyさん2011/02/27(日) 22:11:05.21ID:???
>>207
良い素材でも美味しくないと誰も食べてくれないし、
いくら料理の腕があっても素材が悪いと美味しくないよね。

それぐらい僕も分かってるけど、君も当然分かるよね?w
0210nobodyさん2011/02/27(日) 22:12:49.31ID:???
>>209
君は分かった気分になってるだけだよねw
0211nobodyさん2011/02/27(日) 22:13:14.33ID:???
>>210
その言葉をそっくりお返しするよw
0212nobodyさん2011/02/27(日) 22:14:26.90ID:???
>>211
君のほうこそw
0213nobodyさん2011/02/27(日) 23:53:36.80ID:???
>>199
ん?俺はそこでいうuser_groupsにいろいろ情報持たせてるよ。
消すか消さないかは書き込む時に指定できるし。
0214nobodyさん2011/02/27(日) 23:57:16.61ID:???
デザインvsプログラムの構図になってる時点でダメだろ。
どっちがどっちにも踏み込めない物しか出来上がってこない。まさに日本のIT物作りw
0215nobodyさん2011/02/28(月) 00:13:32.34ID:???
ただこっちが渡されてイラッとくるHTMLとかデザインとかCSSとか
埋め込み型の変なJavaScript(当然全部グローバル空間)とかは多いなw
その辺イケてるデザイナ・コーダに知り合いが少ないのが自分の問題だが
中途半端にそっちの方も審美眼というか基準を持ってしまうと、ストレス溜まる
0216nobodyさん2011/02/28(月) 00:38:48.14ID:???
俺らはPG寄りだろ?で、デザインが出来ないわけだ。
自分が出来ない事を他人が出来て、それに対する対価が半分。

これって普通の考えだと思うけど、どうして196はファビョってるの?
■ このスレッドは過去ログ倉庫に格納されています