トップページphp
153コメント43KB

【PHP】Yii Framework Part 2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2012/08/13(月) 22:16:39.44ID:???
前スレDat落ちでまさかの2スレ目。流行れ!


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

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

公式フォーラム
ttp://www.yiiframework.com/forum/index.php?/forum/21-japanese/
0002nobodyさん2012/08/13(月) 22:29:33.32ID:???
・Yiiとはなんですか?
イーと発音します。"Yes It Is!"の略で「速い?安全?使える?」と言った質問にそのように答えるらしいです。
つまり口からはいと垂れる前にイーと答えろ!わかったな!

・必要条件は?
PHP5.1以上。ちょっと古い鯖でもいけるね!DBはMysqlでもSqliteでも。APC推奨。

・Yiiは何に向いてるの?
軽量で洗練されたキャッシュ機構を持ってるらしいから高負荷のアプリ、例えばポータル・フォーレム・CMS・EC等に向いてるらしいよ。

・他のフレームワークに比べてどうなの?
機能が豊富。ドキュメントが充実してる。設計がイケてる。
Symfonyより楽。Cakeより軽い。CodeIgniterより高機能。バランス派。
0003nobodyさん2012/08/13(月) 22:39:46.35ID:???
ブログチュートリアル
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
0004nobodyさん2012/08/13(月) 22:48:41.80ID:???
Yii2について

http://www.slideshare.net/samdark/alexander-makarov-yii2-whats-new

・PHP5.3.8以上
・ネームスペース
・PSR-0準拠

そのうち出る
0005nobodyさん2012/08/14(火) 09:08:40.96ID:???
このフレームワークは書籍でてる?
0006nobodyさん2012/08/14(火) 10:03:24.53ID:???
ttp://www.yiiframework.com/news/?tag=books

日本語の書籍は無い。
そのかわり公式の日本語ドキュメントはしっかししてる
0007nobodyさん2012/08/14(火) 11:20:31.31ID:Gol/k/SD
パート2になって更に人気出ると良いね
良さが伝われば絶対に流行ると思う
0008nobodyさん2012/08/14(火) 14:49:32.06ID:???
後発なだけあって完成度が高い
0009nobodyさん2012/08/15(水) 15:05:50.95ID:???
テーマ集めたサイトがあったので
ttp://yiithemes.mehesz.net/themelist

こういうの見ると本当に海外にはユーザ結構いるんだなと思う
0010nobodyさん2012/08/15(水) 19:00:34.55ID:???
すげーな。
日本じゃ考えられん。
0011nobodyさん2012/08/16(木) 21:59:35.96ID:enTIr59o
public function behaviors(){
   return array(
     'CAdvancedArBehavior' => array(
       'class' => 'application.extensions.CAdvancedArBehavior'
     ),
     'CTimestampBehavior' => array(
      'class' => 'zii.behaviors.CTimestampBehavior',
       'updateAttribute' => 'updated',
       'createAttribute' => 'created',
     )
   );
}

これでsave()すると、createdはちゃんと時間入れてくれるのに、
updatedは入れてくれない
フィールド名は合ってる
0012nobodyさん2012/08/16(木) 22:10:05.73ID:enTIr59o
自己解決
新規保存のときはupdatedに入れてくれないのね
DB側で DEFAULT 0 とかするしかないか
0013nobodyさん2012/08/16(木) 23:21:27.84ID:???
1乙。でもフォーレムって何だw

Yii2って互換性はどーなるの?
0014nobodyさん2012/08/17(金) 01:04:22.21ID:ShnfvB2s
なんかモデルを更新したりコントローラを更新したりしても
挙動がおかしい気がするんだけどキャッシュって自動でされたりしないよね?
0015nobodyさん2012/08/17(金) 01:37:44.77ID:???
>>11

'setUpdateOnCreate' => true,

↑追加したらアップデート時もいれてくれる。
0016nobodyさん2012/08/17(金) 02:26:21.88ID:???
>>14
コントローラは知らんがモデルは設定によってはスキーマをキャッシュする。schemaCachingDurationとか設定されてない?
0017nobodyさん2012/08/17(金) 10:59:45.45ID:???
>>13
AR周りが大きく変わるしCFormModelもなくなるって言うから完全な互換は無理じゃないかなあ
0018nobodyさん2012/08/20(月) 20:49:22.71ID:???
1.1.12来てるね

