【PHP】Yii Framework
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/12/10(金) 00:41:11ID:???公式
http://www.yiiframework.com/
チュートリアル
ttp://www.yiiframework.com/doc/guide/
公式フォーラム
ttp://www.yiiframework.com/forum/index.php?/forum/21-japanese/
0632609
2012/01/28(土) 15:14:14.90ID:???確認の仕方が悪かったです。ありがとうございます。
idでmodule名を切り替え出来ました。
しかしmodelsやviewsを拡張していくことを考えるとやはり
moduleは直接編集していくのが本道なのかもという気がしてきました。
それを考えるとyii-userのprofilesの項目追加の仕組みがややこしいのも
CMSを提供するのと同時に、ソースを触らせない前提という意図もあるのかなと。
0633nobodyさん
2012/01/28(土) 15:44:12.26ID:rvnKSfbf意味分からんかったらごめん
0634nobodyさん
2012/01/28(土) 17:21:17.49ID:???CBaseListViewをextendsして独自に作っていく方法のほうがより好みのwidgetを作れます
jqueryとbbqをheadに貼り付けたくないだけなら、ここらへんを抜いたもんを上書きすればOK。まさにやってそうですけど
$cs=Yii::app()->getClientScript();
$cs->registerCoreScript('jquery');
$cs->registerCoreScript('bbq');
$cs->registerScriptFile($this->baseScriptUrl.'/jquery.yiilistview.js',CClientScript::POS_END);
$cs->registerScript(__CLASS__.'#'.$id,"jQuery('#$id').yiiListView($options);");
>>632
yii-userがどういうものを扱っているモジュールなのか考えれば
基本的な設定はconfig/main.phpで上書きするようにして
他は直接編集していく形をとるのがベストだと思います
あと、ビューはif文などに気を使いながら、直接編集していくものです。拡張もくそもない
でも前に言いましたが、yii-userは編集するリスクがかなりあるので、1から自分で作るほうが賢いやり方のように思います
0635nobodyさん
2012/01/29(日) 00:01:11.23ID:???0636nobodyさん
2012/01/29(日) 02:39:53.42ID:AvSKvvcH以下のような話に対応出来るという利点が一番大きいのかな
たしかにソースでデータベースの構造も構成管理出来るというのは納得できる利点なのかも
>ソースコードについて昔の状況が呼び出せてたとしても、それに依存するデータベースの状況も再現できなければまったく意味がないのです。
>これを実現するためには、従来はDDLを記述したファイルを直接コミットして管理するしかありませんでした。
http://www.atmarkit.co.jp/fdb/single/08s_jiemamy/jiemamy1.html
0638nobodyさん
2012/01/29(日) 14:10:01.28ID:???Wikiでまとめられてたけど
Cookieってそんな重要とされてないのかね
0639nobodyさん
2012/01/29(日) 14:35:08.80ID:???俺もガイドがないから、仕方なくソースから勉強した
0640nobodyさん
2012/01/29(日) 19:10:32.17ID:???echo $form->textField($model,'name',array('size'=>50,'maxlength'=>50,'value'=>"デフォルト値"));
上記のようにデフォルトの値を設定すると、
送信後エラーが起きてフォームに戻ってきた場合、
上書きしたデフォルト値が元に戻ってしまいます
上書きした値を使いたい場合どうしたらいいですか?
0641nobodyさん
2012/01/29(日) 19:52:30.40ID:???ビューに直接PHPコードを書く方法
http://www.yiiframework.com/forum/index.php?/topic/16737-form-input-default-value-overrides-model-value/
モデルをnewしたときにデフォルト値を入れておく方法
http://www.yiiframework.com/forum/index.php?/topic/11960-preferred-way-to-set-dynamic-default-values-in-a-cactiverecord-model/page__view__findpost__p__58656
ここらへんが参考になるんじゃないでしょうか
0642636
2012/01/29(日) 21:12:56.09ID:AvSKvvcHまんまARの利点として言えるんじゃないかと思うんだがどうだろう
※記事の内容はARとは直接的に関係ない
http://objectclub.jp/community/XP-jp/xp_relate/evodb-jp
>データベースアクセスコードを明確に分離する
>データベースリファクタリングの影響を把握するためには、データベースがアプリケーションによってどのように使われているかを調べることが可能でなければならない。
>SQLがコード達の中に乱雑に散らばっているならば、調査は非常に困難になる。
>つまり、データベースがどこでどのように使用されているかを明らかにするために、明確なデータベースアクセス層を設けることが重要になる。
>データベースアクセス層を設ける際にはPofEAAの中からデータソースアーキテクチャパターンのどれかに従うことを勧める。
ちなみに上記で言及されているPofEAAにもARが紹介されている
http://capsctrl.que.jp/kdmsnr/wiki/PofEAA/?ActiveRecord
業務系開発の中では意外と歴史があるらしく、ここら辺の書籍を読むことで経緯なんかも深く知ることが出来るのかもね
0643nobodyさん
2012/01/29(日) 23:42:45.59ID:hr7RMRmtcategory1 | category2
id name | id name price category1_id
1 果物 | 1 りんご 300 1
2 野菜 | 2 みかん 200 1
上記のsqliteのデータベースにある2つのテーブルから
id name price
1 果物 500
2 野菜 0
のように取り出したいとき
SQLで書くと
SELECT id, name, price FROM category1 c1
LEFT JOIN (
SELECT SUM(price) AS price, category1_id FROM category2
GROUP BY category1_id
) c2 ON c1.id=c2.category1_id
という感じになるのですが、このSQLをARで書く場合
$criteria=new CDbCriteria;
$criteria->select=array('id','name','price');
$criteria->join='
LEFT JOIN (
SELECT SUM(price) AS price, category1_id FROM category2
GROUP BY category1_id
) c2 ON c1.id=c2.category1_id
';
$cat=Category1::model()->find($criteria);
のような感じに書いたのですがjoinの中をもっと簡単に書けないでしょうか?
0644nobodyさん
2012/01/30(月) 01:19:36.01ID:???これでやっちゃうとか
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#findAllBySql-detail
0645nobodyさん
2012/01/30(月) 05:21:55.39ID:???'select'=>'SUM(price) as price',
'group'=>'category1_id'
));
これでいけたりするんかいな?
0646nobodyさん
2012/01/30(月) 05:53:09.13ID:???findAllBySql()で良いんじゃないですか?
0647nobodyさん
2012/01/30(月) 20:07:10.18ID:???そもそもSQL自体こうだろ。
SELECT c1.id, max(c2.name), sum(c2.price)
FROM category1 c1
LEFT JOIN category2 c2 ON c1.id=c2.category1_id
GROUP BY c1.id
SQLよく知らないのにAR使うのは百害あって一利なしだからやめといた方がいい。
0648nobodyさん
2012/01/30(月) 21:09:49.76ID:???category2を外部結合してるから、c2.priceがnullだと、sum(c2.price)もnullになっちゃうよ?
0650nobodyさん
2012/01/30(月) 23:18:57.78ID:???だったらふつーは
sum(NullToZero(c2.price))
みたいにするよね。どう考えてもああはならん。
>>649
その認識はマジで改めた方がいい。
0651nobodyさん
2012/01/30(月) 23:50:08.15ID:???0652nobodyさん
2012/01/30(月) 23:54:50.25ID:???でもそのうち絶対壁にぶち当たるか、失敗する。
んで、ちゃんと勉強しておけばよかったと思うものさ。
0653nobodyさん
2012/01/31(火) 01:06:10.85ID:???0654nobodyさん
2012/01/31(火) 02:10:02.03ID:???表面上の言葉だけで議論しても意味ないっす
0655nobodyさん
2012/01/31(火) 03:24:00.33ID:???nameはナチュラルキーでUNIQUE NOT NULLだろうから、idと一対一つまり
複合UNIQUEとみなしてGROUP BY c1.id, c1.nameのようにしてはいけないの?
0657nobodyさん
2012/01/31(火) 20:05:03.72ID:???safeはどんなケースで利用するものですか?
validateで何も制限をつけないときに
書いてますが使い方間違ってないですかね?
0658nobodyさん
2012/01/31(火) 20:11:34.34ID:???0659nobodyさん
2012/01/31(火) 20:17:47.83ID:???0660nobodyさん
2012/01/31(火) 21:53:33.07ID:LWh8fO+Y0661nobodyさん
2012/01/31(火) 22:01:16.11ID:LWh8fO+Y俺もどんなケースでってのが思いつかないな
safeはルールを持ってない属性において、
$model->attributes = $_POST['model'];
で値を保存していいかどうかってことだよね?
基本的にフォームから受けとりたくない値が特別無い限りはその使い方でいいと思ってるんだけど
0662nobodyさん
2012/02/01(水) 17:10:34.37ID:???そこらへんを見ていくとわかるんじゃないでしょうか
0663nobodyさん
2012/02/05(日) 03:14:13.74ID:G96rv1NIたまたま見つけたからテンション上がった
http://www.skillshare.com/careers
>Developer
>Back-end development using PHP (Yii Framework) and MySQL, following best coding practices
0664nobodyさん
2012/02/12(日) 16:50:24.77ID:Qlu7hyjhそういう風に記述されているextensionがあったんだけど、
これだと他のextensionのpostFilterが呼び出されないことにならないか心配してる
class AnyFilter extends CFilter {
protected function preFilter($filterChain) {
$filterChain->run();
$this->postFilter($filterChain);
}
}
0665nobodyさん
2012/02/12(日) 19:04:19.10ID:9VDZvfC5基礎がわかる本とかサイトとかないでしょうか
0666nobodyさん
2012/02/12(日) 20:00:21.50ID:???0667nobodyさん
2012/02/12(日) 20:07:22.32ID:???0668nobodyさん
2012/02/12(日) 20:39:49.70ID:???英語ですか……学生時代もっと頑張っておくんだったなぁ
>>667
探してみます。ありがとうございます。
0669nobodyさん
2012/02/12(日) 20:59:01.29ID:9VDZvfC5思い切って注文しました。辞書を片手に頑張ります
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:???0674nobodyさん
2012/02/13(月) 01:37:37.52ID:???0675nobodyさん
2012/02/13(月) 02:13:55.51ID:???ガイド、チュートリアルの順にやりました
書き方が悪くて混乱させてしまったようで申し訳ないです
今はyii for beginnerという記事を読んでいますが
他に基礎がまとまってるページなりサイトなりあれば教えて頂きたいです
0676nobodyさん
2012/02/13(月) 03:35:40.24ID:???セットアップがちょっと難しかったけど、メールのテンプレート機能で携帯用と使い分けられるのが良い
0677nobodyさん
2012/02/13(月) 18:09:25.18ID:???0678nobodyさん
2012/02/14(火) 00:44:08.18ID:CHG2KmQT今度は早かったな
0679nobodyさん
2012/02/14(火) 01:05:36.74ID:CHG2KmQThttp://www.yiiframework.com/doc/guide/1.1/ja/topics.url#sec-9
翻訳も早くて感謝です
0680nobodyさん
2012/02/14(火) 02:33:19.28ID:???これってBlogとかでよくある、
ブログタイトルをURLに含めるようなものが簡単に
出来るということだよね?
0682nobodyさん
2012/02/14(火) 09:45:04.56ID:???二つ以上のパラメータをURLに仕込んでDBに問い合わせてその結果次第で任意のページを返せるしさ
まぁ普通はコントローラ側でこう言う事をやるわけだけどね
0683nobodyさん
2012/02/14(火) 09:53:20.39ID:???SEO対策ってやつ?
0684nobodyさん
2012/02/14(火) 15:54:04.76ID:???'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:jJ6oNY1vJavaScriptが埋め込まれてるページにアクセスした場合、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:???Cakeで不便に思うところがなければ捨てるのもったいないし
Cakeで不便に思うところがあっても、Yiiで解消されてないなら乗り換える意味ないよ。
0691nobodyさん
2012/02/15(水) 14:13:55.27ID:???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:???Yiiの方がYii
理由は速さ、思想が優れていること
0694nobodyさん
2012/02/15(水) 16:17:53.50ID:???0695nobodyさん
2012/02/15(水) 20:23:43.02ID:???0696nobodyさん
2012/02/16(木) 00:39:02.08ID:???ここらへん参考になるかもです
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おお、ありがとう
とりあえずサイズの大きい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:???falseの場合jquery.min.jsを呼び出すので、そこらへん注意してくだいね
0699nobodyさん
2012/02/17(金) 00:10:51.42ID:???0700nobodyさん
2012/02/17(金) 15:06:04.29ID:???0701nobodyさん
2012/02/17(金) 16:37:22.68ID:???検索で複雑なsqlが必要なんでARつかうよりDAOの方が便利そうだと思ったから。
パラメータ数も上限するから :id とかでバインドするのが面倒だった。
結局、自己解決して
普通にpdoと同じやり方で出来ました。
0702nobodyさん
2012/02/18(土) 21:54:07.39ID:???0703nobodyさん
2012/02/18(土) 23:01:01.44ID:???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:???ウィジェットを使って表示しているのを見てポカーンです。
ウィジェットの使い方を知りたいです。
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:kzCubFZM0709nobodyさん
2012/02/19(日) 05:06:59.32ID:???0710nobodyさん
2012/02/19(日) 10:33:48.34ID:Np7bOdr0CListViewです、ありがとうございます!
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:Np7bOdr0YKかwwwwww
聞いてくれていいんだけど遠慮してる?
0714nobodyさん
2012/02/19(日) 13:52:40.38ID:kzCubFZM0715nobodyさん
2012/02/19(日) 14:36:30.21ID:???意図が全く見えない
0716nobodyさん
2012/02/19(日) 14:40:19.96ID:???0718nobodyさん
2012/02/19(日) 14:58:56.30ID:???同じ社内かよ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:???もともとYiiにはなかったんだけど
これはいいねってなってあとからコアに組み込むことになったんだそうですよ
どうでもいい話ですがw
0722nobodyさん
2012/02/19(日) 18:27:35.51ID:???方法を教えてくださいにゃん
0723nobodyさん
2012/02/19(日) 19:13:08.00ID:???0725nobodyさん
2012/02/19(日) 20:23:12.13ID:???state作成いたら成功した!
>>724
新しいscenario選択したらデフォルトのvalidateは利用されない仕組みなのかな
ちょっと試してみる!
二人ありがとYii
0726nobodyさん
2012/02/19(日) 21:01:16.48ID:???ただ、俺はvalidateの切り分け以外にscenarioを使うのはおすすめしないな
なんか前にもこんな話したよね
0727nobodyさん
2012/02/19(日) 23:31:59.69ID:???モデルでYii::app()->controller->action->idを使ってさ
あとはプロパティがempty時はこうする、とかさ。いろいろあるさ〜
0728nobodyさん
2012/02/19(日) 23:36:20.48ID:???0729nobodyさん
2012/02/19(日) 23:39:31.37ID:???0730nobodyさん
2012/02/20(月) 01:14:34.72ID:???modelのclass変数を作成して
それをsave()前に$model->state=falseとかした感じ
beforeSave()の中で$this->stateでifして処理振り分け
■ このスレッドは過去ログ倉庫に格納されています