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

【PHP】Yii Framework

■ このスレッドは過去ログ倉庫に格納されています
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/
0668nobodyさん2012/02/12(日) 20:39:49.70ID:???
>>666
英語ですか……学生時代もっと頑張っておくんだったなぁ

>>667
探してみます。ありがとうございます。
0669nobodyさん2012/02/12(日) 20:59:01.29ID:9VDZvfC5
Yii 1.1 Application Development Cookbook
思い切って注文しました。辞書を片手に頑張ります
0670nobodyさん2012/02/12(日) 23:28:33.50ID:???
今日日ネットだけでなんとかならないものなんてないに等しいし、本を買うのはさして意味ないと思うな
0671nobodyさん2012/02/13(月) 00:06:36.07ID:???
書籍には書籍の良さがあるんじゃないかな
0672nobodyさん2012/02/13(月) 01:03:04.20ID:???
紙の匂いとかね。
0673nobodyさん2012/02/13(月) 01:32:52.23ID:???
Kindle無臭
0674nobodyさん2012/02/13(月) 01:37:37.52ID:???
いやいや、チュートリアル終わったなら次はガイド見ろよw
0675nobodyさん2012/02/13(月) 02:13:55.51ID:???
>>674
ガイド、チュートリアルの順にやりました
書き方が悪くて混乱させてしまったようで申し訳ないです
今はyii for beginnerという記事を読んでいますが
他に基礎がまとまってるページなりサイトなりあれば教えて頂きたいです
0676nobodyさん2012/02/13(月) 03:35:40.24ID:???
ktai extension便利だな!
セットアップがちょっと難しかったけど、メールのテンプレート機能で携帯用と使い分けられるのが良い
0677nobodyさん2012/02/13(月) 18:09:25.18ID:???
新バージョンが出たらしい?
0678nobodyさん2012/02/14(火) 00:44:08.18ID:CHG2KmQT
本当だ1.1.10出てるじゃないか
今度は早かったな
0679nobodyさん2012/02/14(火) 01:05:36.74ID:CHG2KmQT
それはそうと、1.1.8でカスタムURLなんつー便利そうなものが追加されてたんだな、知らんかった…
http://www.yiiframework.com/doc/guide/1.1/ja/topics.url#sec-9

翻訳も早くて感謝です
0680nobodyさん2012/02/14(火) 02:33:19.28ID:???
>>679
これってBlogとかでよくある、
ブログタイトルをURLに含めるようなものが簡単に
出来るということだよね?
0681nobodyさん2012/02/14(火) 08:35:59.10ID:???
>>679
便利か?
0682nobodyさん2012/02/14(火) 09:45:04.56ID:???
ざっと読んだけど便利なんじゃね?
二つ以上のパラメータをURLに仕込んでDBに問い合わせてその結果次第で任意のページを返せるしさ
まぁ普通はコントローラ側でこう言う事をやるわけだけどね
0683nobodyさん2012/02/14(火) 09:53:20.39ID:???
クエリパラメータと何が違うんだろ。URL組みたてづらい気がするけど。
SEO対策ってやつ?
0684nobodyさん2012/02/14(火) 15:54:04.76ID:???
既存の仕組みでも、urlManagerのrulesに
 'articles/<title:.+>'=>'article/view',
みたいな感じで設定して、コントローラではtitleの文字列からモデルを検索して引くことができた

>>679の方法を使うと、コントローラの処理部分をルールクラスとしてまとめることが出来て、構造が直感的だし便利じゃね
カスタムURLを使わない人には関係ないと思うが

ちなみに俺は、タイトルみたいなのをユニークにするのは嫌なので、
'articles/<title:.+>/<id:\d+>'=>'article/view',

みたいにして、タイトルはあってもなくても良いようにしてる
0685nobodyさん2012/02/14(火) 18:44:41.95ID:???
結局、その程度でいいよね。
0686nobodyさん2012/02/14(火) 22:23:25.54ID:???
逆に可能性として出来ることを考えついたら良いよね
0687nobodyさん2012/02/14(火) 22:46:01.30ID:???
ああ、そうだね。
まあ個人的にはコントローラ/メソッド/idみたいなのとかを殆どURLに使わないので、
結局>>684氏みたいにルールを書いちゃう。
0688nobodyさん2012/02/15(水) 05:53:55.96ID:jJ6oNY1v
日本の携帯(ガラケー)って一部を除いてJavaScriptに基本的に対応してないけど、
JavaScriptが埋め込まれてるページにアクセスした場合、jsファイルのリクエストはしちゃうのかな?

