1read 100read
2013年17WebProg15: 【PHP】Yii Framework Part 2 (110) TOP カテ一覧 スレ一覧 2ch元 削除依頼
XML (338)
新しい掲示板の仕様を考える (428)
赤ちゃん拾いました@WebProg板 (183)
【勉強するのは】PHPとPerl【どっちが最初?】 (393)
Webでオブジェクト指向プログラミング (434)
WebLogic に詳しい人いません。 (623)

【PHP】Yii Framework Part 2


1 :2012/08/13 〜 最終レス :2013/09/26
前スレDat落ちでまさかの2スレ目。流行れ!

公式
ttp://www.yiiframework.com/
チュートリアル
ttp://www.yiiframework.com/doc/guide/
公式フォーラム
ttp://www.yiiframework.com/forum/index.php?/forum/21-japanese/

2 :
・Yiiとはなんですか?
イーと発音します。"Yes It Is!"の略で「速い?安全?使える?」と言った質問にそのように答えるらしいです。
つまり口からはいと垂れる前にイーと答えろ!わかったな!
・必要条件は?
PHP5.1以上。ちょっと古い鯖でもいけるね!DBはMysqlでもSqliteでも。APC推奨。
・Yiiは何に向いてるの?
軽量で洗練されたキャッシュ機構を持ってるらしいから高負荷のアプリ、例えばポータル・フォーレム・CMS・EC等に向いてるらしいよ。
・他のフレームワークに比べてどうなの?
機能が豊富。ドキュメントが充実してる。設計がイケてる。
Symfonyより楽。Cakeより軽い。CodeIgniterより高機能。バランス派。

3 :
ブログチュートリアル
ttp://www.yiiframework.com/doc/blog/1.1/ja
パフォーマンス比較
ttp://d.hatena.ne.jp/cakephper/20110802/1312275110
ブログ記事
ttp://www12.atpages.jp/~nekomike/blog/2011/12/03/%E5%88%9D%E3%81%AEphp%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFyii%E3%81%A7%E8%A1%8C%E3%81%93%E3%81%86%EF%BC%811%E6%97%A5%E7%9B%AE/
ttp://d.hatena.ne.jp/tjtjtjofthedead/archive?word=*%5Byii%5D
ttp://d.hatena.ne.jp/tanakahisateru/20120105/1325759589
ttp://d.hatena.ne.jp/cake67/searchdiary?word=Yii
ttp://livejamdb.blogspot.jp/search/label/Yii%20Framework

4 :
Yii2について
http://www.slideshare.net/samdark/alexander-makarov-yii2-whats-new
・PHP5.3.8以上
・ネームスペース
・PSR-0準拠
そのうち出る

5 :
このフレームワークは書籍でてる?

6 :
ttp://www.yiiframework.com/news/?tag=books
日本語の書籍は無い。
そのかわり公式の日本語ドキュメントはしっかししてる

7 :
パート2になって更に人気出ると良いね
良さが伝われば絶対に流行ると思う

8 :
後発なだけあって完成度が高い

9 :
テーマ集めたサイトがあったので
ttp://yiithemes.mehesz.net/themelist
こういうの見ると本当に海外にはユーザ結構いるんだなと思う

10 :
すげーな。
日本じゃ考えられん。

11 :
public function behaviors(){
   return array(
     'CAdvancedArBehavior' => array(
       'class' => 'application.extensions.CAdvancedArBehavior'
     ),
     'CTimestampBehavior' => array(
      'class' => 'zii.behaviors.CTimestampBehavior',
       'updateAttribute' => 'updated',
       'createAttribute' => 'created',
     )
   );
}
これでsave()すると、createdはちゃんと時間入れてくれるのに、
updatedは入れてくれない
フィールド名は合ってる

12 :
自己解決
新規保存のときはupdatedに入れてくれないのね
DB側で DEFAULT 0 とかするしかないか

13 :
1乙。でもフォーレムって何だw
Yii2って互換性はどーなるの?

14 :
なんかモデルを更新したりコントローラを更新したりしても
挙動がおかしい気がするんだけどキャッシュって自動でされたりしないよね?

