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

【PHP】Yii Framework

レス数が950を超えています。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/
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が分けられるメリットとか?
0913nobodyさん2012/05/08(火) 16:04:33.53ID:???
プロフィールの性別フィールドを
<?php
class Gender
{
  public static $data = array(
    //array('id'=>0,'name'=>'指定無し'),
    array('id'=>1,'name'=>'男性'),
    array('id'=>2,'name'=>'女性'),
  );
}
のようにモデルで定義してるんだけど、必要ないかな?
Gender::$dataでradioButtonListとかでも利用できるし便利だと個人的に思ってるけど
0914nobodyさん2012/05/10(木) 14:44:48.26ID:???
今までCake使ってて、新しい案件をYiiで作るか迷ってる
乗り換えてオススメなことってある?
09159142012/05/10(木) 14:45:21.73ID:???
ちなみに英語力には問題ない
0916nobodyさん2012/05/10(木) 16:12:46.44ID:???
好きなfwで作れよ
英語力問題ないなら自分で触って確かめた方が早い
0917nobodyさん2012/05/10(木) 16:26:48.49ID:???
ちょっと触ったぐらいではわからないようなことを経験者から聞きたい
0918nobodyさん2012/05/10(木) 21:13:32.86ID:???
(・∀・)イイ!
0919nobodyさん2012/05/10(木) 22:24:01.18ID:???
すべてにおいて上
0920nobodyさん2012/05/11(金) 17:17:26.53ID:???
ユーザーの名前とか、
ユーザーテーブルに紐付いたプロフィールテーブルに保存されている
ユーザーのプロフィール写真とか
どこでも使用されそうなデータって毎回DBにアクセスするのは億劫ですけどどうやってます?

今は
Yii::app()->user->user_name
Yii::app()->user->profile_image
のように保存してますが、
これから引き廻したいデータが増えてもここに保存していったらいいですかね?
0921nobodyさん2012/05/11(金) 20:31:24.19ID:???
普通にPHP使うなら、どのみちアクセスする度に呼び出しになるのでは?
0922nobodyさん2012/05/12(土) 03:21:06.83ID:???
たとえば
トップページで
ようこそ◯◯さん!
って表示したいとき、
Yii::app()->user->user_name
に保存してればDBのアクセス無しですけど、
上記のように保存していないならトップページ表示する毎にDBにアクセスすることになりますよね?
0923nobodyさん2012/05/12(土) 03:44:01.82ID:???
キャッシュ使え
0924nobodyさん2012/05/12(土) 10:25:54.94ID:???
クレジットカード使え
0925nobodyさん2012/05/12(土) 11:01:03.42ID:???
>>922
そこに気づくとは…やはり天才か。
0926nobodyさん2012/05/13(日) 20:35:47.46ID:???
アクションのURLにアンダーバー使いたいんだけど、どうしたらいい?

class PostController extends CController {
 actionCamelCase(){}
}

だと
/post/CamelCase
になる
/post/camel_case
こうしたい

actionCamel_Case(){} //これじゃ無理
0927nobodyさん2012/05/13(日) 20:46:25.34ID:???
>>926だけど忘れてくれ勘違いだった
0928nobodyさん2012/05/14(月) 19:52:05.55ID:???
$abc=123
最初こういうスペース開けないコーディングにすげえ違和感感じでどうしようかと思ったけど
最近見慣れてきたわ
0929nobodyさん2012/05/14(月) 20:37:37.30ID:???
自分も慣れてきちゃったな・・
逆にスペースがあるほうがキモいレベル
0930nobodyさん2012/05/15(火) 14:38:30.64ID:???
yii式の書式を修正するのに、書式成形ツールで良いのある?
0931nobodyさん2012/05/21(月) 20:44:09.25ID:???
日本でYiiを業務で使ってる事例を教えろ
0932nobodyさん2012/05/21(月) 21:49:46.69ID:???
俺の会社
0933nobodyさん2012/05/22(火) 11:18:40.53ID:???
使えばイイじゃない
プロダクションで使えないならバックヤード側で使ってみるとか
0934nobodyさん2012/06/01(金) 22:36:34.22ID:???
モデルはデータアクセスとデータそのものの2種類が意味があると思いますが、
Yiiのモデルはこれらを1つのクラスで実装しますよね。
モデル自体が1つのデータを表してるのに、自身のクラスでfindAll()のように
複数件返す仕組みに違和感が…

DAOのように、データ自体とデータアクセスクラスが分かれてる方がしっくり
来るんですが、どちらが良いとかあるのでしょうか。
またYiiでもDAOクラスが用意されてますが、このクラスを使うときはモデル内で
DAOのコードを書くべきなんですよね?
0935nobodyさん2012/06/02(土) 12:39:59.43ID:???
>>934
俺も自身のクラスにfindAllのリストを返すようなメソッドを書くのは違和感を覚えたから、
別のサービスクラスのようなものをつくった。
基本的にmodelの中ではSQLもfindも使わないようにしたほうがしっくりきたよ。
0936nobodyさん2012/06/03(日) 01:51:53.10ID:yQvIqueC
掲示板をつくっているんですが、
連続投稿かどうかをチェックするロジックを記述する場所で悩んでいます。
過去10分の投稿で、投稿されようとしているPostのIPと同一IPのPostを取得して、
1つでも見つかればNG、nullならOKというものです。

