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

【PHP】Yii Framework

レス数が900を超えています。1000を超えると表示できなくなるよ。
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/
0813nobodyさん2012/03/13(火) 16:51:05.10ID:???
>>812
普通の日本人は、英語ってだけで見ようともしないよ。
英語力がどのくらいないのかは分からないけど、まああまりないと思うよ。
別に日本国内で英語いらないし。
0814nobodyさん2012/03/13(火) 18:49:20.87ID:???
requirements見ると色々必要っぽいですが、
さくらのレンタルサーバーでも使えますか?

さくらで使えたら即移行するんですが・・・
0815nobodyさん2012/03/13(火) 18:56:09.19ID:OgH0Qw3S
>>121-124
APC使えない説があるぞ
0816nobodyさん2012/03/14(水) 11:18:23.67ID:???
>>814
さくらの1500円のレン鯖で使ったが普通に動いた。
apc利かないから大規模なやつは無理っぽい
08178142012/03/14(水) 13:54:04.14ID:???
おおっ!
最初は共用で、
規模が大きくなってきたらVPSやらに移ってAPC使えばおkですね。

てか、Yii楽しすw
0818nobodyさん2012/03/14(水) 20:25:32.84ID:zqK1VJfD
apc使えなくてもCFileCacheとか使えば
何も使わないよりはいいと思うよ
0819nobodyさん2012/03/14(水) 21:04:22.40ID:832chJcq
え、Yiiの実行がAPCで早くなるのはコードキャッシュの話だろ?
0820nobodyさん2012/03/15(木) 07:02:06.97ID:E3IxfR1a
群馬県高崎市に住む41歳AB型、製造業界で派遣プログラマーの仕事をしているhekenekoこと、黒飛健と申します。
新日本テクトスという会社を追われ、その後どうしてよいかわからなくなりました。
だけど私の大好きな尾崎豊の歌に励まされ、夢であるプロのクリエイターを目指すことにしました。
何度も挫けそうになりましたが、尾崎豊の歌を聞きながら自分を励ましています。
今も尾崎豊の歌のおかげで、夢を諦めずにCGアニメの製作を続けられています。
とりあえず、以下の動画を見てください。一生懸命作ったもので、自分では既にプロレベルの傑作だと思ってます。
できればみなさんのご意見、ご感想を聞きたいです。
新しいラダニアムの翼(new wing of radaniam part T) .mp4
http://www.youtube.com/watch?v=PRPJ69rVgbE

題名”ラダニアムの翼その1(A wing of radaniam_partT).mp4”
http://www.youtube.com/watch?v=WTde4RdA5LU
私の世界観の全てを凝縮した力作です。hekenekoワールドをご堪能あれ。
0821nobodyさん2012/03/15(木) 12:59:31.83ID:???
Yiiって、oauth2のモジュールなくね?皆どうしてんの?
0822nobodyさん2012/03/15(木) 19:23:03.36ID:???
デフォルトではHAS_MANYやMANY_MANYを一度にsaveしてくれる機能はないの?

調べたんだけど、いまいち分からなかった;
サンプルコードも、バリデーションやトランザクションを考慮してなかったり・・・
0823nobodyさん2012/03/15(木) 20:37:46.80ID:???
自分でoauthモジュール作った
0824nobodyさん2012/03/15(木) 20:49:50.87ID:A3CMDLk6
extension使うしかないんじゃないかなあ
0825nobodyさん2012/03/15(木) 21:48:06.21ID:???
>>822
HAS_MANYで親でsaveしたら子もsaveされるような機能は今のところない。

バリデーションやトランザクションについては、オフィシャルガイドに丁寧にかいてある。
0826nobodyさん2012/03/15(木) 22:00:11.15ID:A3CMDLk6
>>580とかどうであろうか?
0827nobodyさん2012/03/15(木) 22:04:43.66ID:???
複数データの同時insertもARでは出来ないね。
ちょこっとならループ回したほうがシンプルなのかもしれないけど。
0828nobodyさん2012/03/16(金) 04:56:40.83ID:???
ここらへんはわざと実装しないで、
緩くしてあるんだろうか・・・
0829nobodyさん2012/03/16(金) 07:06:54.44ID:???
意外に痒い所に手が届かないよね。Yii。
0830nobodyさん2012/03/16(金) 14:32:14.60ID:6mu8dRw7
extensionがあるべ
0831nobodyさん2012/03/16(金) 14:50:26.02ID:???
relationSaveはあるけどsaveAllは見つからんな
0832nobodyさん2012/03/16(金) 22:25:22.90ID:???
>>829
そう?cakeのほうがいいとこある?
0833nobodyさん2012/03/16(金) 22:55:17.05ID:6mu8dRw7
RoRとの比較のほうが興味ある
0834nobodyさん2012/03/17(土) 14:56:22.63ID:???
少人数で作るならCIとかFuelのほうが確実に開発が楽。
0835nobodyさん2012/03/17(土) 14:57:04.46ID:???
Silexでいいわ。
0836nobodyさん2012/03/18(日) 03:19:48.10ID:???
うん。開発が楽と思ったものでそれぞれやれば良い。
0837nobodyさん2012/03/18(日) 11:22:39.37ID:???
そうだね
0838nobodyさん2012/03/19(月) 14:11:56.77ID:???
おれはCIはしんどかったなー
自分で書く部分が多かった
0839nobodyさん2012/03/20(火) 14:59:22.46ID:???
ページングで、

