tjtjtjのメモ

自分のためのメモです

yii

Yiiでも中間テーブルにアクセスしたい

またこのネタです。YiiFrameworkのCManyManyRelationは中間テーブルへのアクセスをサポートしていません。ならばオレオレリレーションによってそれを可能にしてみます。前エントリのまとめと反するのですが、まあ、あそびばってことで。 実現のためにCJoinEl…

Yiiで中間テーブルに属性を持たせたいときはHasMany, BelongsToを使う

YiiFrameworkのCManyManyRelationは中間テーブルへのアクセス手段を用意してくれません。なので、中間テーブルに属性を持たせたいときはHasManyとBelongsToを使うのが、今のところエレガントな解決方法のようです。 http://www.yiiframework.com/wiki/285/ac…

YiiFrameworkでPHPTALしてみた

PHPTALやってみようかと思ったので、YiiFrameworkで動くPHPTALViewRenderer作ってみた。 インストール PHPTAL phptalとかgithubからzipをダウンロードし解凍し、classes ディレクトリ下の PHPTALディレクトリと PHPTAL.phpを prorected/vendor/PHPTAL へコピ…

yiiのアクセス制御を学ぶ yii-rightsを導入するの巻

前エントリのロール管理はこれでもロール管理かという代物でした。今回はyii-rightsを使いGUIで管理できるようにします。blogデモにyii-rightsを組み込んだソースやデモも用意されている。手っ取り早く確認したいならはここから。 導入 とりあえずドキュメン…

yiiのアクセス制御を学ぶ アクションで権限チェックしないの巻

前エントリで触れなかったupdateOwnPost関連のアクセス制御について。アクションに書いてしまいがちな権限チェックをフィルタに書いてアクションをシンプルに保っていきたい。 パラメータ付き権限アイテム ここの図でupdateOwnPostを再確認する。updateOwnPo…

yiiのアクセス制御を学ぶ CDbAuthManager導入の巻

ロールベースアクセスコントロール(RBAC)を導入するのは面倒で後回しにしてきました。ロールのデザイン、ロール管理の実装、ユーザー管理の実装、権限付与の実装には時間がかかりそうで躊躇してしまうのです。そこでこれらをできる限り省略してRBACを導入す…

blogデモにユーザー管理機能を設ける

blogデモにユーザー管理機能を追加したときのメモ。gii-Crud GeneratorでUserモデルメンテナンス機能を生成し、生成したコードを調整します。 Userモデルメンテナンス機能を生成する gii を有効にする ついでにgiiにたどり着けるよう urlManager も調整する…

yiiのアクセス制御を学ぶ ログインの巻

YiiFrameworkのアクセスコントロールを学習したときのメモ。 ログインから始めロールベースアクセスコントロール、YiiRightsに辿り着きたい。素直にcookbook買うべきなのかもしれない。 ログイン ユーザー認証。これがなくちゃ話にならない。最初に注意すべ…

yiiext/twig-renderer でビューをフラグメントキャッシュしたい

{{void(...)}}でなく{%do...%}で 前のエントリで{{void(this.endWedgit)}}と書きましたが、{%do this.endWidget %}でいいことがわかり修正しました。ごめんなさい。 フラグメントキャッシュとは フラグメントキャッシュはページの断片をキャッシュする事を指…

yiiext/twig-rendererのビューで独自の書式を使いたい

twig-rendererのfiltersに関数を指定するとtwigのfilter構文でその関数が使えるようになります。twigのfilterとバッティングしたらどうなるんだろ。 こんな感じ。 'viewRenderer'=>array( 'class'=>'ext.etwigviewrenderer.ETwigViewRenderer', 'filters' =>…

yiiext/twig-rendererのビューでメッセージを扱いたい

これをどうするか 'hoge')); ?> Yii クラスをアクセス可能にする Yiiクラス を globals に登録するprotected/config/main.php 'viewRenderer'=>array( 'class'=>'ext.etwigviewrenderer.ETwigViewRenderer', 'globals' => array( 'Yii' => 'Yii', ), ),ビュ…

yiiext/twig-rendererでページの一部分をテンプレート化したい

yii は $this->rendarPartial ですが、Twig はincludeタグで書きます。 renderPartial('_view', array('data'=>$model)); ?> ↓↓↓↓↓ {% include '/views/post/_view.twig' with {'data':model} %} 見たまんま書き換えできると思います。そしてrenderPartialで…

yiiext/twig-rendererでビューテンプレートを継承したい

追記 2012.03.15 やだなーと思っていた{{void(...)}}ですが、{%do...%}で書くべきと気がつき、修正しました。 yiiのスケルトンappでは ページレイアウトの大枠を layouts/main.php、内部のカラム構造を layouts/column1.php, column2.php に実装しています。…

yiiext/twig-rendererでWidgetを使いたい

追記 2012.03.15 やだなーと思っていた{{void(...)}}ですが、{%do...%}で書くべきと気がつき、修正しました。 ほぼ前のと同じですが、素直に this.beginWidgetでもうまくいきました。 前の{% set form = this.createWidget() %}...{{ form.run }}は何かの役…

yiiext/twig-renderer

