yiiext/twig-rendererでWidgetを使いたい
追記 2012.03.15
やだなーと思っていた{{void(...)}}ですが、{%do...%}で書くべきと気がつき、修正しました。
ほぼ前のと同じですが、素直に this.beginWidgetでもうまくいきました。
前の{% set form = this.createWidget() %}...{{ form.run }}は何かの役に立つかもしれないので残しておきます。
サンプルコード
ポイント
void を利用して{% do %}でコントローラー pageTile, breadcrumbs に代入- Controller#setBreadcrumbs を追加する
- this.beginWidget の 戻り値を form に代入する
- this.endWidget は{% do %}
void中に書く
protected/views/site/login.twig
{% do this.setPageTitle(App.name~' - Login') %} {% do this.setBreadcrumbs({0:'Login'}) %} <h1>Login</h1> <p>Please fill out the following form with your login credentials:</p> <div class="form"> {% set form = this.beginWidget('system.web.widgets.CActiveForm', { 'id':'login-form', 'enableClientValidation':true, 'clientOptions':{ 'validateOnSubmit':true, }, }) %} <p class="note">Fields with <span class="required">*</span> are required.</p> <div class="row"> {{ form.labelEx(model,'username')|raw }} {{ form.textField(model,'username')|raw }} {{ form.error(model,'username')|raw }} </div> <div class="row"> {{ form.labelEx(model,'password') |raw}} {{ form.passwordField(model,'password')|raw }} {{ form.error(model,'password')|raw }} <p class="hint"> Hint: You may login with <tt>demo/demo</tt> or <tt>admin/admin</tt>. </p> </div> <div class="row rememberMe"> {{ form.checkBox(model,'rememberMe')|raw }} {{ form.label(model,'rememberMe')|raw }} {{ form.error(model,'rememberMe')|raw }} </div> <div class="row buttons"> {{ C.html.submitButton('Login') |raw }} </div> {% do this.endWidget %} </div><!-- form -->
void はphpコードが必要なとき多用するかもしれない。contactページではこんな感じで使います。すみません {% do ... %} でお願いします。
<?php $this->widget('CCaptcha'); ?> ↓ {{ void(this.widget('CCaptcha')) |raw }} ↓ {% do this.widget('CCaptcha') %}