?Post_page=2
みたいなのを
?page=2
にする方法ってないですかね?
08408392012/03/20(火) 15:19:31.75ID:???
pageVarで設定出来ました;
スレ汚しスミマセン・・・
0841nobodyさん2012/03/20(火) 15:25:19.25ID:???
>>840
きにすんな
0842nobodyさん2012/03/21(水) 05:42:19.48ID:???
ログインの仕組みが複雑というか、分かりづらいな
authenticateとloginが分かれてて
UserIdentityとかもあって
何が何かパッと理解できん。。。
0843nobodyさん2012/03/21(水) 06:18:13.36ID:???
>>842
最初はとっつきにくいけど、
わかると、自由に実装できてイイ!よ。

てか、yii-userのソース見てたんだが、
saltもなしにただハッシュしてるだけじゃん・・・
0844nobodyさん2012/03/21(水) 14:23:37.03ID:???
そうそう、ハッシュひどいよね
絶対自前実装が必要
ここで実装方法を共有してもいいかもね
0845nobodyさん2012/03/21(水) 15:19:01.53ID:???
http://www.yiiframework.com/doc/guide/1.1/ja/topics.auth

デフォルトでは CWebUser はユーザの個人情報を保存するのに、
持続的ストレージとしてセッションを使います。
クッキーベースのログインが有効(CWebUser: :allowAutoLoginがtrue)になっていると、
ユーザの個人情報がクッキーにも保存される可能性があります。
パスワードのような取り扱いに注意を要する個人情報を保存しないよう気をつけてください。

これの意味がよくわからないんだけど・・・
なんでこんな仕様になってるの?
0846nobodyさん2012/03/21(水) 20:31:26.55ID:???
ほんとだ。なんでsaltの設定無いんだろ?
0847nobodyさん2012/03/21(水) 20:56:37.85ID:???
>>845
クッキーやセッションにユーザーの個人情報を保存しないって当たり前のことだろ?
0848nobodyさん2012/03/22(木) 01:55:04.42ID:???
フォームからユーザ名・パスワードを入力させてログインさせる方法は
最初からあるLoginForm.phpでできるけど、
他コントローラからユーザ名とパスワードを渡してログインさせる方法はどうやったらいいのか分かる人いる?
0849nobodyさん2012/03/22(木) 23:05:16.16ID:???
http://d.hatena.ne.jp/te2u/20110822/p1
これってそもそもフォームで入力しないものをrequireしてる時点で間違っているよね?
0850nobodyさん2012/03/22(木) 23:55:16.50ID:???
>>848
LoginFormはモデルだからどのコントローラからでも使えるよ

$model=new LoginForm;
$model->username = 'user';
$model->password = 'password';
if($model->validate())
$model->login();