beignWidget/endWidgetでも書けます。->こちら ここのcreateWidget/wedgit.run は何かの役に立つ(アンチパターンとか)かもしれないので残しておきます。 検証中のコードですがおいておきます。 {% set form = this.createWidget() %} すればwidgetをあきらめ…

モデルを使わないCGridViewサンプル

続いてモデルを使わずzii.widgets.CGridtViewを使ってみる。 サンプルコード ボタンカラムは、データ各要素にprimaryKeyプロパティを要するのでコメントアウトしています。もちろん回避する方法はあるだろうが今回そこまでやらない。protected/controllers/S…

モデルを使わないCListViewサンプル

モデルを使わずzii.widgets.CListViewを使ってみる。 CListViewで何が得られるのか検証したかったのですが、モデルを用意するのが面倒だったので書きました。 サンプルコード protected/controllers/SiteController.php 1, 'title'=>'アルファ', 'create_tim…

モデルを使わないCDetailViewサンプル

zii.widgets.CDetailViewて何を出力するんだっけ。モデルを使わないサンプルコードを書いてみた。 サンプルコード "たいとる", "owner" => (object) array( "id"=>"owner.id", "name"=>"オーナーの名前", ), "description"=>"<b>descriptiondescription</b>", "city…

UnphptagViewRenderer作ってみた その2

前エントリの続き。 新たに3つのタグ *{}, @{}, @part{} をサポートしてみました。つっても置換を足しただけですが。 UnphptagViewRenderer.php * array( * 'components'=>array( * ...... * 'viewRenderer'=>array( * 'class'=>'path.to.class.UnphptagVie…

UnphptagViewRenderer作ってみた

yiiのviewにあふれるPHPタグがなんとかならんかと思い作ってみたwww。使いかたはコメント参照。 * array( * 'components'=>array( * ...... * 'viewRenderer'=>array( * 'class'=>'path.to.class.UnphptagViewRenderer', * ), * ), * ) * </pre> * * echo: * %{ Y…

yiiカイドを横断してみる リレーション(3/3) - テスト

今回は作成したテーブルにデータを登録し、モデルからDBのデータにアクセス可能かユニットテストを使って検証します。とりあえずテスト概要を読んでおいてください。PHPUnitをインストールしていなければしといてください。 テスト計画 まずどんなテストをす…

yiiカイドを横断してみる リレーション編(2/3) - モデル作成

今回はモデルを作ります。 Gii準備 yiic shell のコード生成機能は、バージョン 1.1.2 以降、非推奨(depricated)となっています。 http://www.yiiframework.com/doc/guide/1.1/ja/quickstart.first-app-yiic とのことなのでyiicを使わずGiiを使ってモデルを…

yiiカイドを横断してみる リレーション編(1/3) - テーブル作成

初見の人がリレーショナルアクティブレコード - ガイドをみてテーブルを作成しモデルを作成しリレーション定義しそれを検証できるんだろうか、ガイド記事は断片的過ぎやしないか、横断的なまとまった情報ほしいなあ、と思い書いてみました。。 yiiのカイドペ…

リレーショナルアクティブレコードを使ってみる

yii1.1.8 リリースとともにガイドのリレーショナルアクティブレコードページが更新され、英語ガイドページとの同期が取れました。これまで、日本語ガイドと英語ガイドを行き来して面倒だったんです。翻訳の皆さんありがとうございます。リレーション宣言で特…

データベースマイグレーションを使ってみる(2)

昨日の続き テーブルプレフィックス console.php で tablePrefix を指定したとき、マイグレーションのテーブル名を「{{」「}}」で囲むと、プレフィックスつきでCREATEしてくれました。 array( : 'db'=>array( : 'tablePrefix' => 'test_', ), ), ); c…

データベースマイグレーションを使ってみる

使い方はガイドをみれば大体わかるはず。なので、ちょっと引っかかったことを残します。 接続先はconsole.phpのDB yiic migrate は webapp/protected/config/console.php の DB を使う。yiic model は main.php の DB を使ったので油断してました。 カラム型…

ファイルアップロード

yiiでファイルアップロードしてみる。アップロードしたファイルはMySQL BLOBに保存する。 テーブルを作る create table `file` ( `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` varchar(255) not null, `type` varchar(64) not null, `size` fl…

モデルのモックを使ってテストしたいのだが

うーん。yiiへの期待のひとつに、PHPUnitが使えてPHPUnitのモックを利用できることがあったのですが、厳しい感じです。id:hiromi2424:20110306 にあるような、サービスレイヤを設けたいのです。がががががががががが、Yiiは、CakePHPのClassRegistryのような…

モデルのテスト

今日も粛々とyiiする。 yiic で生成したモデルをテストする必要はないと思いますが、サンプルとして残しておきます。 Saveのテスト テストケース yiiprac1\protected\tests\unit\UserTest.php にtestSaveメソッドを加える。 'User', ); public function test…

Yii PHP framework 1.1.7

Yii PHP framework 1.1.7がリリースされました。 Yii PHP framework 1.1.7 is released RESTful URL Support Query Caching Parameter Binding for Class-based Actions Seamless Client-side Validation Passing Parameters to Relational Named Scopes Usi…