携帯サイトでListView使おうとしたんだけど、勝手にjqueryがregisterされちゃって、抑止も出来ない作りになってることが分かった
もしrequestされちゃうなら、CClientScriptを継承したクラスでrenderの最後でスクリプトの配列をクリアしちゃおうかなって考えてるんだけど…

あんまりYii関係なくてごめん
0689nobodyさん2012/02/15(水) 12:17:35.98ID:???
フレームワーク自体使ったことが無くても
Yii Frameworkは習得出来ますか?
cakePHPから入ろうと思って
色々調べてるうちにYiiの方が良いように感じました。
もったいないことにcake参考書2つも買っちゃった;;
0690nobodyさん2012/02/15(水) 12:58:09.44ID:???
>>689
Cakeで不便に思うところがなければ捨てるのもったいないし
Cakeで不便に思うところがあっても、Yiiで解消されてないなら乗り換える意味ないよ。
0691nobodyさん2012/02/15(水) 14:13:55.27ID:???
>>689
Yii Framework以外に他のフレームワークを使ったことがないので、Yiiの方が良いかはわかりませんが、
小規模なECサイトを作り上げることができましたので、習得自体は難しくないと思います
学習しながら作っていったのですが、ノンフレームワークでやるより全然簡単にできました

個人的に習得が簡単だと思った理由としては、
 ・Extensionが豊富
 ・構造がシンプルかつ、拡張が簡単にできるようになっている
 ・フレームワークのソースが読みやすい
 ・ガイドが豊富で、日本語で整備されている(APIリファレンスは英語)
 ・JavaScriptとJQueryをあんまり知らなくてもAjaxが使えてしまう(JQueryはちょっと勉強した方が更にいろいろ出来るようになりました)
 ・Giiという仕組みがあるので、コードの土台をDBに合わせて自動で生成してくれる
※もちろんこれらは相対的な評価ではないことに注意して下さい

特に、ガイドを読めば土台のおまじない的なコードの意味(触り方)が分かるのは嬉しかったです(rules, relations, filters, etc...)

しかし、困ったことがあったらフォーラムなどを検索する必要があった場合も多かったので、若干の英語力は必要です
0692nobodyさん2012/02/15(水) 14:43:59.89ID:???
返答ありがとうございます
>>690
今までライブラリとかは使ったりするのですが
ほぼフルスクラッチで書いてばっかりでMVCフレームワーク
を使ったこと無いんですよ・・・
ただ参考書買っちゃったので、機会があればやろうとは思うのですが・・・
>>691
ありがとうございます
学習するならどれがいいのかな?って色々サイト見ていたら
yiiが目に留まったんです。
多少の英語力はあると思うので挑戦してみます。

>>690さん>>691さん
ありがとう!
0693nobodyさん2012/02/15(水) 15:33:52.13ID:???
CakePHPとYiiの両方使ったことがある俺から言えば、
Yiiの方がYii
理由は速さ、思想が優れていること
0694nobodyさん2012/02/15(水) 16:17:53.50ID:???
Cakeはちょっと膨らみすぎだね
0695nobodyさん2012/02/15(水) 20:23:43.02ID:???
Yiiのほうがいいけど、フォーラムとAPIリファレンスを読めるくらいの英語ができないとつらいかもな。
0696nobodyさん2012/02/16(木) 00:39:02.08ID:???
>>688
ここらへん参考になるかもです
http://www.yiiframework.com/forum/index.php/topic/16515-scriptmap-wont-work-when-debug-mode-is-off/page__p__81923__hl__+criptMap#entry81923

あとはCListViewを拡張して
registerClientScript()をうまくオーバーライドして使えば良いんじゃないですか?
0697nobodyさん2012/02/16(木) 06:20:41.52ID:hznOBTcJ
>>696
おお、ありがとう
とりあえずサイズの大きいjquery.jsだけはscriptMapに設定して無効化しようと思う