ログイン処理したいコントローラで、こんな感じにモデルに情報を設定して、ログインできまっせ
答えになってるかな
0851nobodyさん2012/03/22(木) 23:57:58.30ID:???
>>849
いいえ、beforeSave()で設定する前提というのも別に問題ないと思うよ
0852nobodyさん2012/03/23(金) 03:33:31.73ID:???
>>850
なるほど。
でもこの使い方、LoginFormって名前でいいのかこれw
0853nobodyさん2012/03/24(土) 09:23:14.59ID:???
>>850じゃないけど
$model->username = 'user';
$model->password = 'password';
の部分はあくまで例でしょ。
0854nobodyさん2012/03/24(土) 10:04:41.96ID:???
>>853
いや、「フォーム」からは受け取ってないなぁと思って
0855nobodyさん2012/03/24(土) 11:07:54.88ID:???
だから
$model->username = $_POST['LoginForm']['username'];
$model->password = $_POST['LoginForm']['password'];
こういうことでしょ? パスワードの部分はソルト付きのハッシュとかだろうけど
0856nobodyさん2012/03/24(土) 14:13:43.60ID:???
?
0857nobodyさん2012/03/24(土) 15:42:17.94ID:???
まずはガイド読もうか・・・
0858nobodyさん2012/03/24(土) 23:35:11.64ID:???
>>851
いや、モデルのrules()にフォーム入力しないものを入れちゃいかんだろ
自動生成でこうなったのか知らないけど、外せばいいだけ
afterConstruct()とか馬鹿げている。しかもtimestampビヘイビア使ってるのに$this->create_time = time();とか意味不明
0859nobodyさん2012/03/25(日) 00:01:41.63ID:K3R81r0d
>>858
>いや、モデルのrules()にフォーム入力しないものを入れちゃいかんだろ
何か不都合でも?

CTimestampBehavior使ってるならcreate_timeの設定はいらないね
それもそのブログに書いてあるようだが
0860nobodyさん2012/03/25(日) 00:11:13.28ID:K3R81r0d
ごめん、ナナメ読みで間違えたこと言ってしまった
behaviorの実行がvalidate前に走らないからrulesで弾かれるってことか

この例だとrulesを外すのが正解なんだろうか
なんかエラー処理的にあんまりやりたくないね(behaviorの実装を信じすぎ)
どっちかって言うと、俺だったらrulesは残して、afterConstructでもbeforeValidateでも一旦初期化すると思う
rulesはフォーム入力したデータを検証するかどうかじゃなくて、DBのルールと合わせておくほうが個人的に自然だと思うな
0861nobodyさん2012/03/25(日) 00:35:49.84ID:???
駄目だ、俺頭おかしい

>なんかエラー処理的にあんまりやりたくないね(behaviorの実装を信じすぎ)
これいみわかんないよね、CTimestampBehaviorはどっちにしろvalidateの後に値を設定するんだから

CTimestampBehaviorのソース見るとbeforeSaveで値設定してるからなんだな
俺だったらCTimestampBehaviorは使わないわ
0862nobodyさん2012/03/25(日) 00:58:06.73ID:???
>>860
>rulesはフォーム入力したデータを検証するかどうかじゃなくて、DBのルールと合わせておくほうが個人的に自然だと思うな
いや、公式のガイドでrulesにフォームから送られてくるデータ以外は入れるなって書いてあったと思うけど
個人的な意見尊重するならフレームワーク使わないほうがいいと思うけど
もしくはCIみたいなさらに緩いの使うとか。CI使ったことないからわからんけど
0863nobodyさん2012/03/25(日) 01:21:50.65ID:???
>>862
そうだったんだ
CTimestampBehaviorの実装もそういう設計思想から来てるからおかしいものではないということか

>個人的な意見尊重するならフレームワーク使わないほうがいいと思うけど
これはどういう意味?フレームワークってYiiのことだよね
使わないと最早開発できない…
0864nobodyさん2012/03/25(日) 01:29:03.78ID:???
>>863
フレームワークって
そのフレームワークの思想や慣習にのっとって開発することによって、
スピードや保守性をアップするってのが利点だと思う
0865nobodyさん2012/03/25(日) 02:06:18.82ID:???
>>864
Yiiの思想や慣習を否定するつもりはないよ
ユーザ入力されたパラメータ以外はrulesに追加しないっていう記述があることすら知らなかった(見逃してた)

>DBのルールと合わせておくほうが個人的に自然だと思うな
それを知らないで、こんな考えを持ってたのは適切ではないというのは、その通りだと思う
でもなんでユーザ入力以外のパラメータはvalidateしちゃ駄目なんだろう
DBはエラーを返さないけど、設定を抑止したい値とかって普通にあると思うんだけど
0866nobodyさん2012/03/25(日) 05:24:10.51ID:???
恥の上塗りでレスするのやめようぜ。生産的な話しにはならない。
0867nobodyさん2012/03/25(日) 16:51:47.95ID:???
>>865
>でもなんでユーザ入力以外のパラメータはvalidateしちゃ駄目なんだろう
>DBはエラーを返さないけど、設定を抑止したい値とかって普通にあると思うんだけど