15 :
>>11
'setUpdateOnCreate' => true,
↑追加したらアップデート時もいれてくれる。

16 :
>>14
コントローラは知らんがモデルは設定によってはスキーマをキャッシュする。schemaCachingDurationとか設定されてない?

17 :
>>13
AR周りが大きく変わるしCFormModelもなくなるって言うから完全な互換は無理じゃないかなあ

18 :
1.1.12来てるね
前スレ
【PHP】Yii Framework
http://kohada.2ch.net/test/read.cgi/php/1291909271/

19 :
ほとんどバグ修正だな
てかその前の更新でDHTMLXとの統合って書いてあるっぽいけど組み込まれるの?
なんかExt4Yiiみたい

20 :
Yii2っていつでるの?
今開発してるサイト2にしたほうがいいのかな
完成度5割ぐらいだけど

21 :
年内に出るといいな

22 :
年内にベータくらいはでてほしいね。

23 :
日本ユーザグループリニューアルしたよ
http://yiijan.org/

24 :
公式サイトみたいにスッキリさせろよ
なんだよこのXoopsみたいなデザインは

25 :
あやまれ!Xoopsにあやまれ!

26 :
でもこういう日本語のサイトができるのは大きな一歩だよ
今後もCake並に普及したらいいと思う
反面結構使いやすくて効率良いから、
他の人に知られたくないみたいな気持ちも多少あったりする・・・俺だけだと思うけど

27 :
>>23
もうデザイン変更されててわろた
>>24-25でデザイン批判されたからか?w

28 :
やっぱ見た目って大事だよなw

29 :
いくら素晴らしいものでも
公式サイトがWeb黎明期みたいじゃ誰も使いませんよ
HPビルダー臭がしてもCMSそのまんま感がしても一緒

30 :
今のデザインはいいの?

31 :
Yiiはモデルにビジネスロジックを書きますが、例えば
$product = new Product();
$product->price = 100;
$product->getTaxPrice();
public function getTaxPrice()
{
return $this->price * 1.05;
}
みたいな書き方はOKなんでしょうか。
それとも、getTaxPrice($price) と書くべきなんでしょうか。
上の書き方がOKの場合→開発者はどのプロパティに値をセットして良いのか分からない
getTaxPrice($price)の方が良い場合→モデルをsave()する際はプロパティに値をセットしてるのにこのときだけ引数で対応??

32 :
両方に対応させたらいいんじゃね?
public function getTaxPrice($price=null)
{
  return ($price===null) ? $this->price * 1.05 : $price * 1.05;
}

33 :
なんかJAVAっぽい
その辺はもう好みの問題じゃないかなあ。
個人的にはgetTaxPriceからpriceは想像できるからそんな不自然でもないと思う。
税込価格で扱っている方が手間がないからプロパティは$this->basePriceにしてpublic function getPrice()にするとか。
ちなみにYiiはget/setを省略してプロパティとして呼べるので
public function getTaxPrice()なら$product->taxPrice;でいい。

34 :
なるほどー。
getTaxPrice()はシンプルな構成でしたが、ロジックによっては
複数のプロパティをセットしなければならない場合もありますよね。
そのとき、分かりにくいかなと思った次第です。
かといってメソッド引数に渡すのも微妙な感じです。
例えば user、user_profilesに同時にレコードを登録する場合、Userモデルのクラスに
public function save(User $user, UserProfile $profile)
{
 $user->save();
 $profile->save();
}
とは多分書きませんよね。普通は
public function save($profile)
{
 $this->save();
 $profile->save();
}
といった感じでしょうか。
あと両方に対応させるとなると、全てのビジネスロジックメソッドで同様の処理が必要となり、冗長かなぁと思いました。

35 :
public function relations(){
return array('profiles'=>array(self::HAS_MANY, 'user_rofiles', 'user_id'));
}
リレーション作って
public function save()
{
 $this->save();
 $this->profiles->save();
}
じゃないかな。リレーション張れないようなものであれば多分一緒のモデルでSaveするべきじゃない