ところで、Yii::app()->cache->get($id)って、キャッシュがhitした場合でも、
DependentDataが変更されている場合はfalseを返却するんだな
通常get()でfalseが帰ってきたらデータを作りなおしてset()するような処理にしてると思うけど、
その時ちゃんとdelete()してあげないとメモリ上に使われないゴミデータが残ることになってしまうことに気がついた

ということで、こんな感じにするといいと思う
$value = Yii::app()->cache->get($id);
if ($value === false) {
 Yii::app()->cache->delete($id);
 $value = new Data();
 Yii::app()->cache->set($id, $value, $expire, $dependency);
}
expireが短かったり、dependencyを使ってないなら別に問題はないけど
0698nobodyさん2012/02/16(木) 21:59:40.81ID:???
YII_DEBUGがtrueの場合jquery.jsを呼び出し
falseの場合jquery.min.jsを呼び出すので、そこらへん注意してくだいね
0699nobodyさん2012/02/17(金) 00:10:51.42ID:???
DAOで?をつかってバインドするサンプルが載ってるURLって無い?
0700nobodyさん2012/02/17(金) 15:06:04.29ID:???
どういうときにYiiのDAOで「?」使うんですか?
0701nobodyさん2012/02/17(金) 16:37:22.68ID:???
>>700
検索で複雑なsqlが必要なんでARつかうよりDAOの方が便利そうだと思ったから。
パラメータ数も上限するから :id とかでバインドするのが面倒だった。

結局、自己解決して
普通にpdoと同じやり方で出来ました。
0702nobodyさん2012/02/18(土) 21:54:07.39ID:???
久しぶりにyii使って開発してるけどやっぱ効率いいわ
0703nobodyさん2012/02/18(土) 23:01:01.44ID:???
giiがアツイよな
HABTMもうまいこと自動でやってくれたら文句ない
0704nobodyさん2012/02/19(日) 00:30:45.02ID:???
ウィジェットについて詳しく解説してるサイトありませんか?
英語でも構いません。
0705nobodyさん2012/02/19(日) 00:54:03.26ID:???
ウィジェットの何を知りたいのさ
0706nobodyさん2012/02/19(日) 01:00:00.17ID:???
giiで生成したcrudのviewがDBのレコードリストを
ウィジェットを使って表示しているのを見てポカーンです。
ウィジェットの使い方を知りたいです。
0707nobodyさん2012/02/19(日) 01:36:57.26ID:???
ウィジェットの使い方だけじゃ何のウィジェットなのかわからないよ
ちなみにCListViewならこれ見ればわかる
http://www.yiiframework.com/doc/api/1.1/CListView/
0708nobodyさん2012/02/19(日) 01:40:53.67ID:kzCubFZM
APIリファレンス以上はソース見るしかないな
0709nobodyさん2012/02/19(日) 05:06:59.32ID:???
オフィシャルのフォーラムで検索すればある程度出てくるよ
0710nobodyさん2012/02/19(日) 10:33:48.34ID:Np7bOdr0
>>707
CListViewです、ありがとうございます!
0711nobodyさん2012/02/19(日) 10:55:43.37ID:???
これがエスパーの力か
0712nobodyさん2012/02/19(日) 13:36:38.54ID:Np7bOdr0
ウィジェットなんて使わないけどなぁ
自分で書いてる
0713nobodyさん2012/02/19(日) 13:40:38.98ID:Np7bOdr0
>>710
YKかwwwwww
聞いてくれていいんだけど遠慮してる?
0714nobodyさん2012/02/19(日) 13:52:40.38ID:kzCubFZM
ナニコレ珍百景に投稿してくる
0715nobodyさん2012/02/19(日) 14:36:30.21ID:???
なにこの自演
意図が全く見えない
0716nobodyさん2012/02/19(日) 14:40:19.96ID:???
触れんでいい。
0717nobodyさん2012/02/19(日) 14:51:17.56ID:???
自演ではないです。>>707 = >>710が自分で、
自分にyiiを紹介してくれたのが>>713さんです。
0718nobodyさん2012/02/19(日) 14:58:56.30ID:???
クソワロタwwwwwwwwww
同じ社内かよwwwwwwwwww

