Carsten Brandt
10 years ago
7 changed files with 778 additions and 6 deletions
@ -0,0 +1,454 @@
|
||||
テンプレートエンジンを使う |
||||
========================== |
||||
|
||||
> Note|注意: この節はまだ執筆中です。 |
||||
|
||||
デフォルトでは、Yii は PHP をテンプレート言語として使いますが、[Twig](http://twig.sensiolabs.org/) や [Smarty](http://www.smarty.net/) などの他のレンダリングエンジンをサポートするように Yii を構成することが出来ます。 |
||||
|
||||
`view` コンポーネントがビューのレンダリングに責任を持っています。 |
||||
このコンポーネントのビヘイビアを構成することによって、カスタムテンプレートエンジンを追加することが出来ます。 |
||||
|
||||
```php |
||||
[ |
||||
'components' => [ |
||||
'view' => [ |
||||
'class' => 'yii\web\View', |
||||
'renderers' => [ |
||||
'tpl' => [ |
||||
'class' => 'yii\smarty\ViewRenderer', |
||||
//'cachePath' => '@runtime/Smarty/cache', |
||||
], |
||||
'twig' => [ |
||||
'class' => 'yii\twig\ViewRenderer', |
||||
'cachePath' => '@runtime/Twig/cache', |
||||
// twig のオプションの配列 |
||||
'options' => [ |
||||
'auto_reload' => true, |
||||
], |
||||
'globals' => ['html' => '\yii\helpers\Html'], |
||||
'uses' => ['yii\bootstrap'], |
||||
], |
||||
// ... |
||||
], |
||||
], |
||||
], |
||||
] |
||||
``` |
||||
|
||||
上記のコードにおいては、Smarty と Twig の両者がビューファイルによって使用可能なものとして構成されています。 |
||||
しかし、これらのエクステンションをプロジェクトで使うためには、`composer.json` ファイルも修正して、これらのエクステンションを含める必要があります。 |
||||
|
||||
``` |
||||
"yiisoft/yii2-smarty": "*", |
||||
"yiisoft/yii2-twig": "*", |
||||
``` |
||||
|
||||
上のコードを `composer.json` の `require` セクションに追加します。 |
||||
変更をファイルに保存した後、コマンドラインで `composer update --prefer-dist` を実行することによってエクステンションをインストールすることが出来ます。 |
||||
|
||||
Twig |
||||
---- |
||||
|
||||
Twig を使うためには、`.twig` という拡張子を持つファイルにテンプレートを作成しなければなりません |
||||
(別のファイル拡張子を使っても構いませんが、それに対応してコンポーネントの構成を変更しなければなりません)。 |
||||
通常のビューファイルと違って、Twig を使うときは、コントローラで `$this->render()` を呼ぶときに拡張子を含めなければなりません。 |
||||
|
||||
```php |
||||
return $this->render('renderer.twig', ['username' => 'Alex']); |
||||
``` |
||||
|
||||
### テンプレートの構文 |
||||
|
||||
Twig の基礎を学ぶための最善のリソースは、[twig.sensiolabs.org](http://twig.sensiolabs.org/documentation) にある公式ドキュメントです。 |
||||
それに追加して、下記に説明する Yii 固有の拡張構文があります。 |
||||
|
||||
#### メソッドとファンクションの呼び出し |
||||
|
||||
結果が必要な場合は、次の構文を使ってメソッドや関数を呼び出すことが出来ます。 |
||||
|
||||
``` |
||||
{% set result = my_function({'a' : 'b'}) %} |
||||
{% set result = myObject.my_function({'a' : 'b'}) %} |
||||
``` |
||||
|
||||
結果を変数に代入する代りに echo したい場合は、こうします。 |
||||
|
||||
``` |
||||
{{ my_function({'a' : 'b'}) }} |
||||
{{ myObject.my_function({'a' : 'b'}) }} |
||||
``` |
||||
|
||||
結果を必要としない場合は、`void` ラッパーを使うべきです。 |
||||
|
||||
``` |
||||
{{ void(my_function({'a' : 'b'})) }} |
||||
{{ void(myObject.my_function({'a' : 'b'})) }} |
||||
``` |
||||
|
||||
#### オブジェクトのプロパティを設定する |
||||
|
||||
`set` と呼ばれる特別な関数を使って、オブジェクトのプロパティを設定することが出来ます。 |
||||
例えば、テンプレート中の下記のコードはページタイトルを変更します。 |
||||
|
||||
``` |
||||
{{ set(this, 'title', 'New title') }} |
||||
``` |
||||
|
||||
#### 名前空間とクラスをインポートする |
||||
|
||||
追加のクラスと名前空間をテンプレートの中でインポートすることが出来ます。 |
||||
|
||||
``` |
||||
名前空間のインポート: |
||||
{{ use('/app/widgets') }} |
||||
|
||||
クラスのインポート: |
||||
{{ use('/yii/widgets/ActiveForm') }} |
||||
|
||||
エイリアス化してクラスをインポート: |
||||
{{ use({'alias' : '/app/widgets/MyWidget'}) }} |
||||
``` |
||||
|
||||
#### 他のテンプレートを参照する |
||||
|
||||
`include` と `extends` 文によるテンプレートの参照には二つの方法があります。 |
||||
|
||||
``` |
||||
{% include "comment.twig" %} |
||||
{% extends "post.twig" %} |
||||
|
||||
{% include "@app/views/snippets/avatar.twig" %} |
||||
{% extends "@app/views/layouts/2columns.twig" %} |
||||
``` |
||||
|
||||
最初の場合では、現在のテンプレートのパスからの相対的なパスでビューを探します。 |
||||
`comment.twig` と `post.twig` は、現在レンダリングされているテンプレートと同じディレクトリで探されます。 |
||||
|
||||
第二の場合では、パスエイリアスを使います。 |
||||
`@app` のような全ての Yii のエイリアスがデフォルトで利用できます。 |
||||
|
||||
#### ウィジェット |
||||
|
||||
このエクステンションは、ウィジェットを簡単に使えるように、ウィジェットの構文を関数呼び出しに変換します。 |
||||
|
||||
``` |
||||
{{ use('yii/bootstrap') }} |
||||
{{ nav_bar_begin({ |
||||
'brandLabel': 'My Company', |
||||
}) }} |
||||
{{ nav_widget({ |
||||
'options': { |
||||
'class': 'navbar-nav navbar-right', |
||||
}, |
||||
'items': [{ |
||||
'label': 'Home', |
||||
'url': '/site/index', |
||||
}] |
||||
}) }} |
||||
{{ nav_bar_end() }} |
||||
``` |
||||
|
||||
上記のテンプレートでは、`nav_bar_begin`、`nav_bar_end` また `nav_widget` は、二つの部分から構成されます。 |
||||
最初の部分は、小文字とアンダースコアに変換されたウィジェットの名前です。 |
||||
`NavBar` は `nav_bar`、`Nav` は `nav` に変換されます。 |
||||
第二の部分の `_begin`、`_end` および `_widget` は、ウィジェットのメソッド `::begin()`、`::end()` および `::widget()` と同じものです。 |
||||
|
||||
もっと汎用的な `Widget::end()` を実行する `widget_end()` も使うことが出来ます。 |
||||
|
||||
#### アセット |
||||
|
||||
アセットは次の方法で登録することが出来ます。 |
||||
|
||||
``` |
||||
{{ use('yii/web/JqueryAsset') }} |
||||
{{ register_jquery_asset() }} |
||||
``` |
||||
|
||||
上記のコードで、`register` は、アセットを扱うことを指定し、`jquery_asset` は、既に `use` でインポート済みの `JqueryAsset` クラスに翻訳されます。 |
||||
|
||||
#### フォーム |
||||
|
||||
フォームは次のようにして構築することが出来ます。 |
||||
|
||||
``` |
||||
{{ use('yii/widgets/ActiveForm') }} |
||||
{% set form = active_form_begin({ |
||||
'id' : 'login-form', |
||||
'options' : {'class' : 'form-horizontal'}, |
||||
}) %} |
||||
{{ form.field(model, 'username') | raw }} |
||||
{{ form.field(model, 'password').passwordInput() | raw }} |
||||
|
||||
<div class="form-group"> |
||||
<input type="submit" value="ログイン" class="btn btn-primary" /> |
||||
</div> |
||||
{{ active_form_end() }} |
||||
``` |
||||
|
||||
|
||||
#### URL |
||||
|
||||
URL を構築するのに使える二つの関数があります。 |
||||
|
||||
```php |
||||
<a href="{{ path('blog/view', {'alias' : post.alias}) }}">{{ post.title }}</a> |
||||
<a href="{{ url('blog/view', {'alias' : post.alias}) }}">{{ post.title }}</a> |
||||
``` |
||||
|
||||
`path` は相対的な URL を生成し、`url` は絶対的な URL を生成します。 |
||||
内部的には、両者とも、[[\yii\helpers\Url]] を使っています。 |
||||
|
||||
#### 追加の変数 |
||||
|
||||
Twig のテンプレート内では、次の変数が常に定義されています。 |
||||
|
||||
- `app` - `\Yii::$app` オブジェクト |
||||
- `this` - 現在の `View` オブジェクト |
||||
|
||||
### 追加の構成 |
||||
|
||||
Yii Twig エクステンションは、あなた自身の構文を定義して、通常のヘルパクラスをテンプレートに導入することを可能にしています。 |
||||
構成のオプションを見ていきましょう。 |
||||
|
||||
#### グローバル |
||||
|
||||
アプリケーション構成の `globals` 変数によって、グローバルなヘルパや変数を追加することが出来ます。 |
||||
Yii のヘルパとあなた自身の変数を定義することが出来ます。 |
||||
|
||||
```php |
||||
'globals' => [ |
||||
'html' => '\yii\helpers\Html', |
||||
'name' => 'Carsten', |
||||
'GridView' => '\yii\grid\GridView', |
||||
], |
||||
``` |
||||
|
||||
いったん構成してしまえば、テンプレートの中で以下のようにグローバルを使用することが出来ます。 |
||||
|
||||
``` |
||||
Hello, {{name}}! {{ html.a('ログインしてください', 'site/login') | raw }}. |
||||
|
||||
{{ GridView.widget({'dataProvider' : provider}) | raw }} |
||||
``` |
||||
|
||||
#### 関数 |
||||
|
||||
追加の関数を次のようにして定義することが出来ます。 |
||||
|
||||
```php |
||||
'functions' => [ |
||||
'rot13' => 'str_rot13', |
||||
'truncate' => '\yii\helpers\StringHelper::truncate', |
||||
], |
||||
``` |
||||
|
||||
テンプレートでは、次のようにして使うことが出来ます。 |
||||
|
||||
``` |
||||
`{{ rot13('test') }}` |
||||
`{{ truncate(post.text, 100) }}` |
||||
``` |
||||
|
||||
#### フィルタ |
||||
|
||||
追加のフィルタをアプリケーション構成の `filters` オプションによって追加することが出来ます。 |
||||
|
||||
```php |
||||
'filters' => [ |
||||
'jsonEncode' => '\yii\helpers\Json::encode', |
||||
], |
||||
``` |
||||
|
||||
テンプレートの中では、次の構文を使ってフィルタを適用することが出来ます。 |
||||
|
||||
``` |
||||
{{ model|jsonEncode }} |
||||
``` |
||||
|
||||
|
||||
Smarty |
||||
------ |
||||
|
||||
Smarty を使うためには、`.tpl` という拡張子を持つファイルにテンプレートを作成しなければなりません |
||||
(別のファイル拡張子を使っても構いませんが、それに対応してコンポーネントの構成を変更しなければなりません)。 |
||||
通常のビューファイルと違って、Smarty を使うときは、コントローラで `$this->render()` を呼ぶときに拡張子を含めなければなりません。 |
||||
|
||||
```php |
||||
return $this->render('renderer.tpl', ['username' => 'Alex']); |
||||
``` |
||||
|
||||
### テンプレートの構文 |
||||
|
||||
Smarty のテンプレートの構文を学ぶための最善のリソースは、[www.smarty.net](http://www.smarty.net/docs/ja/) にある公式ドキュメントです。 |
||||
それに追加して、下記に説明する Yii 固有の拡張構文があります。 |
||||
|
||||
#### オブジェクトのプロパティを設定する |
||||
|
||||
`set` と呼ばれる特別な関数を使って、ビューとコントローラの一般的なプロパティを設定することが出来ます。 |
||||
現在サポートされているプロパティは、`title`、`theme` および `layout` です。 |
||||
|
||||
``` |
||||
{set title="My Page"} |
||||
{set theme="frontend"} |
||||
{set layout="main.tpl"} |
||||
``` |
||||
|
||||
タイトルについては、専用のブロックもあります。 |
||||
|
||||
``` |
||||
{title}My Page{/title} |
||||
``` |
||||
|
||||
#### メタタグを設定する |
||||
|
||||
メタタグは次のようにして設定することが出来ます。 |
||||
|
||||
``` |
||||
{meta keywords="Yii,PHP,Smarty,framework"} |
||||
``` |
||||
|
||||
`description` のためには専用のブロックもあります。 |
||||
|
||||
``` |
||||
{description}Smarty エクステンションについて説明するページです{/description} |
||||
``` |
||||
|
||||
#### オブジェクトのメソッドを呼び出す |
||||
|
||||
場合によっては、オブジェクトのメソッドを呼び出す必要があるでしょう。 |
||||
|
||||
#### スタティックなクラスをインポートし、ウィジェットを関数およびブロックとして使用する |
||||
|
||||
追加のスタティックなクラスをテンプレートの中でインポートすることが出来ます。 |
||||
|
||||
``` |
||||
{use class="yii\helpers\Html"} |
||||
{Html::mailto('eugenia@example.com')} |
||||
``` |
||||
|
||||
必要であれば、カスタムエイリアスを設定することも出来ます。 |
||||
|
||||
``` |
||||
{use class="yii\helpers\Html" as="Markup"} |
||||
{Markup::mailto('eugenia@example.com')} |
||||
``` |
||||
|
||||
このエクステンションは、ウィジェットを簡単に使えるように、ウィジェットの構文を関数呼び出しまたはブロックに変換します。 |
||||
通常のウィジェットについては、次のように関数を使うことが出来ます。 |
||||
|
||||
``` |
||||
{use class='@yii\grid\GridView' type='function'} |
||||
{GridView dataProvider=$provider} |
||||
``` |
||||
|
||||
ActiveForm のように `begin` および `end` メソッドを持つウィジェットについては、ブロックを使うほうが良いでしょう。 |
||||
|
||||
``` |
||||
{use class='yii\widgets\ActiveForm' type='block'} |
||||
{ActiveForm assign='form' id='login-form' action='/form-handler' options=['class' => 'form-horizontal']} |
||||
{$form->field($model, 'firstName')} |
||||
<div class="form-group"> |
||||
<div class="col-lg-offset-1 col-lg-11"> |
||||
<input type="submit" value="ログイン" class="btn btn-primary" /> |
||||
</div> |
||||
</div> |
||||
{/ActiveForm} |
||||
``` |
||||
|
||||
特定のウィジェットを多用する場合は、それをアプリケーション構成の中で宣言して、テンプレートから `{use class` の呼び出しを削除するのが良いアイデアです。 |
||||
|
||||
```php |
||||
'components' => [ |
||||
'view' => [ |
||||
// ... |
||||
'renderers' => [ |
||||
'tpl' => [ |
||||
'class' => 'yii\smarty\ViewRenderer', |
||||
'widgets' => [ |
||||
'blocks' => [ |
||||
'ActiveForm' => '\yii\widgets\ActiveForm', |
||||
], |
||||
], |
||||
], |
||||
], |
||||
], |
||||
], |
||||
``` |
||||
|
||||
#### 他のテンプレートを参照する |
||||
|
||||
`include` と `extends` 文によるテンプレートの参照には、主として二つの方法があります。 |
||||
|
||||
|
||||
``` |
||||
{include 'comment.tpl'} |
||||
{extends 'post.tpl'} |
||||
|
||||
{include '@app/views/snippets/avatar.tpl'} |
||||
{extends '@app/views/layouts/2columns.tpl'} |
||||
``` |
||||
|
||||
最初の場合では、現在のテンプレートのパスからの相対的なパスでビューを探します。 |
||||
`comment.tpl` と `post.tpl` は、現在レンダリングされているテンプレートと同じディレクトリで探されます。 |
||||
|
||||
第二の場合では、パスエイリアスを使います。 |
||||
`@app` のような全ての Yii のエイリアスがデフォルトで利用できます。 |
||||
|
||||
#### CSS、JavaScript およびアセットバンドル |
||||
|
||||
JavaScript と CSS のファイルを登録するためには、次の構文を使うことが出来ます。 |
||||
|
||||
``` |
||||
{registerJsFile url='http://maps.google.com/maps/api/js?sensor=false' position='POS_END'} |
||||
{registerCssFile url='@assets/css/normalizer.css'} |
||||
``` |
||||
|
||||
JavaScript と CSS をテンプレートに直接書きたい場合は、便利なブロックがあります。 |
||||
``` |
||||
{registerJs key='show' position='POS_LOAD'} |
||||
$("span.show").replaceWith('<div class="show">'); |
||||
{/registerJs} |
||||
|
||||
{registerCss} |
||||
div.header { |
||||
background-color: #3366bd; |
||||
color: white; |
||||
} |
||||
{/registerCss} |
||||
``` |
||||
|
||||
アセットバンドルは次のようにして登録することが出来ます。 |
||||
|
||||
``` |
||||
{use class="yii\web\JqueryAsset"} |
||||
{JqueryAsset::register($this)|void} |
||||
``` |
||||
|
||||
ここではメソッド呼び出しの結果が必要ないので `void` 修飾子を使っています。 |
||||
|
||||
#### URL |
||||
|
||||
URL を構築するのに使える二つの関数があります。 |
||||
|
||||
```php |
||||
<a href="{path route='blog/view' alias=$post.alias}">{$post.title}</a> |
||||
<a href="{url route='blog/view' alias=$post.alias}">{$post.title}</a> |
||||
``` |
||||
|
||||
`path` は相対的な URL を生成し、`url` は絶対的な URL を生成します。 |
||||
内部的には、両者とも、[[\yii\helpers\Url]] を使っています。 |
||||
|
||||
#### 追加の変数 |
||||
|
||||
Smarty のテンプレート内では、次の変数が常に定義されています。 |
||||
|
||||
- `app` - `\Yii::$app` オブジェクト |
||||
- `this` - 現在の `View` オブジェクト |
||||
|
||||
#### 構成情報のパラメータにアクセスする |
||||
|
||||
アプリケーションにおいて `Yii::$app->params->something` によって取得できるパラメータは、次のようにして使用することが出来ます。 |
||||
|
||||
``` |
||||
`{#something#}` |
||||
``` |
@ -0,0 +1,167 @@
|
||||
サードパーティのコードを扱う |
||||
============================ |
||||
|
||||
時々、Yii アプリケーションの中でサードパーティのコードを使用する必要がある場合があります。 |
||||
あるいは、サードパーティのシステムの中で Yii をライブラリとして使用したいこともあるでしょう。 |
||||
この節では、こういう目的をどうやって達成するかを説明します。 |
||||
|
||||
|
||||
Yii の中でサードパーティのライブラリを使う <a name="using-libs-in-yii"></a> |
||||
------------------------------------------ |
||||
|
||||
Yii アプリケーションの中でサードパーティのライブラリを使うために主として必要なことは、そのライブラリの中のクラスが適切にインクルードされること、または、オートロード可能な状態にあることを保証することです。 |
||||
|
||||
### Composer パッケージを使う <a name="using-composer-packages"></a> |
||||
|
||||
多くのサードパーティライブラリは [Composer](https://getcomposer.org/) パッケージの形式でリリースされています。 |
||||
そのようなライブラリは、次の二つの簡単なステップを踏むことによって、インストールすることが出来ます。 |
||||
|
||||
1. アプリケーションの `composer.json` ファイルを修正して、どの Composer パッケージをインストールしたいかを指定する。 |
||||
2. `composer install` を実行して、指定したパッケージをインストールする。 |
||||
|
||||
インストールされた Composer パッケージ内のクラスは、Composer のオートローダを使ってオートロードすることが出来ます。 |
||||
アプリケーションの [エントリスクリプト](structure-entry-scripts.md) に、Composer のオートローダをインストールするための下記の行があることを確認してください。 |
||||
|
||||
```php |
||||
// Composer のオートローダをインストール |
||||
require(__DIR__ . '/../vendor/autoload.php'); |
||||
|
||||
// Yii クラスファイルをインクルード |
||||
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); |
||||
``` |
||||
|
||||
### ダウンロードしたライブラリを使う <a name="using-downloaded-libs"></a> |
||||
|
||||
ライブラリが Composer パッケージとしてリリースされていない場合は、そのライブラリのインストールの指示に従ってインストールしなければなりません。 |
||||
たいていの場合は、リリースファイルを手動でダウンロードし、`BasePath/vendor` ディレクトリの下に解凍する必要があります。 |
||||
ここで `BasePath` は、アプリケーションの [base path](structure-applications.md#basePath) を表すものです。 |
||||
|
||||
ライブラリがそれ自身のオートローダを持っている場合は、それをアプリケーションの [エントリスクリプト](structure-entry-scripts.md) でインストールすることが出来ます。 |
||||
複数のオートローダクラスの中で Yii のクラスオートローダが優先されるように、ライブラリのオートローダは `Yii.php` ファイルをインクルードする前にインストールすることを推奨します。 |
||||
|
||||
ライブラリがクラスオートローダを提供していない場合でも、クラスの命名規約が [PSR-4](http://www.php-fig.org/psr/psr-4/) に従っている場合は、ライブラリのクラスをオートロードするのに Yii のクラスオートローダを使うことが出来ます。 |
||||
必要なことは、ライブラリのクラスによって使われている全てのルート名前空間に対して [ルートエイリアス](concept-aliases.md#defining-aliases) を宣言することだけです。 |
||||
例えば、ライブラリを `vendor/foo/bar` ディレクトリの下にインストールしたとしましょう。 |
||||
そしてライブラリのクラスは `xyz` ルート名前空間の下にあるとします。 |
||||
この場合、アプリケーションの構成情報において、次のコードを含めれば良いのです。 |
||||
|
||||
```php |
||||
[ |
||||
'aliases' => [ |
||||
'@xyz' => '@vendor/foo/bar', |
||||
], |
||||
] |
||||
``` |
||||
|
||||
上記のどちらにも当てはまらない場合、おそらくそのライブラリは、クラスファイルを探して適切にインクルードするために、PHP の include path 設定に依存しているのでしょう。 |
||||
この場合は、PHP include path の設定に関するライブラリの指示に従うしかありません。 |
||||
|
||||
最悪の場合として、ライブラリが全てのクラスファイルを明示的にインクルードすることを要求している場合は、次の方法を使ってクラスを必要に応じてインクルードすることが出来るようになります。 |
||||
|
||||
* ライブラリに含まれるクラスを特定する。 |
||||
* アプリケーションの [エントリスクリプト](structure-entry-scripts.md) において、クラスと対応するファイルパスを `Yii::$classMap` としてリストアップする。 |
||||
例えば、 |
||||
```php |
||||
Yii::$classMap['Class1'] = 'path/to/Class1.php'; |
||||
Yii::$classMap['Class2'] = 'path/to/Class2.php'; |
||||
``` |
||||
|
||||
|
||||
サードパーティのシステムで Yii を使う <a name="using-yii-in-others"></a> |
||||
------------------------------------- |
||||
|
||||
Yii は数多くの優れた機能を提供していますので、サードパーティのシステム (例えば、WordPress、Joomla、または、他の PHP フレームワークを使って開発されるアプリケーション) を開発したり機能拡張したりするのをサポートするために Yii の機能のいくつかを使用したいことがあるでしょう。 |
||||
例えば、[[yii\helpers\ArrayHelper]] クラスや [アクティブレコード](db-active-record.md) をサードパーティのシステムで使いたいことがあるでしょう。 |
||||
この目的を達するためには、主として、二つのステップを踏む必要があります。 |
||||
すなわち、Yii のインストールと、Yii のブートストラップです。 |
||||
|
||||
サードパーティのシステムが Composer を使って依存を管理している場合は、単に下記のコマンドを実行すれば Yii をインストールすることが出来ます。 |
||||
|
||||
composer global require "fxp/composer-asset-plugin:1.0.0-beta4" |
||||
composer require "yiisoft/yii2:*" |
||||
composer install |
||||
|
||||
最初のコマンドは [composer アセットプラグイン](https://github.com/francoispluchino/composer-asset-plugin/) をインストールします。 |
||||
これは、Composer によって bower と npm の依存パッケージを管理できるようにするものです。 |
||||
このことは、データベースなど、アセットに関係しない Yii の機能を使いたいだけの場合でも、Yii の Composer パッケージをインストールするために必要とされます。 |
||||
Composer に関する更なる情報や、インストールの過程で出現しうる問題に対する解決方法については、一般的な [Composer によるインストール](start-installation.md#installing-via-composer) の節を参照してください。 |
||||
|
||||
そうでない場合は、Yii のリリースを [ダウンロード](http://www.yiiframework.com/download/) して、`BasePath/vendor` ディレクトリに解凍してください。 |
||||
|
||||
次に、サードパーティのシステムのエントリスクリプトを修正します。 |
||||
次のコードをエントリスクリプトの先頭に追加してください。 |
||||
|
||||
```php |
||||
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); |
||||
|
||||
$yiiConfig = require(__DIR__ . '/../config/yii/web.php'); |
||||
new yii\web\Application($yiiConfig); // ここで run() を呼ばない |
||||
``` |
||||
|
||||
ごらんのように、上記のコードは典型的な Yii アプリケーションの [エントリスクリプト](structure-entry-scripts.md) と非常に良く似ています。 |
||||
唯一の違いは、アプリケーションのインスタンスが作成された後に `run()` メソッドが呼ばれない、という点です。 |
||||
`run()` を呼ぶと Yii がリクエスト処理のワークフローを制御するようになりますが、この場合はリクエストを処理する別のアプリケーションが既に存在していますので、これは必要ではないからです。 |
||||
|
||||
Yii アプリケーションでの場合と同じように、サードパーティシステムが走っている環境に基づいて Yii のアプリケーションインスタンスを構成する必要があります。 |
||||
例えば、[アクティブレコード](db-active-record.md) の機能を使うためには、サードパーティシステムによって使用されている DB 接続の設定を使って `db` [アプリケーションコンポーネント](structure-application-components.md) を構成しなければなりません。 |
||||
|
||||
これで、Yii によって提供されているほとんどの機能を使うことが出来ます。 |
||||
例えば、アクティブレコードクラスを作成して、それを使ってデータベースを扱うことが出来ます。 |
||||
|
||||
|
||||
Yii 2 を Yii 1 とともに使う <a name="using-both-yii2-yii1"></a> |
||||
--------------------------- |
||||
|
||||
あなたが Yii 1 を前から使っている場合は、たぶん、稼働中の Yii 1 アプリケーションを持っているでしょう。 |
||||
アプリケーション全体を Yii 2 で書き直す代りに、Yii 2 でのみ利用できる機能を使ってアプリケーションを機能拡張したいこともあるでしょう。 |
||||
このことは、以下に述べるようにして、実現できます。 |
||||
|
||||
> Note|注意: Yii 2 は PHP 5.4 以上を必要とします。 |
||||
> あなたのサーバと既存のアプリケーションが PHP 5.4 以上をサポートしていることを確認しなければなりません。 |
||||
|
||||
最初に、[直前の項](#using-yii-in-others) で述べられている指示に従って、Yii 2 を既存のアプリケーションにインストールします。 |
||||
|
||||
次に、アプリケーションのエントリスクリプトを以下のように修正します。 |
||||
|
||||
```php |
||||
// カスタマイズされた Yii クラスをインクルード (下記で説明) |
||||
require(__DIR__ . '/../components/Yii.php'); |
||||
|
||||
// Yii 2 アプリケーションの構成 |
||||
$yii2Config = require(__DIR__ . '/../config/yii2/web.php'); |
||||
new yii\web\Application($yii2Config); // ここで run() を呼ばない |
||||
|
||||
// Yii 1 アプリケーションの構成 |
||||
$yii1Config = require(__DIR__ . '/../config/yii1/main.php'); |
||||
Yii::createWebApplication($yii1Config)->run(); |
||||
``` |
||||
|
||||
Yii 1 と Yii 2 の両者が `Yii` クラスを持っているため、二つを結合するカスタムバージョンを作成する必要があります。 |
||||
上記のコードでカスタマイズされた `Yii` クラスファイルをインクルードしていますが、これは下記のようにして作成することが出来ます。 |
||||
|
||||
```php |
||||
$yii2path = '/path/to/yii2'; |
||||
require($yii2path . '/BaseYii.php'); // Yii 2.x |
||||
|
||||
$yii1path = '/path/to/yii1'; |
||||
require($yii1path . '/YiiBase.php'); // Yii 1.x |
||||
|
||||
class Yii extends \yii\BaseYii |
||||
{ |
||||
// YiiBase (1.x) のコードをここにコピー・ペースト |
||||
} |
||||
|
||||
Yii::$classMap = include($yii2path . '/classes.php'); |
||||
// Yii2 オートローダを Yii1 によって登録 |
||||
Yii::registerAutoloader(['Yii', 'autoload']); |
||||
// 依存注入コンテナを作成 |
||||
Yii::$container = new yii\di\Container; |
||||
``` |
||||
|
||||
以上です。 |
||||
これで、あなたのコードのどの部分においても、`Yii::$app` を使って Yii 2 アプリケーションインスタンスにアクセスすることが出来、`Yii::app()` によって Yii 1 アプリケーションインスタンスを取得することが出来ます。 |
||||
|
||||
```php |
||||
echo get_class(Yii::app()); // 'CWebApplication' を出力 |
||||
echo get_class(Yii::$app); // 'yii\web\Application' を出力 |
||||
``` |
@ -0,0 +1,68 @@
|
||||
Bootstrap ウィジェット |
||||
====================== |
||||
|
||||
> Note|注意: この節はまだ執筆中です。 |
||||
|
||||
Yii は、追加設定なしで、マークアップとコンポーネントのフレームワーク [Bootstrap 3](http://getbootstrap.com/) ("Twitter Bootstrap" としても知られています) をサポートしています。 |
||||
Bootstrap は優れた、レスポンシブなフレームワークであり、クライアント側の開発プロセスを大いにスピードアップすることが出来るものです。 |
||||
|
||||
Bootstrap のコアは二つの部分によって表されます。 |
||||
|
||||
- CSS の基礎。例えば、グリッドのレイアウトシステム、タイポグラフィ、ヘルパクラス、レスポンシブユーティリティなど。 |
||||
- そのまま使えるコンポーネント。フォーム、メニュー、ページネーション、モーダルボックス、タブなど。 |
||||
|
||||
基礎 |
||||
---- |
||||
|
||||
Yii は bootstrap の基礎を PHP コードでラップすることをしていません。 |
||||
なぜなら、この場合の HTML コードがそれ自体として非常にシンプルだからです。 |
||||
bootstrap の基礎を使用することに関する詳細は、[bootstrap ドキュメントウェブサイト](http://getbootstrap.com/css/) で見ることが出来ます。 |
||||
それでも、Yii はあなたのページに bootstrap のアセットをインクルードするための便利な方法を提供しています。 |
||||
`@app/assets` ディレクトリに配置されている `AppAsset.php` に一行を加えるだけで大丈夫です。 |
||||
|
||||
```php |
||||
public $depends = [ |
||||
'yii\web\YiiAsset', |
||||
'yii\bootstrap\BootstrapAsset', // この行です |
||||
]; |
||||
``` |
||||
|
||||
Yii のアセットマネージャによって bootstrap を使うと、bootstrap のリソースを最小化したり、必要な場合にはあなた自身のリソースと結合したりすることが出来ます。 |
||||
|
||||
Yii ウィジェット |
||||
---------------- |
||||
|
||||
複雑な bootstrap コンポーネントのほとんどは Yii ウィジェットでラップされて、より堅牢な構文を与えられ、フレームワークの諸機能と統合されています。 |
||||
全てのウィジェットは `\yii\bootstrap` 名前空間に属します。 |
||||
|
||||
- [[yii\bootstrap\ActiveForm|ActiveForm]] |
||||
- [[yii\bootstrap\Alert|Alert]] |
||||
- [[yii\bootstrap\Button|Button]] |
||||
- [[yii\bootstrap\ButtonDropdown|ButtonDropdown]] |
||||
- [[yii\bootstrap\ButtonGroup|ButtonGroup]] |
||||
- [[yii\bootstrap\Carousel|Carousel]] |
||||
- [[yii\bootstrap\Collapse|Collapse]] |
||||
- [[yii\bootstrap\Dropdown|Dropdown]] |
||||
- [[yii\bootstrap\Modal|Modal]] |
||||
- [[yii\bootstrap\Nav|Nav]] |
||||
- [[yii\bootstrap\NavBar|NavBar]] |
||||
- [[yii\bootstrap\Progress|Progress]] |
||||
- [[yii\bootstrap\Tabs|Tabs]] |
||||
|
||||
|
||||
Bootstrap の .less ファイルを直接に使用する |
||||
------------------------------------------- |
||||
|
||||
あなたが [Bootstrap CSS をあなたの less ファイルに直接含める](http://getbootstrap.com/getting-started/#customizing) ことを望む場合は、オリジナルの CSS ファイルがロードされないように無効化する必要があるでしょう。 |
||||
[[yii\bootstrap\BootstrapAsset|BootstrapAsset]] の `css` プロパティを空に設定することによって、そうすることが出来ます。 |
||||
そのためには、`assetManager` [アプリケーションコンポーネント](structure-application-components.md) を以下のように構成します。 |
||||
|
||||
```php |
||||
'assetManager' => [ |
||||
'bundles' => [ |
||||
'yii\bootstrap\BootstrapAsset' => [ |
||||
'css' => [], |
||||
] |
||||
] |
||||
] |
||||
``` |
@ -0,0 +1,46 @@
|
||||
jQuery UI ウィジェット |
||||
====================== |
||||
|
||||
> Note|注意: この節はまだ執筆中です。 |
||||
|
||||
Yii は公式エクステンションによって [jQuery UI](http://api.jqueryui.com/) ライブラリをサポートしています。 |
||||
jQuery UI は、jQuery JavaScript ライブラリの上に構築された、一連のユーザインタフェイスインタラクション、イフェクト、ウィジェットおよびテーマです。 |
||||
|
||||
インストール |
||||
------------ |
||||
|
||||
このエクステンションの推奨されるインストール方法は、[composer](http://getcomposer.org/download/) を使う方法です。 |
||||
|
||||
下記を実行します。 |
||||
|
||||
``` |
||||
php composer.phar require --prefer-dist yiisoft/yii2-jui "*" |
||||
``` |
||||
|
||||
または、`composer.json` ファイルの `require` セクションに下記を追加します。 |
||||
|
||||
``` |
||||
"yiisoft/yii2-jui": "*" |
||||
``` |
||||
|
||||
Yii ウィジェット |
||||
---------------- |
||||
|
||||
複雑な jQuery UI コンポーネントのほとんどは Yii ウィジェットでラップされて、より堅牢な構文を与えられ、フレームワークの諸機能と統合されています。 |
||||
全てのウィジェットは `\yii\jui` 名前空間に属します。 |
||||
|
||||
- [[yii\jui\Accordion|Accordion]] |
||||
- [[yii\jui\AutoComplete|AutoComplete]] |
||||
- [[yii\jui\DatePicker|DatePicker]] |
||||
- [[yii\jui\Dialog|Dialog]] |
||||
- [[yii\jui\Draggable|Draggable]] |
||||
- [[yii\jui\Droppable|Droppable]] |
||||
- [[yii\jui\Menu|Menu]] |
||||
- [[yii\jui\ProgressBar|ProgressBar]] |
||||
- [[yii\jui\Resizable|Resizable]] |
||||
- [[yii\jui\Selectable|Selectable]] |
||||
- [[yii\jui\Slider|Slider]] |
||||
- [[yii\jui\SliderInput|SliderInput]] |
||||
- [[yii\jui\Sortable|Sortable]] |
||||
- [[yii\jui\Spinner|Spinner]] |
||||
- [[yii\jui\Tabs|Tabs]] |
Loading…
Reference in new issue