トップページ⇒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/
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にヒントがあった
0582nobodyさん2012/01/23(月) 19:13:13.51ID:g71C+axW
他のフレームワークが持ってて、Yiiが持ってない機能ってなにかある?
0583nobodyさん2012/01/24(火) 06:12:58.16ID:???
日本語訳してくれた人に感謝を申し上げたい
0584nobodyさん2012/01/24(火) 15:29:19.24ID:7osuj7Qx
俺もすごい感謝してる
これくらいは英語で十分だなって思ってただけど、やっぱり読むスピードが全然違うな
0585nobodyさん2012/01/25(水) 01:04:42.19ID:PRfu+W52
Yiiが早いのかAPCが早いのか分からんが、まじでrender早いな
WEBサーバーの処理800msのうち10ms〜20msくらいでrender出来ちゃう
0586nobodyさん2012/01/25(水) 13:51:38.28ID:???
DAOしか使わない。
ARとかどこで使うんだあれ。
0587nobodyさん2012/01/25(水) 13:53:45.77ID:???
URLからindex.php消すために.htaccessを設置しているんですが、
ローカルではうまくいくのに、さくらインターネットにアップロードすると
トップページは表示されるものの、コントローラなどがInternal Sever Errorになってしまいます。

ローカルの設置場所:
DOCUMENT_ROOT/example.com/

さくらインターネットの設置場所:
DOCUMENT_ROOT/example.com/
(/home/USERNAME/www/example.com/)

上記の「example.com」がアプリケーションのディレクトリ(protectedなどがあるもの)です。
htaccessの内容は、

RewriteEngine on
RewriteBase /example.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

こうなっています。
ドキュメントルートからの構成は同じで、
ローカルではちゃんと表示されているんですが・・・
0588nobodyさん2012/01/25(水) 19:11:55.85ID:???
>>587さんと全く同じことではまったことがあります
その時はもうindex.phpありでいいやで妥協しましたが
これ何が原因なんでしょうかね。Apacheのバージョン?
0589nobodyさん2012/01/25(水) 19:25:30.26ID:YwP4y9rd
>>587
Yii全く関係ないじゃん
0590nobodyさん2012/01/25(水) 19:49:43.53ID:???
ちょっとでも調べてれば、Apacheのバージョンとか、トンチンカンな考えはしないはず。
0591nobodyさん2012/01/25(水) 20:02:54.58ID:???
共用サーバだと変更する必要があるってばっちゃが言ってた。
0592nobodyさん2012/01/25(水) 20:35:04.64ID:???
AllowOverride だな
スペル怪しいけどw
05935872012/01/25(水) 21:59:53.64ID:???
ちなみにエラーログが出ていました。
[Wed Jan 25 21:32:44 2012] [error] [client 66.249.69.201] mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary
ループしているみたいですかね・・・?
ただCakePHPのときもさくらインターネットでは同じエラーが出ていました
http://blog.syuhari.jp/archives/2056
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=76&forum=2
↑これと同じだと思います。
このときは RewriteBase をいじって解決したので
今回もいろいろいじっているのですが、全然だめです

