Yiiのノウハウ


(Mocapapa) #1

Yiiのノウハウを蓄積したいです。とりあえず以下のところに少々ありますが、他にあれば教えてください。

http://choco-moca.pu…org/wp/?cat=26


(system) #2

http://www.yiiframew…m/doc/cookbook/

クックブック追加されましたね。

フォーラムのアカウントで誰でも投稿出来るみたいですが

自分はまだ披露出来るようなネタが無いです ::)

hangmanのソース読んで、CHtmlヘルパーのlinkButton()とか自動で

jQueryと連動したボタン作ってくれるのに今さら気づいてビビッてる所です。


(Mocapapa) #3

cookbookに近日中に投稿する予定です。テーマはblogでも取り上げたhighslideです。

hangmanのソースを読まれているんですね。私はまだblog demoしか読んでいません。でもリレーションがまだ使えるようになっていません。


(Mocapapa) #4

Quote

cookbookに近日中に投稿する予定です。テーマはblogでも取り上げたhighslideです。

cookbookに投稿しました。不備、不明点等があればお知らせください。

http://www.yiiframew…oc/cookbook/12/


(system) #5

highslideイイですね。

思わず写真サイトとか作ってみたくなりました :D

僕はソースフォージにあるSQLiteマネージャーが使いにくかったので

もしフレームワークの中にデータベースマネージャーがあったら

メイン画面を見ながらDBテーブル構成も作成出来て最強じゃん??って思って

SQLiteマネージャー的な機能をYiiにぶち込もうとしてます ;D

まだSQLiteが直接サポートしてないのでALTER TABLEとか入れるのに手間取ってますが

全テーブル名一覧と、各テーブルのステータス作成に使われたSQLが

一覧出来る様になりました。

Posted Image

SQLiteじゃyなくて、phpMyAdminみたいにMySQLでやれば需要ありそうですが・・・。


(Mocapapa) #6

とてもいいですね。

私もblog demoを試験するのにMySQLに変えればphpMyAdminが使えるものの、

  • (MySQLでは)ユーザ名、パスワードが露わになる
  • (SQLiteでは)データも含めてgoogleに登録できる

ことからSQLiteをコマンドラインから使用していました。

phpSQLiteAdminのようなものがあったようですが、開発が止まっていたと思います。こういうものがあれば便利で良いですね。:)


(Mocapapa) #7

ブログデモのエンハンスを連載 :)していますが、ウィジェットの開閉ができるようなjavascriptを開発しました。よろしければお試しください。

ミソは、単なる開閉ならjqueryで数行でできるのですが、ページ遷移の際に状態を忘れてしまうのが欠点でした。今回はpersistJSを使用してクライアントサイドにその状態を記憶することでウィジェットの開閉の一貫性を持たせたことです。

// ああ日本語だと説明しやすいなぁ

http://www.yiiframew…msg5130#msg5130


(Mocapapa) #8

ドキュメントを訳していて得たノウハウを記しておきます。

ドキュメント’basics.component’にビヘービアの章が追記されました。ビヘービアは1.0.2からサポートされました。以下のMixinをサポートするためのもののようです。

[quote=wikipedia]Mixinとはオブジェクト指向プログラミング言語において、サブクラスによって継承されることにより機能を提供し、単体で動作することを意図しないクラスである。Mixin からの継承は、特化の一形態ではなく、むしろ機能を他のクラスから集めるための手段である。あるクラスは多重継承により複数の Mixin クラスから継承を行って、大半の機能を継承によって実現することができる。(略)
[/quote]


(system) #9

はじまして、uniomといいます。

1年以上のSymfony経験者なのですが、Symfonyと比べてYiiはどんな感じかなと思い、

これから触ってみようと思います。

ドキュメントの翻訳もお手伝いできればと思います。

よろしくお願いします :)


(Mocapapa) #10

1年以上のSymfonyですか、すごいですね。私はSymfonyは最初で挫折しました。デモレベルがうまく動作しなかったので。

その後CIをトライしてデモがすんなり動いたのでしばらくCIを勉強していましたが、ちいたんを経てYiiに至っています。よろしくお願いします。


(Ich Jin) #11

はじめまして、Ichijinと申します。

Yiiを使い始めて7カ月になります。

Symfonyより手軽でCakePHPよりわかりやすい?との印象ですでに実用にも使っているのですが、なにせネットでの検索対象としてはひどく少なく(自分も知れたことを発表していないのですが)て、時々困惑させられます。

今悩んでいるのは、rulesの使い方にほとんど実例が見つからない、ということ。フレームワークを使うのは、こうしたValidateが完備しているからこそだと思っていますが、実例が少ない。

どこかにrulesの実例を発表しているサイトがあれば、教えてください。

特に困っているのが、チェックボックスなどで複数選択した場合のrulesです。INでも、lengthでもエラーが出てしまいます。

INの場合:プロパティ "CRangeValidator.0" が定義されていません。 ※0って何か不明。

lengthの場合:strlen() expects parameter 1 to be string, array given

必須のために使っているわけではなく、エラーが発生した場合の値を保持するためで、フレームワークの便利なところなのでしょうが。