前スレ
【PHP】Yii Framework
http://kohada.2ch.net/test/read.cgi/php/1291909271/
0019nobodyさん2012/08/20(月) 21:33:22.22ID:???
ほとんどバグ修正だな

てかその前の更新でDHTMLXとの統合って書いてあるっぽいけど組み込まれるの?
なんかExt4Yiiみたい
0020nobodyさん2012/08/20(月) 21:44:40.49ID:xPw81cJW
Yii2っていつでるの?
今開発してるサイト2にしたほうがいいのかな
完成度5割ぐらいだけど
0021nobodyさん2012/08/20(月) 22:06:35.76ID:???
年内に出るといいな
0022nobodyさん2012/08/20(月) 22:24:24.65ID:???
年内にベータくらいはでてほしいね。
0023nobodyさん2012/08/22(水) 18:49:12.60ID:???
日本ユーザグループリニューアルしたよ

http://yiijan.org/
0024nobodyさん2012/08/23(木) 03:27:48.15ID:???
公式サイトみたいにスッキリさせろよ
なんだよこのXoopsみたいなデザインは
0025nobodyさん2012/08/24(金) 13:44:17.79ID:???
あやまれ!Xoopsにあやまれ!
0026nobodyさん2012/09/09(日) 23:52:20.59ID:???
でもこういう日本語のサイトができるのは大きな一歩だよ
今後もCake並に普及したらいいと思う

反面結構使いやすくて効率良いから、
他の人に知られたくないみたいな気持ちも多少あったりする・・・俺だけだと思うけど
0027nobodyさん2012/09/11(火) 14:01:20.12ID:???
>>23
もうデザイン変更されててわろた

>>24-25でデザイン批判されたからか?w
0028nobodyさん2012/09/12(水) 21:21:21.36ID:???
やっぱ見た目って大事だよなw
0029nobodyさん2012/09/12(水) 21:31:02.16ID:???
いくら素晴らしいものでも
公式サイトがWeb黎明期みたいじゃ誰も使いませんよ

HPビルダー臭がしてもCMSそのまんま感がしても一緒
0030nobodyさん2012/09/13(木) 06:05:24.32ID:???
今のデザインはいいの?
0031nobodyさん2012/09/16(日) 16:40:17.42ID:???
Yiiはモデルにビジネスロジックを書きますが、例えば

$product = new Product();
$product->price = 100;
$product->getTaxPrice();

public function getTaxPrice()
{
return $this->price * 1.05;
}

みたいな書き方はOKなんでしょうか。
それとも、getTaxPrice($price) と書くべきなんでしょうか。

上の書き方がOKの場合→開発者はどのプロパティに値をセットして良いのか分からない
getTaxPrice($price)の方が良い場合→モデルをsave()する際はプロパティに値をセットしてるのにこのときだけ引数で対応??
0032nobodyさん2012/09/16(日) 17:02:22.91ID:???
両方に対応させたらいいんじゃね?
public function getTaxPrice($price=null)
{
  return ($price===null) ? $this->price * 1.05 : $price * 1.05;
}
0033nobodyさん2012/09/16(日) 17:36:27.27ID:???
なんかJAVAっぽい
その辺はもう好みの問題じゃないかなあ。
個人的にはgetTaxPriceからpriceは想像できるからそんな不自然でもないと思う。
税込価格で扱っている方が手間がないからプロパティは$this->basePriceにしてpublic function getPrice()にするとか。

ちなみにYiiはget/setを省略してプロパティとして呼べるので
public function getTaxPrice()なら$product->taxPrice;でいい。
0034312012/09/16(日) 18:08:35.70ID:???
なるほどー。
getTaxPrice()はシンプルな構成でしたが、ロジックによっては
複数のプロパティをセットしなければならない場合もありますよね。
そのとき、分かりにくいかなと思った次第です。
かといってメソッド引数に渡すのも微妙な感じです。
例えば user、user_profilesに同時にレコードを登録する場合、Userモデルのクラスに

public function save(User $user, UserProfile $profile)
{
 $user->save();
 $profile->save();
}

とは多分書きませんよね。普通は
public function save($profile)
{
 $this->save();
 $profile->save();
}

といった感じでしょうか。