俺もこれ気になる
0868nobodyさん2012/03/25(日) 21:59:21.09ID:???
ユーザー入力以外のパラメータをバリデートしなきゃいけない場面がわからない
設計がおかしいんじゃないかな
0869nobodyさん2012/03/25(日) 22:11:36.38ID:???
レコード登録する時に、そのレコードのステータスに特定の値を設定するシーケンスとかない?
設計の問題なのかな
0870nobodyさん2012/03/25(日) 22:23:40.32ID:???
beforeSave()でやるべきだと思うけどどうなんだろ
0871nobodyさん2012/03/25(日) 22:28:10.72ID:???
つまりテストでカバーという考えかな
なんかそれでいいような気がしてきた
きっとYiiさんもそういう事を言ってるんだよね
0872nobodyさん2012/03/26(月) 08:35:27.77ID:???
>DBはエラーを返さないけど、設定を抑止したい値とかって普通にある

無いよね普通。
0873nobodyさん2012/03/26(月) 11:32:56.54ID:???
いや、それはあるだろ
状態とか
>>872は何を想像してるんだ?
0874nobodyさん2012/03/26(月) 11:40:21.47ID:???
>>873
無いのよそれが。あるわけがない。

つうか、状態とかって具体的にどういうもの?
0875nobodyさん2012/03/26(月) 12:00:29.81ID:???
ユーザー入力以外の値を事前に制御出来ない理由がわからぬ。
0876nobodyさん2012/03/26(月) 13:35:57.93ID:???
ブログで例えた場合記事を表現するPostモデルに記事の公開状態を表すstateカラムがあるとして、
その値がdraft,publishedのように定義されているとする。

draft状態のPostをpublishedにするシーケンスがあったとして、
ここではstateをpublishedに初期化することになるから、stateがユーザ入力以外のパラメータとなる

publishedに設定するためには条件を満たす必要がある場合、rulesに以下を追加する
array('state','validateState'),
validateStateではpublishedに設定されてる場合に遷移条件の判定を行う

俺はこんな書き方せずにステートマシン使ってるけど。
非ユーザー入力でvalidateしたいパラメータを示したまでということで。
0877nobodyさん2012/03/26(月) 20:54:44.62ID:???
ぐだぐだ言わずして、改善コード書けよ。
しつこい
0878nobodyさん2012/03/26(月) 23:42:36.82ID:???
>いや、それはあるだろ
>状態とか

>無いのよそれが。あるわけがない。
>つうか、状態とかって具体的にどういうもの?

>>876

>ぐだぐだ言わずして、改善コード書けよ。
>しつこい
0879nobodyさん2012/03/27(火) 00:21:26.38ID:???
>>876は「改善コード」とは言わんだろ。こう言う風に俺はYiiを(仕様と違って)使ってるって自己主張してるだけで。
なお、俺は>>874でも>>877でもない。
0880nobodyさん2012/03/27(火) 00:33:01.98ID:???
ワロタ
0881nobodyさん2012/03/27(火) 00:36:55.69ID:???
>>879
つまり>>879>>874でも>>877でも無くて>>873だってこと?
じゃあ>>874>>877は同一人物なの?それとも>>873と一緒で別人なの?
0882nobodyさん2012/03/27(火) 00:48:34.18ID:???
ID出ないスレってこうなるから嫌だ
IDが常に出るピザスレなんて超平和だぞ
0883nobodyさん2012/03/27(火) 01:27:08.19ID:???
問題はIDじゃなくて同でもいいことにムキになる子たちだというオチがついたところで、おしまい
0884nobodyさん2012/03/27(火) 01:58:53.15ID:60lORSlO
じゃあID出せよ
0885nobodyさん2012/03/27(火) 05:07:35.41ID:???
http://www.yiiframework.com/doc/guide/1.1/ja/topics.auth
ムズすぎwwwwwwwwwwwww
0886nobodyさん2012/03/27(火) 08:26:04.44ID:???
>>876
> 俺はこんな書き方せずに

ほら、やっぱ無いじゃん。そういうことだよ。
0887nobodyさん2012/03/27(火) 17:39:36.91ID:???
yii-user moduleのissue見てたら
前にここで話してたhash saltが実装されてるみたいね
0888nobodyさん2012/03/28(水) 14:15:15.24ID:???
ここのyiiユーザーがムカツクから俺がフレームワークを作って潰してやるよ
0889nobodyさん2012/03/29(木) 13:22:42.75ID:???
開発宣言出ました!

