トップページphp
981コメント269KB

【PHP】Yii Framework

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/12/10(金) 00:41:11ID:???
PHP5 用 Framework Yii (イー) Framework スレ

公式
http://www.yiiframework.com/

チュートリアル
ttp://www.yiiframework.com/doc/guide/

公式フォーラム
ttp://www.yiiframework.com/forum/index.php?/forum/21-japanese/
0482nobodyさん2012/01/08(日) 19:26:27.57ID:???
>>480
>>456-458見てあげろよ可哀想だろ
0483nobodyさん2012/01/08(日) 20:16:26.33ID:???
>>456-458
九州地方は46までで、47のみその他に修正して、完全に動作しました。ありがとうございます


0484nobodyさん2012/01/08(日) 20:42:11.41ID:???
nice tips !
0485nobodyさん2012/01/09(月) 00:01:41.81ID:???
あらかじめgroupカラムも作っておくと無駄なコード書かなくてもいいですよね?
モデルのgetPrefOptions()でreturn CHtml::listData(Pref::model()->findAll(), 'id', 'name', 'group');して
ビューで<?php echo CHtml::activeDropDownList($model, 'pref_id', $model->prefOptions); ?>みたいな
モデルのrules()はrequiredとarray('pref_id', 'in', 'range'=>range(1, 47)),でOKかな?
0486nobodyさん2012/01/09(月) 13:41:34.32ID:???
今までずっと都道府県テーブルつくってたけど、
よく考えたら必要じゃないよな。
これに限らず、データがほぼ固定のものってプログラムの中で持てばいいんじゃ、、、?
わざわざDBで持つと、処理が重くなるだけだし
0487nobodyさん2012/01/09(月) 14:49:29.31ID:???
この記事参考になりますよ。一番したの発言者の情報。その通りだと思いました。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1404&forum=3
0488nobodyさん2012/01/09(月) 14:50:35.66ID:???
日本ユーザー会ってあったのね。知らなかった。。
0489nobodyさん2012/01/09(月) 14:56:09.49ID:???
マニュアル翻訳してくれてる人たちかな?
まじ助かってるわ
あの成果物がなければ俺がYiiを使うこともなかった
0490nobodyさん2012/01/09(月) 14:57:48.85ID:???
>>487
海外や世界のYiiユーザーの考えを知りたいんだけど、
どういう英語で検索したらいいんだろ
0491nobodyさん2012/01/09(月) 15:14:59.76ID:???
>>490
yii, state, city, area
0492nobodyさん2012/01/09(月) 15:51:19.81ID:???
>>491
やる気出せ
0493nobodyさん2012/01/09(月) 16:22:04.10ID:???
>>492
これ以上英語の能力がありません
0494nobodyさん2012/01/09(月) 19:16:12.89ID:???
>>487
そのレベルで最適化が必要になるならすでにPHPの適用範囲じゃないと思う。
0495nobodyさん2012/01/09(月) 19:59:48.34ID:???
>>494
どういう意味だ?
Webアプリのボトルネックは大抵DBへのアクセスだから、
そのアクセスを減らす意味でかなり有用だと思うjけど
0496nobodyさん2012/01/09(月) 21:51:40.82ID:???
>>495
そんなことしてPHPに定数持たせるくらいなら、JAVA辺りで組んだサービスで
起動時にデータベースから読んだ値をオンメモリで格納しておく方が
理にかなってるってこと。
0497nobodyさん2012/01/09(月) 21:59:39.65ID:???
>>496
違う違う
スケールアウトの問題だよ
RDBMSはスケールアウトしにくいだろ
JAVAとPHPの比較するような事柄じゃない
0498nobodyさん2012/01/09(月) 22:00:08.28ID:???
>>497
何も違わない。
書いてある意味わからんなら無理するな。
0499nobodyさん2012/01/09(月) 22:03:31.07ID:???
返答はや