36 :
お、それは良さそうですね。
参考になりました。ありがとうございます

37 :
save()に引数がないと、テーブルのリレーションを知らない開発者は
どのプロパティに値を追加すれば良いか判断がつかない気がする。
例えばUser、UserProfilesが必須で、条件によってUserActivitiesへのインサートが必要な場合とか。

38 :
複數のモデル絡んだ入力ならFormModelでまとめたらいいとは思う
引数に入れるのは依存するクラスが増えると無制限に引数増えるから個人的には避けたいかなあ

39 :
ユーザーIDを元にユーザーテーブルからユーザー情報ひっぱってくるっていう処理が
あらゆる場所にかかれてしまうんだけど、これはしょうがないのかな
まとめるとしたらどのファイルに記述したらいいんだろう

40 :
$post->attributes=$_POST['Post'];
で、自動的に格納してくれるフィールドって、
DBにフィールドがある場合のみ?
リレーションで、categoriesなんてのがある場合も自動で入れてくれる?
Postモデルに2つのリレーション(どちらもMANY_MANY)を作っていているんだけど、
片方だけ入るのはどうして??

41 :
>>40
自己解決した。
http://www.yiiframework.com/doc/guide/1.1/ja/form.model#sec-4
必須項目でもなんでもなかったので、
バリデーションルールに属性が書かれていなかったので「安全」とされずに
一括代入で代入されていなかったようだ。
いや〜理解すればするほど、よくできてるなぁと思う。

