mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-26 06:15:19 +08:00
docs/guide-ja reorganized and updated [ci skip]
This commit is contained in:
@ -78,9 +78,9 @@ All Rights Reserved.
|
||||
* [クエリビルダ](db-query-builder.md): シンプルな抽象レイヤを使ってデータベースに対してクエリを行う
|
||||
* [アクティブレコード](db-active-record.md): アクティブレコード ORM、レコードの読み出しと操作、リレーションの定義
|
||||
* [マイグレーション](db-migrations.md): チーム開発環境においてデータベースにバージョンコントロールを適用
|
||||
* **未定** [Sphinx](db-sphinx.md)
|
||||
* [Sphinx](https://github.com/yiisoft/yii2-sphinx/blob/master/docs/guide-ja/README.md)
|
||||
* **未定** [Redis](db-redis.md)
|
||||
* **未定** [MongoDB](db-mongodb.md)
|
||||
* [MongoDB](https://github.com/yiisoft/yii2-mongodb/blob/master/docs/guide-ja/README.md)
|
||||
* **未定** [ElasticSearch](db-elasticsearch.md)
|
||||
|
||||
|
||||
@ -112,7 +112,7 @@ All Rights Reserved.
|
||||
* [認証](security-authentication.md)
|
||||
* [権限付与](security-authorization.md)
|
||||
* [パスワードを扱う](security-passwords.md)
|
||||
* [認証クライアント](security-auth-clients.md)
|
||||
* [認証クライアント](https://github.com/yiisoft/yii2-authclient/blob/master/docs/guide-ja/README.md)
|
||||
* [ベストプラクティス](security-best-practices.md)
|
||||
|
||||
|
||||
@ -185,7 +185,7 @@ RESTful ウェブサービス
|
||||
* Menu: **未定** デモページへリンク
|
||||
* LinkPager: **未定** デモページへリンク
|
||||
* LinkSorter: **未定** デモページへリンク
|
||||
* [Bootstrap ウィジェット](widget-bootstrap.md)
|
||||
* [Bootstrap ウィジェット](https://github.com/yiisoft/yii2-bootstrap/blob/master/docs/guide-ja/README.md)
|
||||
* [jQuery UI ウィジェット](widget-jui.md)
|
||||
|
||||
|
||||
|
@ -84,7 +84,7 @@ $query->select(['user_id' => 'user.id', 'email']);
|
||||
例えば、
|
||||
|
||||
```php
|
||||
$query->select(["CONCAT(first_name, ' ', last_name]) AS full_name", 'email']);
|
||||
$query->select(["CONCAT(first_name, ' ', last_name) AS full_name", 'email']);
|
||||
```
|
||||
|
||||
バージョン 2.0.1 以降では、サブクエリもセレクトすることが出来ます。
|
||||
|
@ -1,92 +0,0 @@
|
||||
認証
|
||||
====
|
||||
|
||||
> Note|注意: この節はまだ執筆中です。
|
||||
|
||||
認証はユーザが誰であるかを確認する行為であり、ログインプロセスの基礎となるものです。
|
||||
典型的には、認証は、識別子 (ユーザ名またはメールアドレス) とパスワードの組み合わせを使用します。
|
||||
ユーザはこれらの値をフォームを通じて送信し、アプリケーションは送信された情報を以前に (例えば、ユーザ登録時に) 保存された情報と比較します。
|
||||
|
||||
Yii では、このプロセス全体が半自動的に実行されます。
|
||||
開発者に残されているのは、認証システムにおいて最も重要なクラスである [[yii\web\IdentityInterface]] を実装することだけです。
|
||||
典型的には、`IdentityInterface` の実装は `User` モデルを使って達成されます。
|
||||
|
||||
十分な機能を有する認証の実例を [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) の中に見出すことが出来ます。
|
||||
下記にインターフェイスのメソッドだけをリストします。
|
||||
|
||||
```php
|
||||
class User extends ActiveRecord implements IdentityInterface
|
||||
{
|
||||
// ...
|
||||
|
||||
/**
|
||||
* 与えられた ID によってユーザ識別情報を探す
|
||||
*
|
||||
* @param string|integer $id 探すための ID
|
||||
* @return IdentityInterface|null 与えられた ID に合致する Identity オブジェクト
|
||||
*/
|
||||
public static function findIdentity($id)
|
||||
{
|
||||
return static::findOne($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 与えられたトークンによってユーザ識別情報を探す
|
||||
*
|
||||
* @param string $token 探すためのトークン
|
||||
* @return IdentityInterface|null 与えられたトークンに合致する Identity オブジェクト
|
||||
*/
|
||||
public static function findIdentityByAccessToken($token, $type = null)
|
||||
{
|
||||
return static::findOne(['access_token' => $token]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|string 現在のユーザの ID
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string 現在のユーザの認証キー
|
||||
*/
|
||||
public function getAuthKey()
|
||||
{
|
||||
return $this->auth_key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $authKey
|
||||
* @return boolean 認証キーが現在のユーザに対して有効か否か
|
||||
*/
|
||||
public function validateAuthKey($authKey)
|
||||
{
|
||||
return $this->getAuthKey() === $authKey;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
概要を述べたメソッドのうち、二つは単純なものです。
|
||||
`findIdentity` は ID の値を受け取って、その ID と関連付けられたモデルのインスタンスを返します。
|
||||
`getId` メソッドは ID そのものを返します。
|
||||
その他のメソッドのうち、二つのもの - `getAuthKey` と `validateAuthKey` - は、「次回から自動ログイン ("remember me")」のクッキーに対して追加のセキュリティを提供するために使われます。
|
||||
`getAuthKey` メソッドは全てのユーザに対してユニークな文字列を返さなければなりません。
|
||||
`Yii::$app->getSecurity()->generateRandomString()` を使うと、信頼性の高い方法でユニークな文字列を生成することが出来ます。
|
||||
これをユーザのレコードの一部として保存しておくのは良いアイデアです。
|
||||
|
||||
```php
|
||||
public function beforeSave($insert)
|
||||
{
|
||||
if (parent::beforeSave($insert)) {
|
||||
if ($this->isNewRecord) {
|
||||
$this->auth_key = Yii::$app->getSecurity()->generateRandomString();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
```
|
||||
|
||||
`validateAuthKey` メソッドでは、パラメータとして渡された `$authKey` 変数 (これ自体はクッキーから読み出されます) をデータベースから読み出された値と比較する必要があるだけです。
|
@ -65,7 +65,7 @@ URL マネージャで `enableStrictParsing` オプションを使っている
|
||||
|
||||
ロギングとプロファイリングは、フレームワークとアプリケーションの両方の実行フローを理解するのを助けてくれる、単純ながら強力なツールです。これらのツールは、開発環境でも本番環境でも役に立ちます。
|
||||
|
||||
本番環境では、[ロギング](logging.md) のガイドの節で説明されているように、著しく重要なメッセージを手動でログに取るだけにとどめるべきです。
|
||||
本番環境では、[ロギング](runtime-logging.md) のガイドの節で説明されているように、著しく重要なメッセージを手動でログに取るだけにとどめるべきです。
|
||||
本番環境で全てのメッセージをログに取り続けるのは、パフォーマンスへの損害が大きすぎます。
|
||||
|
||||
開発環境では、ログは多く取れば取るほど良いでしょう。とりわけ、実行トレースの記録は有用です。
|
||||
|
@ -104,13 +104,17 @@ public function rules()
|
||||
あるいは、PHP の `Datetime` クラスによって認識される書式に接頭辞 `php:` を付けた文字列でも構いません。
|
||||
サポートされている書式については、<http://php.net/manual/ja/datetime.createfromformat.php> を参照してください。
|
||||
このプロパティが設定されていないときは、`Yii::$app->formatter->dateFormat` の値を取ります。
|
||||
- `timestampAttribute`: このバリデータが入力された日付/時刻から変換した UNIX タイムスタンプを代入することが出来る属性の名前。
|
||||
- `timestampAttribute`: このバリデータが、入力された日付/時刻から変換した UNIX タイムスタンプを代入することが出来る属性の名前。
|
||||
これは、検証される属性と同じ属性であってもかまいません。
|
||||
その場合は、元の値は検証実行後にタイムスタンプで上書きされます。
|
||||
[DatePicker で日付の入力を扱う](widget-jui#datepicker-date-input) に使用例がありますので、参照してください。
|
||||
|
||||
入力が必須でない場合には、date バリデータに加えて、default バリデータ (デフォルト値フィルタ) を追加すれば、空の入力値が `NULL` として保存されることを保証することが出来ます。
|
||||
そうしないと、データベースに `0000-00-00` という日付が保存されたり、デートピッカーの入力フィールドが `1970-01-01` になったりしてしまいます。
|
||||
|
||||
```php
|
||||
[['from_date', 'to_date'], 'default', 'value' => null],
|
||||
[['from_date', 'to_date'], 'default', 'value' => null],
|
||||
[['from_date', 'to_date'], 'date'],
|
||||
```
|
||||
|
||||
## [[yii\validators\DefaultValueValidator|default]] <span id="default"></span>
|
||||
|
@ -530,7 +530,33 @@ class TranslationEventHandler
|
||||
|
||||
### `message` コマンドを使う <a name="message-command"></a>
|
||||
|
||||
TBD
|
||||
翻訳は [[yii\i18n\PhpMessageSource|php ファイル]]、[[yii\i18n\GettextMessageSource|.po ファイル]、または [[yii\i18n\DbMessageSource|database]] に保存することが出来ます。
|
||||
追加のオプションについてはそれぞれのクラスを参照してください。
|
||||
|
||||
まず最初に、構成情報ファイルを作成する必要があります。
|
||||
どこに保存したいかを決めて、次のコマンドを発行してください。
|
||||
|
||||
```bash
|
||||
./yii message/config path/to/config.php
|
||||
```
|
||||
|
||||
作成されたファイルを開いて、あなたの要求に合わせてパラメータを修正します。
|
||||
特に、下記の項目に注意を払ってください。
|
||||
|
||||
* `languages`: あなたのアプリケーションが翻訳されるべき言語を表す配列。
|
||||
* `messagePath`: メッセージファイルを保存するパス。
|
||||
これは、アプリケーションの構成情報で記述されている `i18n` の `basePath` と合致しなければなりません。
|
||||
|
||||
> エイリアスがここではサポートされていないことに注意してください。
|
||||
構成情報ファイルの位置からの相対パスで記述しなければなりません。
|
||||
|
||||
構成情報ファイルの編集が完了すれば、ついに、下記のコマンドを使ってメッセージを抽出することが出来ます。
|
||||
|
||||
```bash
|
||||
./yii message path/to/config.php
|
||||
```
|
||||
|
||||
これで、(あなたがファイルベースの翻訳を選択していた場合は) `messagePath` ディレクトリにファイルが出現します。
|
||||
|
||||
|
||||
ビュー
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
> Note|注意: この節はまだ執筆中です。
|
||||
|
||||
[ベーシック](https://github.com/yiisoft/yii2/tree/master/apps/basic) と [アドバンスト](https://github.com/yiisoft/yii2/tree/master/apps/advanced) のアプリケーションテンプレートは、あなたの要求をほとんどカバーする優れたものですが、あなたのプロジェクトを開始するためのあなた自身のテンプレートを作成したいこともあるでしょう。
|
||||
[ベーシック](https://github.com/yiisoft/yii2-app-basic) と [アドバンスト](https://github.com/yiisoft/yii2-app-advanced) のアプリケーションテンプレートは、あなたの要求をほとんどカバーする優れたものですが、あなたのプロジェクトを開始するためのあなた自身のテンプレートを作成したいこともあるでしょう。
|
||||
|
||||
Yii におけるアプリケーションテンプレートは、`composer.json` ファイルを含み、Composer パッケージとして登録されたレポジトリであるに過ぎません。
|
||||
どのようなレポジトリでも、Composer パッケージとして特定し、`create-project` Composer コマンドによってインストール可能なものにすることが出来ます。
|
||||
|
@ -1,8 +1,6 @@
|
||||
テンプレートエンジンを使う
|
||||
==========================
|
||||
|
||||
> Note|注意: この節はまだ執筆中です。
|
||||
|
||||
デフォルトでは、Yii は PHP をテンプレート言語として使いますが、[Twig](http://twig.sensiolabs.org/) や [Smarty](http://www.smarty.net/) などの他のレンダリングエンジンをサポートするように Yii を構成することが出来ます。
|
||||
|
||||
`view` コンポーネントがビューのレンダリングに責任を持っています。
|
||||
@ -46,409 +44,8 @@
|
||||
上のコードを `composer.json` の `require` セクションに追加します。
|
||||
変更をファイルに保存した後、コマンドラインで `composer update --prefer-dist` を実行することによってエクステンションをインストールすることが出来ます。
|
||||
|
||||
Twig
|
||||
----
|
||||
具体的にテンプレートエンジンを使用する方法については、それぞれのドキュメントで詳細を参照してください。
|
||||
|
||||
Twig を使うためには、`.twig` という拡張子を持つファイルにテンプレートを作成しなければなりません
|
||||
(別のファイル拡張子を使っても構いませんが、それに対応してコンポーネントの構成を変更しなければなりません)。
|
||||
通常のビューファイルと違って、Twig を使うときは、コントローラで `$this->render()` を呼ぶときに拡張子を含めなければなりません。
|
||||
- [Twig ガイド](https://github.com/yiisoft/yii2-twig/tree/master/docs/guide-ja)
|
||||
- [Smarty ガイド](https://github.com/yiisoft/yii2-smarty/tree/master/docs/guide-ja)
|
||||
|
||||
```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#}`
|
||||
```
|
||||
|
@ -1,68 +0,0 @@
|
||||
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' => [],
|
||||
]
|
||||
]
|
||||
]
|
||||
```
|
@ -44,3 +44,53 @@ Yii ウィジェット
|
||||
- [[yii\jui\Sortable|Sortable]]
|
||||
- [[yii\jui\Spinner|Spinner]]
|
||||
- [[yii\jui\Tabs|Tabs]]
|
||||
|
||||
以下の節において、これらのウィジェットの使用例をいくつか紹介します。
|
||||
|
||||
|
||||
DatePicker で日付の入力を扱う <span id="datepicker-date-input"></span>
|
||||
-----------------------------
|
||||
|
||||
[[yii\jui\DatePicker|DatePicker]] ウィジェットを使うと、非常に便利な方法でユーザから日付の入力を収集することが出来ます。
|
||||
下記の例では、`deadline` 属性を持つ `Task` モデルを使用します。
|
||||
`deadline` 属性は、[ActiveForm](input-forms.md) を使ってユーザによって設定され、その値は unix タイムスタンプとしてデータベースに保存されます。
|
||||
|
||||
この状況において、共同して働くコンポーネントが三つあります。
|
||||
|
||||
- [[yii\jui\DatePicker|DatePicker]] ウィジェット。フォームの中で用いられ、モデルの `deadline` 属性のためのインプットフィールドを表示します。
|
||||
- [フォーマッタ](output-formatter.md) アプリケーションコンポーネント。ユーザに表示される日付の書式について責任を持ちます。
|
||||
- [DateValidator](tutorial-core-validators.md#date)。ユーザの入力を検証し、それを unix タイムスタンプに変換します。
|
||||
|
||||
最初に、フォームフィールドの [[yii\widgets\ActiveField::widget()|widget()]] メソッドを使って、フォームに日付選択のインプットフィールドを追加します。
|
||||
|
||||
```php
|
||||
<?= $form->field($model, 'deadline')->widget(\yii\jui\DatePicker::className(), [
|
||||
// bootstrap を使っている場合は、次の行がインプットフィールドの正しいスタイルをセットします
|
||||
'options' => ['class' => 'form-control'],
|
||||
// ... ここで、DatePicker のプロパティをさらに構成することが出来ます
|
||||
]) ?>
|
||||
```
|
||||
|
||||
第二のステップは、[モデルの rules() メソッド](input-validation.md#declaring-rules) において、date バリデータを構成することです。
|
||||
|
||||
```php
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
// ...
|
||||
|
||||
// 空の値がデータベースで NULL として保存されることを保証する
|
||||
['deadline', 'default', 'value' => null],
|
||||
|
||||
// 日付を検証し、`deadline` 属性を unix タイムスタンプで上書きする
|
||||
['deadline', 'date', 'timestampAttribute' => 'deadline'],
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
ここでは、追加で [デフォルト値フィルタ](input-validation.md#handling-empty-inputs) を使って、空の値がデータベースで `NULL` として保存されることを保証しています。
|
||||
日付の値が [required](tutorial-core-validators.md#required) である場合は、このフィルタを省略することが出来ます。
|
||||
|
||||
日付選択ウィジェットと date バリデータのデフォルトの日付書式は、両方とも、`Yii::$app->formatter->dateFormat` の値です。
|
||||
このプロパティを使えば、アプリケーション全体の日付書式を構成することが出来ます。
|
||||
日付書式を変更するためには、[[yii\validators\DateValidator::format]] と [[yii\jui\DatePicker::dateFormat]] を構成しなければなりません。
|
||||
|
Reference in New Issue
Block a user