え、トンチンカンなこと言ってるのかな
逆にJAVAを引き合いに出した先の話がオンメモリに格納とか、JAVA関係ねえじゃんって感じたんだが
知識あると自負しておられるようなので、出来ればご高説承りたいですね
0500nobodyさん2012/01/09(月) 22:10:38.39ID:???
>>499
だからJAVA辺りでって書いてあるじゃん。
PHPでやるならmemcachedなんかを使うほうが理にかなってる。
データベースにあるべきと設計した項目をパフォーマンスを理由にコードに
埋め込むなんてのは最悪の下策。
0501nobodyさん2012/01/09(月) 22:22:19.11ID:???
うーん、最悪の下策とか言うけど、システムの開発、運用なんて千差万別なのに、ケースバイケースとしか言いようがないと思うんだが
そもそも>>494は設計思想の話全然出てないじゃん
レコード読み出しでデータベースの性能問題が出るなら、他の言語使えって言ってるようにしか見えないよねえ
でも他の言語持ち出す意味もよく分からないし、偉そうなこと言った割には主張に一貫性がないように見えるけど大丈夫ですか?

0502nobodyさん2012/01/09(月) 22:25:55.01ID:???
>>501
好きにしたら?
どーでもいいよ。
0503nobodyさん2012/01/09(月) 22:32:58.81ID:???
意見に対して論拠のある反論がなかったり、スルーされて会話拒否されたことは、きっと俺の皮肉的な言い方と無知が原因だったのだろう
反省です
0504nobodyさん2012/01/09(月) 22:38:27.79ID:???
>>503
そう、全部お前の無知が悪い。
何も矛盾してないし、レスの内容も首尾一貫してる。
0505nobodyさん2012/01/09(月) 23:06:36.79ID:???
Javaでやれって書くとPHPerが脊髄反応するの分かってるんだから、最初からmemcachedって書けばいいのに。(´・_・`)
0506nobodyさん2012/01/09(月) 23:17:53.09ID:???
外野の意見だけど、間違ってるとは思わないが、言葉足らずでわかりにくいぞ?
>>500を読んでやっとわかったわ。
正直感じ悪いな。
0507nobodyさん2012/01/09(月) 23:34:47.97ID:???
データベースに入れるべき項目かどうかを論じてたんでないの?
既に決定?
0508nobodyさん2012/01/09(月) 23:59:23.03ID:???
話伸ばしてしまいますが性別って型どうしてます?
0509nobodyさん2012/01/10(火) 00:06:02.68ID:???
>>508
Yiiと関係ないじゃん
0510nobodyさん2012/01/10(火) 00:18:02.04ID:???
small int
3値あれば十分でしょ。
0511nobodyさん2012/01/10(火) 00:30:52.59ID:???
509さんすみません。ただtinyint(1)にして
afterFindで0は'男性'、1は'女性'とかに置き換えるってのは無駄なのなんなのか、よくわからなくなって・・
0512nobodyさん2012/01/10(火) 01:30:05.92ID:???
答えは既に出てる内容だけど、Yiiと関係ない話題はもっと適したスレがあるのでそちらでどうぞ
0513nobodyさん2012/01/10(火) 10:54:41.66ID:???
>>481をわかる方おられますか?
0514nobodyさん2012/01/10(火) 15:52:48.64ID:???
mysqlのインメモリモード(heap table)を
memcachedの代わりに使うケースって少ないね。
0515nobodyさん2012/01/10(火) 16:08:23.68ID:???
上はrenderPartialの結果を返り値として文字列で受け取れる
下はrenderPartialの出力が画面表示になる
0516nobodyさん2012/01/10(火) 16:34:35.09ID:???
>>515
試してみてなんとなくわかりました。ありがとうございます。
ただ、どういった用途で使うかが見えてきません。

例えば、結果を返り値として文字列で受け取る場合などは
メールのテンプレートなどに利用できそうですが・・
出力が画面表示になる場合は、普通に$this->renderPartial('dummy');とする場合との違いがわかりません
0517nobodyさん2012/01/10(火) 17:02:51.12ID:???
自由に使うため
変換したり、ファイルに保存したり
0518nobodyさん2012/01/10(火) 21:51:45.37ID:???
具体的にコードで例を示せますか?
$this->render('dummy', null, false, ture);のやつ
0519nobodyさん2012/01/10(火) 21:52:10.57ID:???
すみません。$this->renderPartial('dummy', null, false, true);のやつ
0520nobodyさん2012/01/10(火) 21:54:26.20ID:???
$hoge=$this->render('dummy', null, false, ture);
print_r($hoge);

ということじゃねーの?
0521nobodyさん2012/01/10(火) 23:32:07.77ID:???
レンダリング結果を戻り値として受け取っめどうすんの?ってこと?
0522nobodyさん2012/01/10(火) 23:34:37.35ID:???
>>516
APIリファレンスを見ると、4つめをtrueにするとprocessOutputで後処理されるって書いてる。
で、processOutputを見ると、scriptタグを挿入したり、hiddenフィールドに値を埋め込んだりするみたい。
だから、たぶんrenderPartial単体を画面表示したいときに使うんじゃないかな。
0523nobodyさん2012/01/11(水) 14:12:56.17ID:???
それrenderPartial呼ぶだけでいいからな

結果受け取ってどうすんのって事例は、CControllerのrenderの中身見ればいい
main.phpにcontent引数として渡して描画してるだろ
0524nobodyさん2012/01/11(水) 15:24:04.56ID:???
確かにCController::render()の中身を見れば
どんな具合で処理が流れていっているのかわかりますね
いやぁしかしYiiのAPIはすばらしく見やすい
0525nobodyさん2012/01/12(木) 08:42:21.68ID:???
PHP 5.3.9でました
0526nobodyさん2012/01/12(木) 13:00:12.98ID:???
ヒーコワイ
0527nobodyさん2012/01/12(木) 13:40:47.87ID:???
>>525
他でやってくれ
0528nobodyさん2012/01/12(木) 15:00:38.30ID:???
>>527
潔癖すぎワロスwww
0529nobodyさん2012/01/12(木) 15:48:04.55ID:???
別にいいだろそれぐらい
0530nobodyさん2012/01/12(木) 16:45:04.41ID:???
MVCってユニットテストために
ユニットテストを難しくする汚染要素を隔離するためにあるのでは?

具体的に言うとこんな感じ。
View(GUI, xml, html, json)
Controller(Session, Request, Form, 画面遷移などWeb独自のデータ)
Model(RDB, KVS)

MとCが分離されることでMはWebスコープから分離され、CはSQLから分離される。
でもこの理屈だとVとCの関係がおかしくなっちゃうね。
CがVにデータを渡すときはリクエストスコープを経由しないで
直に関数の引数で整数や文字列、オブジェクトを渡すべきって話になるから。
0531nobodyさん2012/01/12(木) 16:49:01.92ID:???
>>530
いきなり何言ってんですかあんた
0532nobodyさん2012/01/12(木) 16:57:08.24ID:???
>>528
MySQL 5.6でました

>>529
MySQL 5.6でました
0533nobodyさん2012/01/12(木) 17:04:39.65ID:???
>>532
半年以上前だが?
0534nobodyさん2012/01/12(木) 17:14:16.93ID:???
>>532
陰険
0535530 2012/01/12(木) 17:15:53.28ID:???
>>531
ごめん、誤爆した。
こっちでMVC云々にレスしたつもりだった

PHPでOOP
http://kohada.2ch.net/test/read.cgi/php/1172205352/
0536nobodyさん2012/01/12(木) 18:37:20.23ID:???
フォームビルダの利点がわからない
0537nobodyさん2012/01/12(木) 20:22:41.51ID:???
あんなの利点なんて無いだろ
0538nobodyさん2012/01/13(金) 00:04:12.96ID:???
フォームのlegend吐き出す機能ってActiveナントカにないんだな
0539nobodyさん2012/01/13(金) 00:19:04.76ID:???
なにそれ、便利機能かな
RoRとか?
0540nobodyさん2012/01/13(金) 19:59:17.41ID:???
あるコントローラのアクションを
accessRulesやfilterのみ適応して
PHPファイル名そのままで表示させたいです。

action関数を書かないで済む簡単な方法が
あれば教えて頂けませんか?

Yiiの認証を使ったファイル置き場が作りたい感じです。
0541nobodyさん2012/01/13(金) 20:27:30.80ID:???
一つのアクションを作って、一つのGETパラメータで処理を振り分けるのじゃ駄目かい?
0542nobodyさん2012/01/14(土) 00:05:26.00ID:???
これで作ったchiveってやついいな。
日本語化コミットしようぜ
0543nobodyさん2012/01/14(土) 10:02:07.26ID:???
また本家サイトがダウンしているでござるの巻
0544nobodyさん2012/01/14(土) 10:25:45.65ID:???
>>540
urlManagerルーターのaliasでも手間?
'something/<alias>'=>'something/rawdraw'
Class SomethingController ....
{
public function actionRawdraw($alias) {
echo $alias;
}
}

http://foo.org/something/bar.php
0545nobodyさん2012/01/14(土) 12:51:27.52ID:???
>>540
おそらくコンソールアプリにしたいって事なんじゃないかな?
0546nobodyさん2012/01/14(土) 13:29:40.66ID:???
>>540
頭の悪い俺には、何がしたいのかよく分からない。
05475402012/01/14(土) 13:45:28.31ID:???
>>541,544
GETで表示ファイルを振り分けてみたいと思います。
ありがとうございます。
05485402012/01/14(土) 13:47:58.63ID:???
>>546
Yiiの認証システムを経由して
Yiiと関係のない普通のPHPソースを実行したかったのです。
0549nobodyさん2012/01/14(土) 21:04:16.08ID:???
Post::model->methodName();
ってどういう仕組なの?
スタティックじゃないメソッドをスタティックで呼べるって強すぎない?
0550nobodyさん2012/01/14(土) 21:57:37.93ID:???
call_use_func使ってるだけやん。全然珍しくもない。
0551nobodyさん2012/01/14(土) 21:59:13.89ID:???
おっとタイポ
call_user_func
0552nobodyさん2012/01/14(土) 22:57:03.24ID:???
スタティックじゃない関数なのに、newしなくても使えるもんなんだ
0553nobodyさん2012/01/14(土) 23:07:12.19ID:???
そんな時 $this って何の参照になるんだ?
0554nobodyさん2012/01/14(土) 23:32:36.39ID:???
modelメソッドの中でnewしてるよ。
0555nobodyさん2012/01/14(土) 23:51:33.45ID:???
ガベージコレクションが成せる技だな
0556nobodyさん2012/01/15(日) 23:03:55.87ID:???
Yiiはソース見ないとダメよ。
見ると勉強になるし、アプリの作り方がわかる。
0557nobodyさん2012/01/16(月) 09:17:46.97ID:???
>>549
この書き方だとmodelメソッドじゃなくて定数じゃん。
うごかねぇよこんな書き方
0558nobodyさん2012/01/16(月) 14:23:18.23ID:???
>>557
typoだろw
0559nobodyさん2012/01/16(月) 19:07:06.31ID:???
>>549
これただのファクトリーパターンじゃん。
一体何が強いの?ねぇ
0560nobodyさん2012/01/16(月) 19:39:01.84ID:???
もういいからお前。帰れよ。
0561nobodyさん2012/01/16(月) 19:41:57.11ID:???
間抜けな質問しちゃったからって恥ずかしがって興奮するなよ
0562nobodyさん2012/01/16(月) 22:29:25.13ID:???
なんだこいつはw
0563nobodyさん2012/01/17(火) 14:35:07.52ID:???
なんでみんなこう攻撃的になるかなぁ…
勉強になってよかったね、で済む話じゃん
0564nobodyさん2012/01/17(火) 14:57:56.05ID:???
>>563
専門板はキチガイ多いからな
四六時中イライラしてるやつばっか
0565nobodyさん2012/01/17(火) 17:42:50.26ID:???
可哀想な>>549
これじゃあ過疎るわw
0566nobodyさん2012/01/17(火) 18:16:13.97ID:???
過疎ってたから皆どっかに行っちゃった結果じゃないかね
まったり行きましょう
0567nobodyさん2012/01/17(火) 18:19:37.28ID:???
556までは普通の流れなのになあ
0568nobodyさん2012/01/17(火) 20:22:32.21ID:???
>>563
ほんとそう思う。
こんなとこで粋がっても何もならないのにな・・・
0569nobodyさん2012/01/17(火) 20:24:19.40ID:???
もういいじゃないか。
正直俺は>>549の答えは解らなかったよ。
プログラムって謎だらけだ。
0570nobodyさん2012/01/17(火) 20:51:23.14ID:???
↑この人はまるでガソリンのようだ
0571nobodyさん2012/01/17(火) 21:41:54.74ID:???
>>567
だな戦犯は>>557ということでこの件は終わりにしよう
0572nobodyさん2012/01/19(木) 00:28:06.83ID:???
MANY_MANYで取得した複数のレコードを
checkBoxListで表示(該当部分をチェック)させるのってどうやってやるんだ・・・3日間かかったが挫折した
0573nobodyさん2012/01/19(木) 00:50:32.42ID:???
HAS_MANYだとできて、MANY_MANYだとできないってこと?
0574nobodyさん2012/01/19(木) 01:10:41.70ID:???
>>573
いやHAS_MANYも試してないけど、多分できない気がする
オブジェクト→checkBoxListに渡す配列への変換を自動でしてくれないんだな
フレームワークなのにこういう重要な部分を手動でしてくれないのかな?
0575nobodyさん2012/01/19(木) 01:14:25.50ID:???
>>574
http://www.yiiframework.com/doc/guide/1.1/ja/form.table
これは答えになる?
0576nobodyさん2012/01/19(木) 05:18:57.24ID:???
そういうことしたいと思ったことないからわからんなぁ。
取得したレコードを元にチェックボックス用の配列を返すメソッドを用意したほうがはやそう。
0577nobodyさん2012/01/19(木) 19:00:57.37ID:???
やりたいことがよく分からんけど、
>>575のやり方+こうやればいいだけじゃないの
$data = array();
foreach($models as $model) {
$data[$model->id] = ''label";
}

>checkBoxListで表示(該当部分をチェック)させるのって
あと、gridviewとか使って各モデルの情報を一行で表してるなら、checkBoxListは妥当ではないと思うな
その場合、1行ずつチェックボックス付ければいいだけじゃね
'CHtml::activeCheckBox($data, "check")',

まあ、やりたいことが分からないよね
0578nobodyさん2012/01/21(土) 16:42:05.68ID:???
管理ページってどういう構造にするのが良いんだろう
 ・管理用Controllerを作って、そこにアクション押しこむ
 ・そもそも別にフォルダ作って、ユーザ用と管理用のprotectedを別々に管理する
他にもいろいろ方法あるかな

俺はとりあえず前者で作ってるんだけど、
バグで脆弱性作っちゃったり、セキュリティを考えると後者のほうが良い感じだけど、
同じ処理を持たなきゃいけなかったり無駄が多そうだよね
05795722012/01/22(日) 00:44:52.66ID:???
>>575-577
ありがとうございます。
やりたいことは、
投稿にMANY_MANYでタグが関連付けられているといったときのケースです。

Post、PostTag、Tag
というモデルがあり、
PostのフォームにcheckBoxListで
あらかじめあるタグリストがチェックボックスでずらーっと並んでいるとき、
投稿のフォームでチェックした複数のタグをPostTagに投稿ID+タグIDを保存する

保存するときは、PostモデルのafterSaveでチェックボックスの配列をforeachして
手動で保存していたのですが、
既存の投稿を編集(アップデート)するときに、関連付けられたタグを
投稿したときと同じようにデフォルトでcheckedを入れたかった

ただ、いろいろ調べたりアドバイスを見るかぎり、
アップデートのときも手動でforeachしてcheckedするしかないようですね。

ありがとうございました!
0580nobodyさん2012/01/22(日) 18:12:42.38ID:i1iVcXOA
http://www.yiiframework.com/forum/index.php?/topic/20320-working-with-a-checkbox-list/page__p__99443__hl__checkbox+multiple#entry99443
用途は違うけど、これがたぶん君が言っている自動化に近いと思う

// postアクションメソッド.
$model = new Post;
if(isset($_POST['Post'])){
 try {
  $transaction = Yii::app()->db->beginTransaction();
  $model->attributes=$_POST['Post'];
  foreach($_POST['Post']['tags'] as $tag) {
   $postTag = new PostTag();
   $postTag->id_post = $model->id;
   $postTag->id_tag = $tag;
  $postTag->save();
  }
  $model->save();
  $transaction->commit();
 } catch(Exception $e) {
  $transaction->rollBack();
 }
}

// view
echo CHtml::activeCheckBoxList($model, 'tags', CHtml::listData(
Tag::model()->findAll(), 'id', 'name'
));
※インデントは全角スペース、エラー処理はなし、実行してない

こんな感じ?
と、ここまで書いて、下のエクステンション見つけた
http://www.yiiframework.com/extension/esaverelatedbehavior/
俺もいろいろ勉強になった、ありがとう
0581nobodyさん2012/01/23(月) 03:55:32.99ID:???
>>580
おつ
MANY_MANYの保存は2つ目のURLのエクステンションでいけるね
アップデートのときにcheckBoxListをcheckedさせるには1つ目のURLにヒントがあった
■ このスレッドは過去ログ倉庫に格納されています