記述する場所として、

コントローラ
・$model->validate()や$model->save()の前
モデル
・rules()に独自のバリデーション関数を定義する(?)
・onBeforeSave()
・onBeforeValidate()

などなどがあると思いますが(他にあれば教えてください)、
どこに記述するのがベストでしょうか?
0937nobodyさん2012/06/03(日) 02:03:27.88ID:yQvIqueC
>>936
間違えました
>・onBeforeSave()
>・onBeforeValidate()
・beforeSave()
・beforeValidate()
上記が正しいです
0938nobodyさん2012/06/04(月) 17:52:20.51ID:???
モデルにtrue/falseを返す連続投稿をチェックするメソッドを作って
コントローラでそれを呼び出して条件分岐するか
あとはビューで条件分岐して、falseの場合のみフォームを表示させるとか

0939nobodyさん2012/06/08(金) 04:03:52.70ID:???
recirectの第二引数は、その後のmethodを実行するか否かとマニュアルに書いてあるが、
falseにしてもtrueにしても、その後の処理は実行されない。

$this->redirect('http://example.com', false);
$this->hoge();

hoge()が実行されない。何か勘違いしてますか?
0940nobodyさん2012/06/08(金) 09:24:17.60ID:???
別のサイトに移動したらそりゃメソッドは実行されないよ
0941nobodyさん2012/06/08(金) 12:58:36.07ID:???
>>940
重複した種類のheaderを纏めるかどうかという引数のようですね。
勘違いしていました。
0942nobodyさん2012/06/10(日) 10:01:06.80ID:???
$model1->save()
$model2->save()
上記が2つ成功して初めてsave()したいのですが、どうしたらいいでしょうか?
0943nobodyさん2012/06/10(日) 11:27:02.85ID:???
トランザクション
0944nobodyさん2012/06/10(日) 15:31:20.57ID:???
>>943
DBの機能ってことでしょうか?
Yiiだけで実現できます?
0945nobodyさん2012/06/10(日) 22:29:41.16ID:???
>>944
フレームワークを使う前に、DBを含めたWEBプログラミングの基礎的な勉強をしたほうがよい。
0946nobodyさん2012/06/11(月) 09:25:07.29ID:???
>>942
model1のidを保存してmodel2が失敗したらmodel1をdeleteするw
0947nobodyさん2012/06/13(水) 15:18:45.45ID:???
あーYiiマジでYii!
めっちゃ気持ちよく開発できる
CakePHPで作ったシステムもさっさとYiiにしたいけど結構規模大きいので面倒だ
0948nobodyさん2012/06/13(水) 18:24:24.37ID:???
>>942
これ参考にすると良いと思います
http://www.yiiframework.com/doc/guide/1.1/ja/database.ar#sec-11
0949nobodyさん2012/06/16(土) 19:41:32.57ID:???
Imageエクステンション使ったら、
モデルのImageとかぶってエラー起きた
モデルの名前変更するしか無いかな?
0950nobodyさん2012/06/21(木) 18:03:32.21ID:???
yes it is
0951nobodyさん2012/06/21(木) 21:01:36.62ID:???
configから名前変えられたような
0952nobodyさん2012/06/27(水) 20:16:53.38ID:???
yiiのwebサイトのfunctionマニュアルって
配布されてないの?

ダウンロードできるマニュアルってあれに比べると
使い勝手落ちる

多分あれはYiiで作成されているんだと思うが。
0953nobodyさん2012/06/30(土) 01:06:46.89ID:???
CakePHPでいうapp_controllerやapp_modelみたいな
全コントローラ・クラスに継承させられるクラスってある?

自分でわざわざMyCControllerつくって
手動でそれを継承させないと無理かな?
0954nobodyさん2012/07/02(月) 14:07:50.65ID:???
やっと最近CakePHP2の初心者レベルをパスしたレベルなんだが、Yiiっていいのか
今からまた勉強するのもおっくうだがこれを見ると迷う
http://www.google.co.jp/trends/?q=cakephp,+yii,symfony&ctab=0&geo=all&date=all&sort=0
トレンドの伸び率が半端ないわぁ
0955nobodyさん2012/07/02(月) 23:06:15.50ID:???
>>953
protected/componentsにController.phpってありません?
それがapp_controller.phpみたいな役割をしてくれます
モデルはないので、自分で作る感じだと思います
0956nobodyさん2012/07/20(金) 11:38:10.96ID:???
コントローラ名、モデル名って名詞にしてる?
英語に不慣れなもんで、無意識に名詞と動詞混同させてしまうんだよね
どちらかに統一しようと思ったけど、どうしようか迷ってる
モデルは名詞でコントローラは動詞?
0957nobodyさん2012/07/20(金) 19:32:29.20ID:???
クラスとかは全部名詞、それそのものが何かを行うわけではないから
動詞なのはメソッドだぬ
0958nobodyさん2012/07/20(金) 19:34:08.42ID:???
というか既に答えでてるわなw
コントローラーはコントロールをするものであり名詞
レス数が950を超えています。1000を超えると書き込みができなくなります。