よろしくお願いします。


(Hana1998) #12

Ichijinさんはじめまして。

> 特に困っているのが、チェックボックスなどで複数選択した場合のrulesです。INでも、lengthでもエラーが出てしまいます。

実際にどんなコードを書いてます?

rules()の中身と、viewのコードとか教えてもらえれば、なんかわかるかもしれないです。


(Tmsongbooks215) #13

現在、Yiiの日本語公式ガイドを見ながら

『リレーショナルアクティブレコード』について学んでいますが

わからない点や確認したいことがいくつかあります

[color="#FF0000"]Yii1.1.4でdbはMySQLの場合[/color]

[size="3"]1. 『MyISAMエンジンでもリレーションARができてしまうのはなぜか』[/size]

公式ガイドでは

『1.0.1版からはデータベースに外部キー制約が定義されていない場合でもリレーショナルARを使用することができます』、と書いてありますが

これは1.0.1版以降はMyISAMだろうがInnoDBだろうが、リレーションARができるよってことでしょうか

その後に、ER図を挟んで、

『情報: 外部キー制約のサポートはDBMS毎に異ります…』という情報があり混乱しています

実際MyISAMでやるとできるのですが、自分の解釈はあっているのか不安です

[size="3"]2. 『リレーションされた2つのテーブルのcolumn名の分け方はどのようにするのか』[/size]

例えば

users, wordsという2つのテーブルがあり

usersにはid, username, password, email

wordsにはid, user_id, eng, jpnというcolumnがあるとします

models/Wordsのrelations()に


'users' => array(self::BELONGS_TO, 'Users', 'user_id'),

とした場合、controllers/WordsControllerのactionIndexにてusersの特定のusernameを取得するには現在




public function actionIndex() {

    $models = Words::model()->with(array('users' => array('select' => 'username')))->findAll(array(

        'select' => 'id, eng, jpn',

        'condition' => 'user_id = ' . Yii::app()->user->id,

        'order' => 't.id ASC',

     ));


  $this->render('index', array(

        'models' => $models

    ));

}



としています

ただ、『‘select’ => ‘id, eng, jpn’ 』部分のidは

words, usersテーブルふたつともにあるが、明確にしなくて良いのか

もうひとつ、『‘order’ => ‘t.id ASC’』部分のt.idとは何か、さっぱりわかりません

『words.id ASC』や『??.id ASC』など試して失敗し

いろいろ調べていて『t.id』というものを使っているのが目につき、やってみた結果たまたま上手くいったのですが

理解が全くできていないので、理解されている方、少しのヒントでもかまわないので、教えていただけないでしょうか

P.S alias, aliasTokenなども公式ガイドを読んでも理解できていない現状です…


(Mocapapa) #14

日本語公式ガイドが古いせいですね(私のせいです、すみません)。

とありますが、Yii 1.0までは’??.'であり、Yii 1.1からは’t.'となったと思います。従って、't.id’で動作するのは正しい動作です。詳しくは対応する英文のガイドを見てください。

ちなみに、原文には以下のように変更されたとありました。


(Tmsongbooks215) #15

すっきりしました

mocapapaさんありがとうございました

日本語訳に関しては誰のせいでもなく、むしろなかったら自分もYii触ってないので、逆に感謝でいっぱいです


(Tmsongbooks215) #16

[size="3"]実行されたSQL文を確認する方法[/size]

yii1.1.5を使用しています

applocationName/protected/config/main.php内の’components’ => array以降に




'log'=>array(

	'class'=>'CLogRouter',

	'routes'=>array(

		array(

			'class'=>'CWebLogRoute',

			'levels'=>'trace',

			'categories'=>'system.db.CDbCommand',

		),

	),

),



とするとウェブページの最後に実行されたSQL文が表示されますが

その他の別のやり方でSQL文を確認できる方法はないでしょうか?あれば教えてください

参考リンク

http://www.yiiframework.com/doc/guide/1.1/ja/topics.logging

http://www.yiiframework.com/forum/index.php?/topic/9924-logging-sql-queries-while-testing/


(Camixyui) #17

http://www.yiiframework.com/extension/yiidebugtb

上記のエクステンションは参考になるでしょうか?


(Tmsongbooks215) #18

yiidebugtb

ぱっと見、CakePHPでいうDebugkitみたいな感じでしょうか

extensionはまだ使用したことがないので

これを機に一度試してみたいと思います ありがとうございます!


(Tmsongbooks215) #19

CActiveRecord::rules()での[size=“3”][color="#8B0000"]‘safe’[/color][/size]の理解がなかなか得られないのですが

これはどういう意味があるのか、ご存知の方おられますか?

参考リンク

[Guide] Securing Attribute Assignments

[Wiki] Understanding "Safe" Validation Rules


(Tmsongbooks215) #20

[size=“3”][color="#8B0000"]CActiveRecord::rules()での’safe[/color][/size]'の件ですが、

必須ではなく、かつ、特定のバリデーションルールを持っていないものに対して行うものと、理解しました

訂正あれば、追加でコメント下さい