トップページ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/
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
コントローラーはコントロールをするものであり名詞
0959nobodyさん2012/07/21(土) 16:41:36.22ID:???
>クラスは名詞
>メソッドは動詞
なるほど、サンクス
0960nobodyさん2012/07/21(土) 17:46:36.46ID:???
最近更新ないねー
0961nobodyさん2012/07/21(土) 18:12:55.14ID:mc4IJPZ4
データだけ返すモデルを
protected/models の下に作ってるんだけど、おかしなことしてる?
ベターな方法があれば教えて欲しい

例えば、プロフィールフォームなどで使う男女のデータを
<?php
class Gender
{
  public static $data = array(
    array('id'=>0,'name'=>'指定無し'),
    array('id'=>1,'name'=>'男性'),
    array('id'=>2,'name'=>'女性'),
  );
}

というモデルを作って Gender.php として protected/models に保存してる

プロフィールフォームで
echo $form->radioButtonList($profile,'gender_id',
      CHtml::listData(Gender::$data, 'id', 'name')
               :
               :
としてとってこれる
テーブルとして保存する必要が無いようなデータを
DBにアクセスする手間とオーバーヘッドを減らすためにこういう風にしてる
男女のデータ意外に、都道府県とか、職業とか、、、いろんなデータをmodelsの下に入れてる

最初は良い考えだと思ったけど、ちょっとファイル数が多くなってきた(といっても20弱だけど)ので
設計として正しいか不安になったので質問してみました
0962nobodyさん2012/07/25(水) 08:24:23.35ID:???
いいんじゃない?まずもって変わることのないようなデータなら特に。
正規化してDBに入れてもキャッシュしてUser->Gender->nameでもいいと思う。
モデルの数はシステムの規模に比例するから諦めろ
0963nobodyさん2012/07/30(月) 18:53:39.77ID:jv1g1zQt
1.1.11来てるね
0964nobodyさん2012/07/30(月) 21:13:29.54ID:CcejVExF
なにがかわったの?
0965nobodyさん2012/07/31(火) 16:32:26.25ID:???
>>964
公式HPにきちんと書いてあるんだから見れ。

2.0はまだかな〜
0966nobodyさん2012/08/04(土) 03:12:01.01ID:rmgfBjt+
5.4に対応したYii出るのかな
0967nobodyさん2012/08/04(土) 03:36:43.31ID:???
Yiiなお前らが次に目をつけてるFWは何かな?そっと教えてごらん
0968nobodyさん2012/08/04(土) 03:49:44.18ID:???
FuelPHP
書籍もでてるし
0969nobodyさん2012/08/05(日) 12:39:40.82ID:???
2.0は5.3.8系の予定だよ
http://www.slideshare.net/samdark
0970nobodyさん2012/08/05(日) 18:30:28.91ID:???
どうせなら5.4でもよさそうだけどなぁ
0971nobodyさん2012/08/06(月) 00:44:04.95ID:???
「どこでも動く」ことに重きを置いてるから5.8に留めるらしい。
まあ5.4上で動かしても何ら問題ないと思うけど
0972nobodyさん2012/08/08(水) 06:57:57.91ID:jQ2fQMzJ
HTMLに出すページのタイトルとして、
コントローラの名前と
アクションの名前を設定したいんだけど、
それぞれ共通の $this->pageTitle;って値持ってるよね
どうしたらいいんだろう
0973nobodyさん2012/08/08(水) 09:55:44.61ID:???
action | controller | title
みたいなタイトル作りたいってこと?常に固定だったらCController::getPageTitle()拡張して
return Yii::app()->controller->id. ' | '. Yii::app()->action->id. ' | '. $this->_pageTitle;
とか。
あるいはpushPageTitle()でも作って適当なところで$this->_pageTitleにスタックさせるとか。
0974nobodyさん2012/08/09(木) 16:53:44.99ID:sQlC8OJZ
YiiはCakePHPでいうところのapp_modelがないみたいですけど、
createdフィールドのような保存したときに自動でタイムスタンプを保存する機能を実装したい場合、
モデルを作る度にbeforeSave()にその処理を記述しないといけないんでしょうか?
0975nobodyさん2012/08/09(木) 20:13:16.41ID:???
>>974
ttp://www.yiiframework.com/forum/index.php/topic/15660-yii%e5%88%9d%e5%bf%83%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e3%81%93%e3%81%a8%e3%81%be%e3%81%a8%e3%82%81/page__view__findpost__p__89635
0976nobodyさん2012/08/10(金) 02:49:35.07ID:???
>>974
CActiveRecordを継承したMyActiveRecordをつくればいいだけの話。
タイムスタンプに関しては、CTimestampBehaviorを検索すれ。
0977nobodyさん2012/08/11(土) 17:49:21.23ID:???
ユーザー増えて欲しいし布教したいんだが
他のフレームワークに対するYiiの利点ってなんだろうな。
CakeやSymfonyに比べると速いっていうのはあるんだがCIやfuelにはその点劣るよね。
反対にそういう軽量FWに比べれば、フルスタックMVCでツールや機能が揃ってる。
バランスがいいといえばそうなんだけどなんか押しが弱い。
0978nobodyさん2012/08/11(土) 18:05:03.49ID:???
良い感じのサイト作ってプロモーション!
検索yiiでそこそこ飛んで来るヨ
0979nobodyさん2012/08/11(土) 19:11:52.54ID:dsfFj2Kp
CIはフルスタックじゃないだろ
フルスタックでYiiより速いのってあるか?
あと使って初めて気づくけど、色んな点で感動する
どこで?って言われると忘れてるぐらいの細かい点だけどね
0980nobodyさん2012/08/11(土) 20:21:38.05ID:???
わかるわぁ。
でもうまく説明できないわ。
とにかく高機能で、かつ設計が練られてるから拡張しやすくて便利なんだよね。
コアのソースを読めて、英語のドキュメントなりフォーラムを見て解決できる力があればつまることもないし。
0981nobodyさん2012/08/12(日) 20:34:09.40ID:???
ソースが読みやすい
レス数が950を超えています。1000を超えると書き込みができなくなります。