先輩が>>712書く
↓
先輩、ID同じで>>710が社内の後輩だと気づく
↓
先輩>>713書く
0719nobodyさん2012/02/19(日) 14:59:40.62ID:???
でも日曜に働いてるって会社じゃないのか?
0720nobodyさん2012/02/19(日) 15:07:02.65ID:???
ワロタ
0721nobodyさん2012/02/19(日) 17:03:57.36ID:???
CListView, CGridView, CDetailViewなどは
もともとYiiにはなかったんだけど
これはいいねってなってあとからコアに組み込むことになったんだそうですよ
どうでもいい話ですがw
0722nobodyさん2012/02/19(日) 18:27:35.51ID:???
一部のsave()でbeforeSave()を利用したくない(回避したい)のですが
方法を教えてくださいにゃん
0723nobodyさん2012/02/19(日) 19:13:08.00ID:???
youステートもっちゃいなよ
0724nobodyさん2012/02/19(日) 20:06:55.31ID:???
>>722
scenarioっていう便利な機能があるよ
0725nobodyさん2012/02/19(日) 20:23:12.13ID:???
>>723
state作成いたら成功した!
>>724
新しいscenario選択したらデフォルトのvalidateは利用されない仕組みなのかな
ちょっと試してみる!

二人ありがとYii
0726nobodyさん2012/02/19(日) 21:01:16.48ID:???
scenario選択してもはデフォルトのvalidateルールは有効だよ
ただ、俺はvalidateの切り分け以外にscenarioを使うのはおすすめしないな
なんか前にもこんな話したよね
0727nobodyさん2012/02/19(日) 23:31:59.69ID:???
反則かもしれないがアクション名で振り分けられる
モデルでYii::app()->controller->action->idを使ってさ
あとはプロパティがempty時はこうする、とかさ。いろいろあるさ〜
0728nobodyさん2012/02/19(日) 23:36:20.48ID:???
scenarioをvalidate以外で使うのをおすすめしない理由とは?
0729nobodyさん2012/02/19(日) 23:39:31.37ID:???
state作成とは、具体的にどうしたのか教えてもらえますか?
0730nobodyさん2012/02/20(月) 01:14:34.72ID:???
>>729
modelのclass変数を作成して
それをsave()前に$model->state=falseとかした感じ

beforeSave()の中で$this->stateでifして処理振り分け
0731nobodyさん2012/02/20(月) 02:03:58.18ID:???
>>730
なるほどー。一番良いやり方かもしれないですね。ありがとう。
0732nobodyさん2012/02/20(月) 03:43:08.62ID:b6WVXuP+
>>728
あとから見た時、分かり難いから
scenarioはruleを切り分けるという目的で追加されているのに、
他の目的で使うと、後で見た時になんだこれってなっちゃう危険がある
>>727の方法もいいね、っていうか前の話でも出てたなw
0733nobodyさん2012/02/20(月) 06:00:09.92ID:???
Yii::app()->controller->action->idはコンソールからモデルを実行するとき使えなくなるので
stateプロパティをモデルにもたせるのが良い方法かな
0734nobodyさん2012/02/20(月) 19:00:30.74ID:???
>>732
例えばbeforeSave()で分岐したいがためにrulesにscenarioを設定するのは違うけど
結果、$this->scenario !== 'insert'みたいのを利用できるのであれば、それはそれで使ってもかまわないってことだよね?
0735nobodyさん2012/02/20(月) 20:29:22.19ID:b6WVXuP+
>>734
それもinsert以外のscenarioの意味(効果)を変えちゃうから、俺は原則、使わないようにしてるよ
でも利用した方がベターなケースもあるかもしれないし、beforeSave()を利用したくない理由が分からないのに、
scenarioを使うのはおすすめしないって言ったのは適切ではなかったかも
単に、自分ルールとしてscenarioはvalidate ruleを切り分けるためだけに使ってる、って言うべきだったかな

