# Ringコンポーネント

Ringコンポーネントは、リクエストでアップロードされたファイルを、ビヘイビアが保存できる形に整えます。確認画面のあるフォームでは、アップロードされたファイルをセッションに保持します。

<a id="adding-the-component"></a>

## コンポーネントを追加する

コントローラーにコンポーネントを追加します。

```php
public $components = ['Session', 'Filebinder.Ring'];
```

このコンポーネントは、[Labelヘルパー](https://pieceofcake2.github.io/filebinder/ja/label.md)もコントローラーに追加します。

<a id="saving-uploaded-files"></a>

## アップロードされたファイルを保存する

リクエストデータを保存する前に、`bindUp()`を呼びます。

```php
$this->Ring->bindUp();
```

`bindUp()`は、モデルのファイルのフィールドごとに次の処理をします。

1. アップロードされたファイルを、フィールドの`tmpPath`に移動します。
2. リクエストデータにあるアップロードの情報を、ファイルの情報に置き換えます。ビヘイビアはこのファイルの情報を保存します。

`bindUp()`はコントローラーのモデルを使います。別のモデルを使うには、モデルの名前を渡します。

```php
$this->Ring->bindUp('Post');
```

<a id="forms-with-a-confirmation-page"></a>

## 確認画面のあるフォーム

確認画面のあるフォームでは、リクエストが何度かに分かれます。ユーザーはフォームでファイルをアップロードし、確認画面を見てから保存します。アップロードしたファイルは、この間ずっと残しておく必要があります。

`bindDown()`は、リクエストデータにあるファイルの情報をセッションに保存します。バリデーションエラーのあるフィールドは保存しません。

```php
$this->Ring->bindDown();
```

次のリクエストで新しいファイルがアップロードされなければ、`bindUp()`はセッションからファイルの情報を戻します。フォームのリクエストのたびに`bindUp()`を呼んでください。

描画の前に`bindDown()`を自動で呼ぶには、`bindUp()`の第2引数に`true`を渡します。

```php
$this->Ring->bindUp(null, true);
```

保存前のファイルも、Labelヘルパーで確認画面に表示できます。[ファイルのURL](https://pieceofcake2.github.io/filebinder/ja/label.md#urls-of-the-files)を参照してください。

<a id="methods"></a>

## メソッド

| メソッド | 説明 |
| --- | --- |
| `bindUp($modelName = null, $autoBindDown = false)` | リクエストデータにあるアップロードされたファイルをフィールドの`tmpPath`に移動し、ファイルの情報に置き換えます。ファイルがアップロードされていなければ、`bindDown()`がセッションに保存したファイルの情報を戻します。`$autoBindDown`を指定すると、描画の前に`bindDown()`を呼びます。 |
| `bindDown($modelName = null)` | リクエストデータにあるファイルの情報をセッションに保存します。バリデーションエラーのあるフィールドは除きます。 |