42 :
コントローラで
class HogeController extends Controller
{
  public function actionCreate($name)
  {
    $account=Account::model()->findByAttributes(array('name'=>$name));
/hoge/create/myname1234
みたいにURLから引数を受け取りたい場合って、
わざわざconfig/main.phpのurlManagerで設定しないとダメなの?

43 :
要点を得てないかもしれないが
/hoge/create?name=myname1234&age=17が嫌で
/hoge/create/name/myname/1234/age/17みたいなURLパターンが使いたいなら
'<controller:\w+>/<action:\w+>/*'みたいに末尾を*にするとname/valueのパターンが繰り返される

44 :
>>43
ありがとうございます。
*を追加する方向でいきます。
あと、もう1つ別の質問があるのですが、
return array(
'condition'=>'t.status=:status',
'params'=>array(
':status'=>1,
),
);
scopes()や、Dbcriteriaなどで使う条件のparamsで、
上記のように数値でstatusを渡すと思い通りに帰ってこなく悩んだのですが、
':status'=>'1'
のようにしなくてはいけないのですね。
これは内部的には数値と文字列を別々にしているということだと思いますが、
MySQLの場合、どれが数値でどれが文字列として解釈されるのかというのを説明したページってありますか?
上記の場合はENUMでstatusを設定していました。

45 :
YiiJanとかドキュメントでLinkPagerとかGridViewについての記事を見ても
使おうという気にならない
どこで使えばいいか、どう便利なのか全然わからん

46 :
管理画面がサッと作れて便利ちゃう?

47 :
地域別人気度
インドネシア  100
インド     79
ウクライナ   74
ロシア     60
ベトナム    44
ポーランド   14
中国      13
ブラジル    13
イタリア    10
スペイン    9

48 :
yii framework使って仕事したい

49 :
受託で小さめの案件なら勢いだけで採用してもいいんだけどねえ。
あとは独立しかない…
一応使ってる会社もあるらしいよ
ttps://speakerdeck.com/crifff/yii

50 :
サーバーにあげると極端にセッションの接続時間が短くなるんだけどどういう理由が考えられる?
・phpinfoのsessionの項目はローカルとサーバで同じ
・configの user['allowAutoLogin'] は true
・もちろんローカル、サーバ全く同じプログラム
LoginForm.phpのlogin()処理は
$duration=3600*24*30; // 30 days
Yii::app()->user->login($this->_identity,$duration);
みたいに30日間続くようにしている
ローカルではこのとおり動いていそうなんだけど、
サーバにあげるとすぐに切れる
ini_set()でsession.gc_maxlifetimeが1440に設定されているけど
変えないといけないのかな?
しかし、ローカルで1440秒以上続く理由がわからない・・・

51 :
index.phpでsession.gc_maxlifetimeを設定してもダメだった。。。
なんだ???わけがわからん・・・

52 :
まったく知らずに言うけどドメインかhttpsのどっちかじゃないかな

53 :
>>52
                    ありがとう!!!!!!!!
      ,. < ̄ ̄ ̄ ̄ ̄ > 、
    /               ヽ   _
   〈彡                Y彡三ミ;,
   {\    \|_ \>ー 、  ト三三ニ:}
   人{ >、,___.>、/三 ヾ\ |わ三彡;!
  /./ トミ;,_       Y/  \>ノー〜=- "
  V / /!   ̄ ̄ ゝ  |   /  _
  し/'┴──----─''|  ン}\-ヾ彡
              ヾ、___ノー'''`

54 :
>>53
当たり!? 良かったー。お疲れ様〜

55 :
>>54
当たりというかドメイン関係の発想で
レンタルサーバだったからセッションの保存先変えたらいけました

56 :
CakePHPがあまりにもダメダメだったので
純粋なOOPフレームワークであるYiiに乗り換えました。
宜しくお願い致します。

57 :
Yiiを一言で表すと、「かゆいところに手が届く」って感じだよな

58 :
>>56
次にお前はPHPがあまりにもダメダメだったのでrailsにしましたと言う。

59 :
PHPは言語でRailsはフレームワーク。
しっかりしろよ。

60 :
・データキャッシュ
・フラグメントキャッシュ
・ページキャッシュ
お前らが一番使ってるキャッシュってどれ?
なんかデータキャッシュやらクエリキャッシュを見ても、
もうページキャッシュでいいじゃんって思ってしまうんだが

61 :
>>59
RailはDSLなのでRubyの方言と言って差し支えないレベルなのであながち間違ってないんじゃないでしょうか
>>60
俺はむしろページキャッシュ全然つかわないなあ、一部データキャッシュしてる程度
ブログとか投稿系メインならページキャッシュがいいんだろうけどそういうサイトでもないし

62 :
ページキャッシュは使い所が限られすぎて存在を忘れるレベル
ヘッダにログインしてるかどうかみたいな表示があったらもう使えないからなぁ
フラグメントキャッシュは物珍しさに一回使ってみたけど、なんかお肌に合わなかった。
データ更新したときのためにDependency付けたりするとviewがまたごちゃごちゃしだすんだよな・・。

63 :
>>62
じゃあキャッシュ使ってないの?

64 :
>>63
普通のデータキャッシュはよく使うよ。
findByPkの結果をキャッシュしたりするし、大したサイズが無いマスターテーブルなんかは期限1日で丸ごとキャッシュしてる。

65 :
>>64
都道府県テーブルとかキャッシュしたいんだがどこでどのタイミングでキャッシュ&破棄したらいいのかわからない
Yiiの話か微妙だけど・・・

66 :
なんで都道府県キャッシュ?

67 :
あらゆる場所で多用するので、
そのたびにDBにアクセスしてひっぱってくるのは負荷が高い気がするので
リレーションで他のテーブルと結合したりもするのですが
とにかく使用度が高い

68 :
都道府県なんて10年単位で見ても変化する確率低い物を、
DBから呼び出しでるって時点で設計が間違ってるのでは?
DBで管理するにしても、変更時に静的ファイル生成しちゃったほうが早いだろ。

69 :
いや、最初そうしてたんだけど、
都道府県でリレーション組んでるので結局ActiveRecordに変えた
SNSのようなものを作っていて、
都道府県別のユーザー数を統計クエリで集計できるのでARだとすごい便利
class Prefecture extends CActiveRecord
{
  public function relations()
  {
    return array(
      'users'=>array(self::HAS_MANY, 'User', 'prefecture_id'),
      'userCount' => array(self::STAT, 'User', 'prefecture_id'),
    );
  }
}
↑こういうのはやっぱりテーブルで持たないと不便(無理?)ですよね?

70 :
そのprefecture_id
が指し示す都道府県名を利用するのって、県名を表示する時だけでしょ。
それ以外は数字のみで管理・照合してるんだから、都道府県のテーブルなんていらないんじゃね?

71 :
自分ならモデルにconstするわ

72 :
県名を参照するだけであれば確かにstatic変数や定数をもったモデルを作るのが良いのだけれど、
>>69のような統計クエリや、MANY_MANYリレーションをつくるときはやっぱりActiveRecordじゃないとダメですよね?
今はHAS_MANYになってるけど、これはもうMANY_MANYに変わります
そうなるとやっぱりAR使うしか無いような気がするんですが、どうでしょう??

73 :
DBに入れて外部キー貼ってればツールで見た時に解りやすいし
YiiはARのAttributesに含まれてるほうが何かとチョロいので個人的にはDBにいれるなー
好みじゃないかなー

74 :
まぁ都道府県の増減はまずないだろうから定数でもいいとは思うけれど
基本変更が殆どないマスタデータって考えれば、テーブル管理でもいいと思うよ
ここは定数、こっちはテーブル、みたいな使い分けするよか全部テーブルってしたほうが
例外パターンとかを決める必要がないので自分はこっちのほうが好きかな
あとは要件次第(ものっそいシビアなパフォーマンス要求されるならDBアクセスも減らすべきじゃね、とかそういう)

75 :
http://qiita.com/advent-calendar/2012/yii
書いてもいいのよ

76 :
金どる

77 :
(´・ω・`)findAll()

78 :
>>62
ダイナミックコンテンツを使え。超便利。
サイトトップはメインはページキャッシュ使いつつ、ログイン表示とか部分的に動的に出力してる。
ttp://www.yiiframework.com/doc/guide/1.1/ja/caching.dynamic

79 :
キャッシュに関するノウハウが欲しいな
どこでどういうキャッシュ使えばいいのかまとめて欲しい
ってわけで>>75のサイトで誰か書いて

80 :
1.1.13来たね
ttp://www.yiiframework.com/news/65/yii-php-framework-1-1-13-is-released/

81 :
http://www.yiiframework.com/files/CHANGELOG-1.1.13.txt
大して変わったことないかな?

82 :
大きな変更といってもjQueryとPHPUにtのバージョンアップくらいかなあ

83 :
カイブツクロニクルってゲーム、Yiiで作られてるのかな?
ttp://gcwiki.jp/kaibuz/index.php?kako_wiki_zs8
CDbTransactionで検索。
エラーメッセージが同じ。

84 :
モデルのデフォルト値で、
空白の場合だけ設定したいんだけどどうしたらいいの?

85 :
海外のFWレビューでは人気が出てきたYiiも日本ではさっぱりだね
http://webrevisions.com/tutorials/php-framework-the-best-php-framework-for-2013/
http://codegeekz.com/best-php-frameworks-for-developers/
http://www.phpframeworks.com/top-10-php-frameworks/
日本語でもブログとかで情報がぼちぼち出てきてる感じだけど、まだまだ注目されてる感じじゃない。
公式ガイドの日本語訳も頑張ってるけど、クックブックが翻訳されればもっといいんだけどね。
・Yii Application Development Cookbook Second Edition
http://yiicookbook.org/
・サンプルコード
https://github.com/samdark/yii-application-cookbook-2nd-edition-code

86 :
英語アレルギー+現在のPHPマの大半が新規勉強をやる気持ちが足りてないから、難しいんじゃないかなぁって感じ。

87 :
英語ができないやつがどうやってプログラム書けるの?
プログラムって英語じゃん

88 :
>>87
ヒント: shain_bango

89 :
yiiって、他のフレームワークにあるみたいに、DBの日付のカラム名をcreated_atに指定したりすると、
フォーム処理の際に自動的に現在の日付を入れてくれるって機能はないですか?

90 :
89です。
×DBの日付のカラム名をcreated_atに指定したりすると、
○DBの日付のカラム名をcreated_atなど決められた名前にすると、

91 :
89です。
すいません。自己解決しました。
beforeSaveをオーバーライドすればよかったんですね。

92 :
beforeSaveで削って、db側でevent作ってあげれば楽だよね
updated_atも処理出来る

93 :
http://www.yiiframework.com/wiki/10/how-to-automate-timestamps-in-activerecord-models/
カラム名で判別するわけじゃないけど、自動タイムスタンプの3パターンやり方が書いてある
・rulesのonオプションupdate,insert
・beforeSave()
・CTimestampBehavior

94 :
protected/runtimeのapplication.logにログが更新されなくなりました。
今日の朝はまでは問題なく仕事から帰ってきたら突然なってました。
特にmain.phpの設定は変えていないのですが・・・・。
何かわかる方いらっしゃいますか?
runtimeのパーミッションは777
application.logのパーミッションも777にしてみましたが、ダメでした。
application.logファイル自体を消してみても、新しいファイルは作成されませんでした。
以下がmain.phpの設定です。
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
'filter'=>'CLogFilter',
),
array(
'class' => 'CProfileLogRoute'
),
// uncomment the following to show log messages on web pages
/*
array(
'class'=>'CWebLogRoute',
),
*/
),
),

95 :
levels に trace 加えても作成されない?

96 :
公式ガイドとブログチュートリアル一通り読んだんだけど
viewのウィジェットが訳わかめ
CListViewだのCGridViewだのみんな使ってるの?

97 :
>>95
ありがとうございました。trace加えたら、ログが出てきました。
でも、traceを消したら、またでなくなるって感じです。
今までtrace無い設定でうまくログが出てたんですけどね・・・。

98 :
>>96だけど自己解決しました
http://www.yiiframework.com/forum/index.php/topic/4532-renderpartial-vs-widget/page__p__24257#entry24257

99 :
ウィジットもコントローラないとリストの検索とかページネートとかやり難くないんかな?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
PHP上級者が集まるスレ (584)
Perl6/Parrotスレ - Part2 (351)
GoogleWebToolkit[GWT]について語ろう (234)
俺専用の板 (139)
【Java】Play framework【Scala】 (209)
まあ。ほとんどないとおもうが。。 (132)
--log9.info------------------
【もっと】To LOVEる−とらぶる−シリーズ総合Part73【ダークネス】 (887)
機動戦士ガンダムUC(ユニコーン):33角獣 (409)
魔法少女まどか☆マギカは前売特典が在庫だらけの爆死ステマ糞アニメ235 (677)
苺ましまろ160 7巻出るよ!…4年ぶりに (803)
【先行上映組】宇宙戦艦ヤマト2199 第195話 (711)
らき☆すた ≡ω≡. part542 (662)
はたらく魔王さま! バイト67日目 (100)
魔法少女まどか☆マギカ 第3873話 (143)
波打際のむろみさん うろこ15枚目 (522)
あいまいみー 8壺目 (639)
涼宮ハルヒの憂鬱 SOS団の活動1820日目 (209)
ゆゆ式 今日の部活テーマ22個目 グネッとくもんだね (422)
ラブライブ!活動257日目 (813)
CLANNAD -クラナド- AFTER STORY だんご421人大家族 (914)
僕は友達が少ないNEXT 隣人部活動記録140ページ (832)
やはり俺の青春ラブコメはまちがっている。 奉仕部50日目 (262)
--log55.com------------------
速報 原油 2ドル うわああああ [813758515]
【速報】アベノマスク、外国製でした そりゃシミやダニ入りだわ [455169849]
【アベノマスク】厚労省「どのメーカーに発注したのかは答えられない」466億円が行方不明に🤯 [189282126]
シャープ4月21日10時より50枚入りマスクを2980円で販売(送料は別途660円) [412937765]
【悲報】 石田純一「オレの冷麺店の売上が激減してる!?視察に行くぞ!」→コロナ感染→石田「なぜこんな事に・・・」と後悔 [541495517]
【悲報】都内で家族間の感染が増加 もう終わりやね・・・ [875850925]
【悲報】三重県知事「コロナ患者の家に投石・落書きするのはやめて😭」 [875850925]
麻生太郎「10万円は手を挙げた乞食に恵んでやる」 ★2 [455169849]