結局は環境(体制、設計、規模など)によって、自然で分かりやすい実装ってのも変わってきちゃうよね
0736nobodyさん2012/02/20(月) 21:36:24.53ID:???
scenarioの意味ってruleを切り替えるってことだったんだ
初めて知ったわ
0737nobodyさん2012/02/20(月) 22:16:12.46ID:???
734ですが
$this->scenario !== 'insert'部分は
CActiveRecord::isNewRecordを使うほうがいいですね。すみません

いろんなもので代用できる分、役割をはっきり持たせて実装するってのは大切ですね
0738nobodyさん2012/02/21(火) 04:41:21.93ID:???
コンソールアプリでログの出力の仕方が分からん!
configはあってるはず・・・
0739nobodyさん2012/02/21(火) 05:23:46.97ID:???
ここらへんはどう?参考になるかね
http://www.yiiframework.com/forum/index.php?/topic/10421-logging-in-long-running-console-app/
0740nobodyさん2012/02/21(火) 05:41:14.37ID:???
今試してみたんだが、普通にログ出力できたけどねぇ
レベルがマッチしていないとかではないかい?
0741nobodyさん2012/02/21(火) 13:07:06.05ID:???
Yii::app()->nameって使うようで使わないな
layoutのmain.phpとかでは使うようにしてたんだけど、
他のviewでは結局サイト名を手打ちしてしまう。
0742nobodyさん2012/02/21(火) 22:14:58.43ID:???
メールとかで使うよ Yii::app()->name
0743nobodyさん2012/02/22(水) 00:04:11.80ID:???
>>742
どゆこと?
0744nobodyさん2012/02/22(水) 00:24:57.94ID:FnoANuGB
$body .= Yii::app()->name.'です。\nお世話になっております。';
ってことじゃね
0745nobodyさん2012/02/23(木) 05:54:50.59ID:???
レコードの挿入日時みたいなデフォルト値ってどこで設定してる?
モデルのrulesで設定してるんだけどここでいいのかな

ってかrulesのdefaultはどのタイミングで設定されるん?
1回目バリデーション失敗して、次送信したときまた新たに設定される?
0746nobodyさん2012/02/23(木) 08:37:03.38ID:???
>>745
ふつうはDBMSのトリガー使うよね。
0747nobodyさん2012/02/23(木) 09:11:29.65ID:???
beforeSave()
0748nobodyさん2012/02/23(木) 12:03:11.26ID:???
CTimestampBehaviorってものがあってだな。
俺はこれを使ってる。
0749nobodyさん2012/02/23(木) 15:12:02.57ID:???
API: CTimestampBehavior
http://www.yiiframework.com/doc/api/1.1/CTimestampBehavior
07507452012/02/23(木) 15:20:41.42ID:???
え?モデルのrulesのdefalutってこういう使いかたするんじゃないの?
一応うまくいってるけど
あと、ユーザー登録のアクティベートキーの生成&attributesに設定とかも
rulesのdefalutでやってるけど


array('created', 'default', 'value'=>time()),
array('actkey', 'default', 'value'=>$this->createActkey(), 'on'=>'register'),
0751nobodyさん2012/02/23(木) 15:47:38.45ID:???
ここ見ると、どっちでも良いような書き方ですよね
http://www.yiiframework.com/wiki/10/how-to-automate-timestamps-in-activerecord-models/
0752nobodyさん2012/02/23(木) 16:49:23.70ID:???
親モデルを作って、下みたいなの書いたら、すべてのテーブルで自動でやってくれて便利ですよ
1カラム更新時にupdate_timeも更新したい場合は、例えば$this->update(array('hoge', 'update_time'));みたいにすればOKです