名前はZiiとかですか?
0890nobodyさん2012/03/30(金) 00:29:48.19ID:???
オナニーフレームワークってことかなるほど
0891nobodyさん2012/04/01(日) 10:32:24.28ID:???
自慰だけにってか。やるじゃん
0892nobodyさん2012/04/04(水) 12:37:01.66ID:???
じゃん
0893nobodyさん2012/04/09(月) 06:27:33.53ID:???
単にtestビューを表示させたいだけときって、
public function actionTest()
{
  $this->render('test');
}
ってわざわざrenderさせないとだめ?
0894nobodyさん2012/04/09(月) 12:01:00.15ID:???
main.phpを表示させたくないって意味なら、renderPartial()があるよ
0895nobodyさん2012/04/09(月) 12:55:15.33ID:???
Cakeからの移行組かな?
Cakeは勝手にレンダリングされるからね。
0896nobodyさん2012/04/09(月) 15:33:20.04ID:???
そういうことか
filter書くしかなかろうな
0897nobodyさん2012/04/09(月) 17:52:13.68ID:???
http://www.yiiframework.com/download/

The earliest possible 2.0 alpha release may be in March 2012, but we cannot guarantee it.

2.0の開発は難航してるのかな?
早く名前空間使いたい・・・
0898nobodyさん2012/04/12(木) 02:58:11.05ID:???
別に1.x系でも名前空間は使えるでしょ
0899nobodyさん2012/04/22(日) 07:16:48.12ID:???
<?php CHtml::encode($model->name); ?>
毎回データを出力するときは(入力の際にサニタイズしていない場合は)↑のようにして
出力するデータ毎にCHtml::encode()をしないといけないのかな?
CHtml::encode($model)
みたいなことして全部HTMLの特殊文字をエンコードできる方法ない?
0900nobodyさん2012/05/01(火) 23:02:27.37ID:???
レイアウトをヘッダ部分・ボディ部分・フッタ部分に分けたいんだけど

renderPartial($header);
renderPartial($body);
renderPartial($footer);

とか書くしかないかな?
個人的にはmain.phpみたく1つのテンプレートに部分部分を割り当てたいのだけれど
毎回こんな記述する人も居ないだろうし纏めてしまいたい
0901nobodyさん2012/05/01(火) 23:13:48.28ID:???
ちょっと書き方悪かった
renderの呼び出し先のviewで例えばtemplete.phpを呼んで

templete.phpの内容が、

renderPartial($header);
renderPartial($body);
renderPartial($footer);

であったとすると、複数コントローラのviewで同じこと書くのは面倒なので
このテンプレを共有したいって意味です
0902nobodyさん2012/05/02(水) 07:05:10.42ID:7m1s++/P
renderPartial(array($header,$body,$footer));
0903nobodyさん2012/05/02(水) 15:32:18.12ID:???
>>899
これたのむよ
0904nobodyさん2012/05/02(水) 20:23:04.92ID:???
自分でCHtml拡張して$modelのattributeを全部encodeする関数でもつくったらええがな
0905nobodyさん2012/05/02(水) 21:46:12.06ID:???
>>902
thx
0906nobodyさん2012/05/03(木) 17:35:36.08ID:???
giiで生成されるコントローラにloadModelアクションがついてくるけど、
あらゆるコントローラで同じloadModelがあると気持ち悪いのでどっかにまとめたいんだけど、どうしたらいい?
loadModelだけじゃなくて共通のactionをどっかにまとめて共有したい

Actions code reuse with CAction
http://www.yiiframework.com/wiki/170/actions-code-reuse-with-caction/

こういう記事があったけど、Webでアクセスするアクションの話みたいで、
単に各コントローラでの共通関数の話ではなさそう
($this->loadModel($id)みたいに別関数からアクセスしたい)
0907nobodyさん2012/05/03(木) 18:48:57.55ID:???
>>906
共通controller.phpにloadmodelを書いて
それぞれのcontrolelrから利用すれば良いんじゃないかな?
0908nobodyさん2012/05/03(木) 23:06:16.44ID:???
>>906
これ参考にするといい
http://www.yiiframework.com/extension/crudactions/
0909nobodyさん2012/05/05(土) 17:58:57.55ID:???
>>907
共通controller.phpってなんでしょ??

>>908
それだと$this->でアクセスできないような・・・
0910nobodyさん2012/05/06(日) 00:28:26.16ID:???
CController拡張したControllerを一個作ってそこに共通のfunction書くとかじゃだめなのか
0911nobodyさん2012/05/07(月) 22:04:44.22ID:???
assets/[あれこれ]/css/jsパス
あれこれになんの意味があんの?
0912nobodyさん2012/05/07(月) 22:25:24.39ID:???
>>911
複数module等を利用した際にインストール先のPathが分けられるメリットとか?
レス数が900を超えています。1000を超えると表示できなくなるよ。