あと両方に対応させるとなると、全てのビジネスロジックメソッドで同様の処理が必要となり、冗長かなぁと思いました。
0035nobodyさん2012/09/16(日) 18:59:08.85ID:???
public function relations(){
return array('profiles'=>array(self::HAS_MANY, 'user_rofiles', 'user_id'));
}

リレーション作って

public function save()
{
 $this->save();
 $this->profiles->save();
}

じゃないかな。リレーション張れないようなものであれば多分一緒のモデルでSaveするべきじゃない
0036312012/09/16(日) 19:14:46.03ID:???
お、それは良さそうですね。
参考になりました。ありがとうございます
0037nobodyさん2012/09/17(月) 00:14:07.71ID:???
save()に引数がないと、テーブルのリレーションを知らない開発者は
どのプロパティに値を追加すれば良いか判断がつかない気がする。
例えばUser、UserProfilesが必須で、条件によってUserActivitiesへのインサートが必要な場合とか。
0038nobodyさん2012/09/17(月) 01:03:42.06ID:???
複數のモデル絡んだ入力ならFormModelでまとめたらいいとは思う

引数に入れるのは依存するクラスが増えると無制限に引数増えるから個人的には避けたいかなあ
0039nobodyさん2012/09/24(月) 18:26:45.04ID:???
ユーザーIDを元にユーザーテーブルからユーザー情報ひっぱってくるっていう処理が
あらゆる場所にかかれてしまうんだけど、これはしょうがないのかな
まとめるとしたらどのファイルに記述したらいいんだろう
0040nobodyさん2012/09/24(月) 22:41:49.60ID:???
$post->attributes=$_POST['Post'];
で、自動的に格納してくれるフィールドって、
DBにフィールドがある場合のみ?
リレーションで、categoriesなんてのがある場合も自動で入れてくれる?

Postモデルに2つのリレーション(どちらもMANY_MANY)を作っていているんだけど、
片方だけ入るのはどうして??
0041nobodyさん2012/09/26(水) 06:42:13.13ID:???
>>40
自己解決した。
http://www.yiiframework.com/doc/guide/1.1/ja/form.model#sec-4

必須項目でもなんでもなかったので、
バリデーションルールに属性が書かれていなかったので「安全」とされずに
一括代入で代入されていなかったようだ。

いや〜理解すればするほど、よくできてるなぁと思う。
0042nobodyさん2012/10/11(木) 00:10:08.03ID:VQnyuLaI
コントローラで