<?php
class ActiveRecord extends CActiveRecord
{
public function behaviors()
{
if ($this->hasAttribute('create_time') && $this->hasAttribute('update_time'))
return array(
'CTimestampBehavior' => array(
'class' => 'zii.behaviors.CTimestampBehavior',
'setUpdateOnCreate' => true,
),
);
else
return array();
}
}
0753nobodyさん2012/02/23(木) 17:22:27.23ID:???
「一部のsave()でbeforeSave()を利用したくない」
これ、cakeでは'callback' => falseみたいのありましたよね?ほしいですねyiiにも
0754nobodyさん2012/02/23(木) 22:28:10.74ID:???
お安い御用です
0755nobodyさん2012/02/26(日) 12:56:19.56ID:???
txtファイルに読み書きしたいんですが、
そういうファイルはどのフォルダに入れるのが普通なんでしょうか?
0756nobodyさん2012/02/26(日) 15:20:43.51ID:???
てきとうにフォルダつくってfopen()しようとすると
エラーが出るのですがfopen()はそもそも使えないのでしょうか
0757nobodyさん2012/02/26(日) 17:49:48.25ID:???
file('http://yahoo.co.jp');
なら何も問題ないんですよね。

protected/controllers/test.phpで
file('../../test/test.txt');
だとエラーになります。
webrootにあるtestフォルダのtest.txtを読むにはどうしたらいいのでしょうか・・・
0758nobodyさん2012/02/26(日) 18:43:23.62ID:???
ファイル操作をするならこれを使う良い
http://www.yiiframework.com/extension/cfile/
0759nobodyさん2012/02/26(日) 19:17:25.20ID:???
>>758
早速試してみます! ありがとうございます。
0760nobodyさん2012/02/26(日) 19:23:27.33ID:???
相対パスで指定するなら、現在のカレントディレクトリがどこかを確認しれ。
URL上のパスではなく、OSの上でのパスな。
もしくは絶対パス使え。

ファイルの配置場所は、Web上からも見れていいものなら、Webルート配下でもなんでもOK。
見せたくないなら、それ以外の場所にするか、.htaccessなんかでそのディレクトリに制限かけとけ。
yiiならprotected/以下はアクセス制限かかるだろう。

一般的にどこにおくか、というよりは、そのファイルが何のファイルか、
どのような配置にあるのが意味が通じやすいか、とかそういうのを考えて配置すれば良いよ。
設定ならconfig/なりsettings/なりつくってその下にまとめたり、ログならlogs/にまとめる、とかそういう。
変数名どうするかとか、クラス名どうするかとか、パッケージどうわけるかとか、そういったのと同じ。

あと、パソコン初心者()じゃないんだから、「エラー」じゃなくて、そのエラーの内容からちった判断しれw
0761nobodyさん2012/02/26(日) 19:45:32.43ID:???
>>760
>現在のカレントディレクトリがどこかを確認しれ。

どうしてこれをやらなかったのかorz
file(getcwd().'/test/test.txt');
であっさり解決しました。人に聞く前に確認しろとorz
完全にあまえでした、すみません。

ファイルの配置のお話も勉強になりました。
見られておkなのでルート直下にディレクトリつくって放り込みました。

>そのエラーの内容からちった判断しれw
恥ずかしいですほんとにorz
「そんなファイルないよ」ってエラーでした。

あーだこーだやってたのが解決してとてもすっきりしました。
親切に教えていただいて、本当にありがとうございました。
0762nobodyさん2012/02/26(日) 21:35:39.39ID:???
yiiでお気に入りの機能とかありますか?
あと、これをこうしたら、すごく便利になったとか
0763nobodyさん2012/02/29(水) 11:54:14.13ID:???
Yiiは日本では流行らないよ
このスレの住民は初心者に対して高圧的な奴が多いから
0764nobodyさん2012/02/29(水) 14:41:37.99ID:???
高圧的だからとかそういう理由で選ぶもんじゃないけどなw
0765nobodyさん2012/02/29(水) 17:23:22.19ID:???
2chの人が優しければ流行るのか?
0766nobodyさん2012/02/29(水) 23:42:39.00ID:Ha59kcRM
>>763
個人的にはそういう奴を見つけたらソフトに排除するようにしてるんだけどね

そもそも2chの影響力なんてほとんどないっていう根本的なところに気付くべき
結局、日本語の情報が少ないのが原因でしょ
0767nobodyさん2012/02/29(水) 23:49:06.05ID:???
ほらな
初心者の質問がきても威嚇攻撃するから流行らない
結果、利用者がいなくて日本語の情報も少ない
■ このスレッドは過去ログ倉庫に格納されています