【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/
0588nobodyさん
2012/01/25(水) 19:11:55.85ID:???その時はもうindex.phpありでいいやで妥協しましたが
これ何が原因なんでしょうかね。Apacheのバージョン?
0589nobodyさん
2012/01/25(水) 19:25:30.26ID:YwP4y9rdYii全く関係ないじゃん
0590nobodyさん
2012/01/25(水) 19:49:43.53ID:???0591nobodyさん
2012/01/25(水) 20:02:54.58ID:???0592nobodyさん
2012/01/25(水) 20:35:04.64ID:???スペル怪しいけどw
0593587
2012/01/25(水) 21:59:53.64ID:???[Wed Jan 25 21:32:44 2012] [error] [client 66.249.69.201] mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary
ループしているみたいですかね・・・?
ただCakePHPのときもさくらインターネットでは同じエラーが出ていました
http://blog.syuhari.jp/archives/2056
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=76&forum=2
↑これと同じだと思います。
このときは RewriteBase をいじって解決したので
今回もいろいろいじっているのですが、全然だめです
>>588さん以外にもレンタルサーバーで利用している方いそうですけど、
どうやって解決しているんでしょうかね・・・
0595nobodyさん
2012/01/25(水) 22:25:49.17ID:???ちゃんとレス内容までは見てないけど、単に設定ミスでしょ
Yiiと関係ないからスレチだけど
0596nobodyさん
2012/01/25(水) 22:30:53.35ID:???0598587
2012/01/26(木) 00:53:49.69ID:???そのサーバと同じとこに乗せてエラー出てるの
でYiiが原因か、Yiiに詳しい人ならわかるかなぁと思って・・・すいません
0599nobodyさん
2012/01/26(木) 01:05:58.94ID:???Internal Sever Errorがどういうときに出るのかを調べたほうが良いかも
スペルミスしてない?
とりあえずYiiが原因では無いと思うよ
0600nobodyさん
2012/01/26(木) 07:48:27.99ID:???何得意げになって書いてんの?www
0601nobodyさん
2012/01/26(木) 11:30:37.83ID:???0602587
2012/01/26(木) 11:33:01.61ID:???>>587を見てもらえればわかるようにスペルミスではないはずです。
とりあえずさくらインターネットのスレに行ってみます。
あっちでもスレ違いだって言われそうだけど・・・
ありがとうございました
0603nobodyさん
2012/01/26(木) 12:43:52.75ID:???さくらスタンダードなら>>587の.htaccessの設定でエラーは出ないはず。
>>587のYiiの設定が原因くさいと思うぜ。
>>587が悪いのは、素のYiiをインストールしてデフォルトのloginあたりのurlでも
internal server errorが出るかどうか
(http://something.sakura.ne.jp/example.com/site/login)
を確かめもしないで、自分が「作った」アプリであれこれパニクってる点。
0604nobodyさん
2012/01/26(木) 12:45:17.60ID:???Yiiスレでエラー切り分けを問いたいなら、そういうところをちゃんと書くべし。
0605587
2012/01/26(木) 13:27:32.58ID:???助言のとおり
http://example.sakura.ne.jp/exmple.com/site/login
で見ると正しく表示されました。
原因はドメインでアクセスするときにあるようです。
http://example.com/site/login
このURLでアクセスするとInternal Server Errorになるので。
ドメインでアクセスするときに、htaccessがどう動くかもっと調べてみます。
Yiiが原因ではなさそうなので、退散します!
スレ汚し失礼しました!
0606nobodyさん
2012/01/26(木) 14:46:59.49ID:???/home/ユーザ名/www/example.com
が別ドメインのdocルートだっていう情報を提供せずにいたのが痛いわけだが、
それはともかく、
http://example.com/site/loginでのそのInternal Server Errorは、単純に
.htaccessの
Rewritebaseが
/example.com
になっているからに過ぎないと思うね。
Rewritebaseは/(URLパスルート)じゃなきゃいけないでしょ。そういう場合は。
まあスレ汚しにスレ違いのレスをするのもなんだけどさ。
0608nobodyさん
2012/01/26(木) 14:59:25.18ID:???0609nobodyさん
2012/01/26(木) 15:56:04.19ID:???皆さんは直接ファイルを編集していますか?
それとも別moduleを作成してuser-moduleをオーバーライド
してますか?
0610nobodyさん
2012/01/26(木) 16:06:14.49ID:???0611609
2012/01/26(木) 16:08:47.08ID:???言葉足りなくてすみません
yii-userというuser管理moduleのことでした
http://www.yiiframework.com/extension/yii-user/
0612nobodyさん
2012/01/26(木) 16:10:57.85ID:???出来合のクラスを直接書き換えるというのは愚。
0614nobodyさん
2012/01/26(木) 17:34:05.28ID:???多分yii-userをカスタマイズしていくとわかりますが、けっこう大変ですよ
0615609
2012/01/26(木) 18:02:36.06ID:???やっぱそうなんですか
経験があまり無いので色々試してみようかと思います
別moduleを作成してyii-userをextends
>>613
ユーザの管理画面がすぐ完成するのが便利かと
プロフィール編集とか
0616nobodyさん
2012/01/26(木) 18:14:32.07ID:G7JApHSthttp://symfony.com/doc/2.0/book/http_cache.html
symfony詳しくないけど、ここら辺の機能はないな
0617609
2012/01/26(木) 21:24:35.58ID:???難しいものですね
module内でextendsしたmodule名が呼ばれていたり
結局moduleを直に書き換えているのとあまり変わらないような
この辺のノウハウというかヒントになりそうな情報があったら
教えて頂けるとありがたいです
0619609
2012/01/27(金) 00:25:22.09ID:???yii-user moduleを利用してます。
modules/user/UserModule.phpをYii::importしてから、modules/user/UserextModule.phpで
extendsしました。
これだとURLでindex.php?r=userext/profileを開くとmodelでエラーが出ます。
Yii::app()->getModule('user')->tableUsersのobjectが存在しないということらしいのです。
Yii::app()->getModule('userext')->tableUsersと書き換えれば通りますが、
結局元のmodelを書き換えてしまうことになります。
何かやり方がマズいようでしたら、こうした場合の良い方法があればヒントを頂きたく。
0620nobodyさん
2012/01/27(金) 00:57:23.52ID:???'modules' => array('user' => array('id' => 'userext'...ではダメですか?
0621nobodyさん
2012/01/27(金) 03:18:59.10ID:???自分の使いやすいように、moduleファイルを普通に修正すればよいと思う。俺はそうしてる。
0622nobodyさん
2012/01/27(金) 05:28:21.85ID:???yii-userの特定のクラスをextendsしようが
ファイルの中身を直接修正しようが、リスクはかなり大きいと思いますよ?
あと、ファイルの中身を直接修正するということは
yii-userがバージョンアップしても
それを使えない、もしくはextendsするより修正のリスクが大幅に上がることを考慮しないといけませんよ
0623nobodyさん
2012/01/27(金) 09:01:08.42ID:???自分が育てるという>>621な人も、>>612,>>622の考え方に立った上で
独自拡張していると考えたい。
とはいえ、結構ハードコーディングがあったりして>>617のように
>結局moduleを直に書き換えているのとあまり変わらないような
ということがあるのもわかる。
というわけで俺的方針。
(1)extends基本。
(2)「moduleを直に書き換え」と同じ手間っぽくて、かつ2,3の修正で済むなら
直接書き換えて、diffの履歴をとっておく。
(3)出力系の修正なら、置換用のラッパー作ってそれで対応。
(4)かなり変更が必要で、それでもそのモジュールを使い切りたい(バージョンアップにも
対応したい)場合=>(a)対象モジュールのクラス名称を全部かえて(シェルスクリプトを書く)
その後(b)自分の拡張モジュールでその対象モジュールクラス名を使う。
(4)で対応が出来ないようなら、使うのやめる。そこまで拡張が難しいなら今後も悩まされるはず。
ところで、>>609さん。>>619のケースなら、>>620さんの指摘でいけるんじゃないだろうか。
loadUserメソッドがわざわざモデルの変更を想定しているんだから。
0624609
2012/01/27(金) 14:10:16.57ID:???試してみましたが、挙動が変わらなかったです。
元々yii-userが考慮していないpropertyなのかもしれません。
色々方法やサンプルを探してみましたが、
moduleのextendsに関するものはなかなか出てこないです。
Yiiで制作されているオープンソースソフトウェアで
modulesのextendsしているものがあるか探してみようと思います。
無ければ、
>>623のdiffで取るやり方が正道なのかもしれませんね。
yii-userはバージョンアップの頻繁なmoduleのため、
直接編集すると大変そうですが。
>>622
>yii-userの特定のクラスをextendsしようが
>ファイルの中身を直接修正しようが、リスクはかなり大きいと思いますよ?
これはそもそもyii-userが日本向けサイトに向いてない作りという意味ですか?
0625nobodyさん
2012/01/27(金) 16:47:50.95ID:???class ProfileController extends Controller
public function loadUser()
{
if($this->_model===null)
{
if(Yii::app()->user->id)
$this->_model=Yii::app()->controller->module->user();
なんだから考慮してると思うんだけど。
0626nobodyさん
2012/01/27(金) 20:34:27.33ID:ujQCEknc(4)で対応が出来ないようなら、アップデートを諦めるじゃなくて?
0627nobodyさん
2012/01/27(金) 23:50:45.19ID:???http://code.google.com/p/yii-user/source/browse/#svn%2Ftrunk%2Fmodules%2Fuser%2Fmessages%2Fja
オフィシャルからのDLでは現在r107までのリビジョンなので、jaファイルは入ってません
あとここで少しデモれますよ
http://yii-user.2mx.org/
ユーザー登録する際は、アクティベーションのメールはfalseになっているので
ユーザ登録の流れなども確認できます
ログインの際に「ユーザ名が正しくありません」とか
「パスワードが間違っています」とか出るのはかなり痛いですがw
0630nobodyさん
2012/01/28(土) 00:24:59.90ID:???0631nobodyさん
2012/01/28(土) 12:29:44.71ID:???これをやめさせる方法ない?
今は無理矢理extendsして、
public function registerClientScript() {}
と空のfunctionをoverrideした
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氏みたいにルールを書いちゃう。
■ このスレッドは過去ログ倉庫に格納されています