>>588さん以外にもレンタルサーバーで利用している方いそうですけど、
どうやって解決しているんでしょうかね・・・
05945872012/01/25(水) 22:01:16.56ID:???
>>592
AllowOverrideは大丈夫でした
単純なリダイレクトの記述をして動いているのを確認しました
0595nobodyさん2012/01/25(水) 22:25:49.17ID:???
だいぶ前にxreaでためしにやってたけど、普通にできてたよ
ちゃんとレス内容までは見てないけど、単に設定ミスでしょ
Yiiと関係ないからスレチだけど
0596nobodyさん2012/01/25(水) 22:30:53.35ID:???
単にhtaccessが使えない環境なだけなんじゃないの?
0597nobodyさん2012/01/25(水) 23:58:53.63ID:???
>>593
さくらのスレかApacheのスレ行けよ。
なんでここだ、アホか。
05985872012/01/26(木) 00:53:49.69ID:???
他のフレームワークはhtaccessでRewriteしてURLの変換がうまくいっているんですが、
そのサーバと同じとこに乗せてエラー出てるの
でYiiが原因か、Yiiに詳しい人ならわかるかなぁと思って・・・すいません
0599nobodyさん2012/01/26(木) 01:05:58.94ID:???
>>598
Internal Sever Errorがどういうときに出るのかを調べたほうが良いかも
スペルミスしてない?
とりあえずYiiが原因では無いと思うよ
0600nobodyさん2012/01/26(木) 07:48:27.99ID:???
リダイレクトループになってるって書いてるじゃん。
何得意げになって書いてんの?www
0601nobodyさん2012/01/26(木) 11:30:37.83ID:???
何得意げになって書いてんの?www
06025872012/01/26(木) 11:33:01.61ID:???
>>599
>>587を見てもらえればわかるようにスペルミスではないはずです。
とりあえずさくらインターネットのスレに行ってみます。
あっちでもスレ違いだって言われそうだけど・・・
ありがとうございました
0603nobodyさん2012/01/26(木) 12:43:52.75ID:???
スレ伸びてるとおもったら、またお前ら喧嘩か・・・。
さくらスタンダードなら>>587の.htaccessの設定でエラーは出ないはず。
>>587のYiiの設定が原因くさいと思うぜ。
>>587が悪いのは、素のYiiをインストールしてデフォルトのloginあたりのurlでも
internal server errorが出るかどうか
(http://something.sakura.ne.jp/example.com/site/login)
を確かめもしないで、自分が「作った」アプリであれこれパニクってる点。
0604nobodyさん2012/01/26(木) 12:45:17.60ID:???
あ、あと、Yiiのバージョンも書いてない点だな。
Yiiスレでエラー切り分けを問いたいなら、そういうところをちゃんと書くべし。
06055872012/01/26(木) 13:27:32.58ID:???
>>603
助言のとおり
http://example.sakura.ne.jp/exmple.com/site/login
で見ると正しく表示されました。
原因はドメインでアクセスするときにあるようです。
http://example.com/site/login
このURLでアクセスするとInternal Server Errorになるので。
ドメインでアクセスするときに、htaccessがどう動くかもっと調べてみます。

Yiiが原因ではなさそうなので、退散します!
スレ汚し失礼しました!
0606nobodyさん2012/01/26(木) 14:46:59.49ID:???
別ドメインを建てていて
/home/ユーザ名/www/example.com
が別ドメインのdocルートだっていう情報を提供せずにいたのが痛いわけだが、
それはともかく、
http://example.com/site/loginでのそのInternal Server Errorは、単純に
.htaccessの
Rewritebaseが
/example.com
になっているからに過ぎないと思うね。
Rewritebaseは/(URLパスルート)じゃなきゃいけないでしょ。そういう場合は。
まあスレ汚しにスレ違いのレスをするのもなんだけどさ。
06075872012/01/26(木) 14:57:46.28ID:???
>>606
イケタアアアアアアアアアア
ンギモヂイィッィ
0608nobodyさん2012/01/26(木) 14:59:25.18ID:???
いきなり豹変すんなやwワロタ
0609nobodyさん2012/01/26(木) 15:56:04.19ID:???
user-moduleを利用する際等、moduleに手を加える際に
皆さんは直接ファイルを編集していますか?

それとも別moduleを作成してuser-moduleをオーバーライド
してますか?
0610nobodyさん2012/01/26(木) 16:06:14.49ID:???
user-moduleってなに?。意味が不正確でとれないよ。
06116092012/01/26(木) 16:08:47.08ID:???
>>610
言葉足りなくてすみません
yii-userというuser管理moduleのことでした
http://www.yiiframework.com/extension/yii-user/
0612nobodyさん2012/01/26(木) 16:10:57.85ID:???
当然、extends。
出来合のクラスを直接書き換えるというのは愚。
0613nobodyさん2012/01/26(木) 17:09:42.61ID:???
>>611
このextentionって便利なの?
前導入したけど良さがわからなかったな
0614nobodyさん2012/01/26(木) 17:34:05.28ID:???
自分はyii-userをお手本にして、新しくuserモジュールを作りました
多分yii-userをカスタマイズしていくとわかりますが、けっこう大変ですよ
06156092012/01/26(木) 18:02:36.06ID:???
>>612
やっぱそうなんですか
経験があまり無いので色々試してみようかと思います

別moduleを作成してyii-userをextends

>>613
ユーザの管理画面がすぐ完成するのが便利かと
プロフィール編集とか
0616nobodyさん2012/01/26(木) 18:14:32.07ID:G7JApHSt
>>582
http://symfony.com/doc/2.0/book/http_cache.html
symfony詳しくないけど、ここら辺の機能はないな
■ このスレッドは過去ログ倉庫に格納されています