どーも!marusukeです!
前回の記事で、blog詳細ページを作成しました!今回は、blog記事を追加するための入力フォームをlaminas-formコンポーネントを活用して作ります!
作成の流れとしては、
- Formクラスを作成する。 <= 現在ここです!
- コントローラーを作る。
- コントローラーのインスタンス化のためのFactoryとルートを作る。
- モデル(repositoryクラス)を作成する。
- view側を作る。
となります!少し長いですが、記事を分けながら少しづつ進めていきます!
laminas-formコンポーネントとは?
簡単に説明すると、laminasでのformインスタンス作成用コンポーネントです。
laminasでは、formをインスタンスとして作成し、view側でそのメソッドを呼び出して、ユーザーがデータを入力するformを作成します。
laminas-formコンポーネントの特徴として、
- 「fieldset」というformの雛形のようなインスタンスを作成できること
- formコンポーネント内部に検証ルールがあるため、isValid()メソッドを呼び出すだけで、入力されたデータの検証ができること(エンティティオブジェクトにinputfilterの設定が必要です)
などがあります。
laminas-formについての公式ドキュメントはこちらです。
blog記事入力用のFieldsetを作る
laminas-formコンポーネントを使用して、Formインスタンスの元となるFieldsetを作成します。
Fieldsetは、Formインスタンス作成時に使用する使い回し可能な、Formの雛形のようなものです。Fieldsetについての公式ドキュメントはこちらです。Form Collections
今回のFieldsetクラスは以下のような実装になります。
srcディレクトリ内に新たにFormディレクトリを作成し、その中にFieldsetクラスとFormクラスを作成していきます。
module/Blog/src/Form/PostFieldset.php
<?php
// namespaceは新たに作ったFormディレクトリになります。
namespace Blog\Form;
// Fieldsetサブコンポーネントの呼び出しです。
use Laminas\Form\Fieldset;
// 今回はPostFieldsetというクラス名にしています。
class PostFieldset extends Fieldset
{
// init()メソッドが必要になります。
public function init()
{
$this->add([
'type' => 'hidden',
'name' => 'id',
]);
// ①
$this->add([
'type' => 'text',
'name' => 'title',
'options' => [
'label' => 'Post Title',
],
]);
$this->add([
'type' => 'textarea',
'name' => 'text',
'options' => [
'label' => 'Post Text',
],
]);
}
}
// ①について簡単に説明します。
以下のような既存のaddメソッドにtype, nameなどの属性を指定します。
$this->add([
'type' => 'text', // HTMLのinputタグのtype属性を指定します。
'name' => 'title', // name属性を指定します。
'options' => [
'label' => 'Post Title', // label名を指定します。
],
]);
これでFieldsetが完成しました!次はFormクラスを作っていきます。
Formクラスを作成する!
今回作成するPostFormクラスは以下のようになります。先ほど作ったPostFieldsetクラスを使用して簡単に作成します。
module/Blog/src/Form/PostForm.php
<?php
namespace Blog\Form;
// Formコンポーネントを使えるようにします。
use Laminas\Form\Form;
class PostForm extends Form
{
// Formクラスを作るときもinit()メソッドを作成します。
public function init()
{
// ①
$this->add([
'name' => 'post',
'type' => PostFieldset::class,
]);
// ②
$this->add([
'type' => 'submit',
'name' => 'submit',
'attributes' => [
'value' => 'Insert new Post',
],
]);
}
}
// ①と// ②の説明をします。
// ①について
$this->add([
// view側でPostFormインスタンスを呼び出す時のnameの指定です。
'name' => 'post',
// 使用するFieldsetクラスを呼び出します。
'type' => PostFieldset::class,
]);
// ②について
$this->add([
'type' => 'submit', // HTMLのinputタグのtype属性の指定です。
'name' => 'submit', // HTMLのinputタグのname属性の指定です。
'attributes' => [
'value' => 'Insert new Post', // ボタンの文字を指定しています。
],
]);
ここまでで、この記事の目標であるPostFieldsetクラスとPostFormクラスを作成することが出来ました!
お疲れ様でした!
次はコントローラー(WriteController)を作成していきます!
コメント