class HogeController extends Controller
{
  public function actionCreate($name)
  {
    $account=Account::model()->findByAttributes(array('name'=>$name));

/hoge/create/myname1234

みたいにURLから引数を受け取りたい場合って、
わざわざconfig/main.phpのurlManagerで設定しないとダメなの?
0043nobodyさん2012/10/11(木) 12:32:02.39ID:???
要点を得てないかもしれないが
/hoge/create?name=myname1234&age=17が嫌で
/hoge/create/name/myname/1234/age/17みたいなURLパターンが使いたいなら
'<controller:\w+>/<action:\w+>/*'みたいに末尾を*にするとname/valueのパターンが繰り返される
0044nobodyさん2012/10/12(金) 01:07:04.59ID:???
>>43
ありがとうございます。
*を追加する方向でいきます。

あと、もう1つ別の質問があるのですが、
return array(
'condition'=>'t.status=:status',
'params'=>array(
':status'=>1,
),
);
scopes()や、Dbcriteriaなどで使う条件のparamsで、
上記のように数値でstatusを渡すと思い通りに帰ってこなく悩んだのですが、
':status'=>'1'
のようにしなくてはいけないのですね。
これは内部的には数値と文字列を別々にしているということだと思いますが、
MySQLの場合、どれが数値でどれが文字列として解釈されるのかというのを説明したページってありますか?
上記の場合はENUMでstatusを設定していました。
0045nobodyさん2012/10/17(水) 06:49:49.66ID:m5Yd7B3u
YiiJanとかドキュメントでLinkPagerとかGridViewについての記事を見ても
使おうという気にならない
どこで使えばいいか、どう便利なのか全然わからん
0046nobodyさん2012/10/17(水) 14:22:38.22ID:???
管理画面がサッと作れて便利ちゃう?
0047nobodyさん2012/10/20(土) 22:15:32.88ID:???
地域別人気度
インドネシア  100
インド     79
ウクライナ   74
ロシア     60
ベトナム    44
ポーランド   14
中国      13
ブラジル    13
イタリア    10
スペイン    9
0048nobodyさん2012/11/12(月) 03:09:18.01ID:???
yii framework使って仕事したい
0049nobodyさん2012/11/15(木) 23:05:45.85ID:???
受託で小さめの案件なら勢いだけで採用してもいいんだけどねえ。
あとは独立しかない…

一応使ってる会社もあるらしいよ
ttps://speakerdeck.com/crifff/yii
0050nobodyさん2012/11/17(土) 23:41:27.97ID:/APH/Q07
サーバーにあげると極端にセッションの接続時間が短くなるんだけどどういう理由が考えられる?

・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秒以上続く理由がわからない・・・
0051nobodyさん2012/11/18(日) 21:26:07.40ID:???
index.phpでsession.gc_maxlifetimeを設定してもダメだった。。。
なんだ???わけがわからん・・・
0052nobodyさん2012/11/19(月) 00:55:58.76ID:???
まったく知らずに言うけどドメインかhttpsのどっちかじゃないかな
0053502012/11/19(月) 17:26:03.61ID:???
>>52
                    ありがとう!!!!!!!!
      ,. < ̄ ̄ ̄ ̄ ̄ > 、
    /               ヽ   _
   〈彡                Y彡三ミ;,
   {\    \|_ \>ー 、  ト三三ニ:}
   人{ >、,___.>、/三 ヾ\ |わ三彡;!
  /./ トミ;,_       Y/  \>ノー〜=- "
  V / /!   ̄ ̄ ゝ  |   /  _
  し/'┴──----─''|  ン}\-ヾ彡
              ヾ、___ノー'''`
0054nobodyさん2012/11/19(月) 20:05:10.17ID:???
>>53
当たり!? 良かったー。お疲れ様〜
0055nobodyさん2012/11/19(月) 23:33:49.23ID:???
>>54
当たりというかドメイン関係の発想で
レンタルサーバだったからセッションの保存先変えたらいけました
0056nobodyさん2012/11/25(日) 01:11:05.53ID:5yYiKRS4
CakePHPがあまりにもダメダメだったので
純粋なOOPフレームワークであるYiiに乗り換えました。
宜しくお願い致します。
0057nobodyさん2012/11/26(月) 11:54:34.26ID:???
Yiiを一言で表すと、「かゆいところに手が届く」って感じだよな
0058nobodyさん2012/11/26(月) 12:19:18.69ID:???
>>56
次にお前はPHPがあまりにもダメダメだったのでrailsにしましたと言う。
0059nobodyさん2012/11/26(月) 17:04:48.92ID:???
PHPは言語でRailsはフレームワーク。
しっかりしろよ。
0060nobodyさん2012/11/27(火) 00:22:11.39ID:???
・データキャッシュ
・フラグメントキャッシュ
・ページキャッシュ
お前らが一番使ってるキャッシュってどれ?

なんかデータキャッシュやらクエリキャッシュを見ても、
もうページキャッシュでいいじゃんって思ってしまうんだが
0061nobodyさん2012/11/27(火) 00:39:56.90ID:???
>>59
RailはDSLなのでRubyの方言と言って差し支えないレベルなのであながち間違ってないんじゃないでしょうか

>>60
俺はむしろページキャッシュ全然つかわないなあ、一部データキャッシュしてる程度
ブログとか投稿系メインならページキャッシュがいいんだろうけどそういうサイトでもないし
0062nobodyさん2012/11/27(火) 21:17:50.55ID:???
ページキャッシュは使い所が限られすぎて存在を忘れるレベル
ヘッダにログインしてるかどうかみたいな表示があったらもう使えないからなぁ

フラグメントキャッシュは物珍しさに一回使ってみたけど、なんかお肌に合わなかった。
データ更新したときのためにDependency付けたりするとviewがまたごちゃごちゃしだすんだよな・・。
0063nobodyさん2012/11/28(水) 00:12:08.31ID:???
>>62
じゃあキャッシュ使ってないの?
0064nobodyさん2012/11/28(水) 09:30:12.29ID:???
>>63
普通のデータキャッシュはよく使うよ。
findByPkの結果をキャッシュしたりするし、大したサイズが無いマスターテーブルなんかは期限1日で丸ごとキャッシュしてる。
■ このスレッドは過去ログ倉庫に格納されています