Laravel-adminのformで使えるメソッドまとめ

# 概要
Laravel-adminのformで使えるメソッドをまとめたものです．一部公式ドキュメントと重複しています．

# 環境
Laravel 5.5 , Laravel-admin 1.6.9

## 共通で使えるメソッド

```php
$form->text('id','ID');
$form->text('id','value')->value(10);
$form->text('id','readOnly')->readOnly();
$form->text('id','disabled')->disable();
$form->text('id','attribute')->attribute(['disabled' => '' , 'required' => '']);
$form->text('id','required')->required(true);
$form->text('id','setLabelClass')->setLabelClass(['class1','asterisk']);
$form->text('id','setWidth')->setWidth(5,2);
```

![共通.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/12b6a600-0859-c606-7205-22c4f83c3aa0.png)

valueメソッドはhtmlのvalue属性を指定します．
readOnly，disabled，requiredメソッドはinputタグにそれぞれの属性を付与します．また，requiredメソッドはlabelタグにasteriskクラスを付与します．
setLabelClassメソッドはlabelタグにクラスを付与します．
setWidthメソッドはsetWidth(フォーム,ラベル)の順で長さを指定します．長さはbootstrapのgridシステムにしたがいます．

requiredメソッドなどでアスタリスクを付ける場合はpublic/css/admin.css (admin.css以外でも可) に

```css:public/css/admin.css
.asterisk:after {
    position: absolute;
    content: '*';
    right: 0px;
    color: red;
}
```

を追記します．

## 入力系
```php
$form->text('text');
$form->textarea('textarea');
$form->textarea('rows')->rows(2);
$form->url('url');
$form->email('email');
$form->password('password');
```

![入力.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/2b5bcb60-bd99-3735-b6e9-9b07c49c9557.png)

url，emailメソッドはアイコンが変わるだけで，ほとんどtextメソッドと同じ動作をします．
passwordメソッドは入力がドットに置き換わります．

## 数値
```php
$form->number('number');
$form->number('max')->max(10);
$form->number('min')->min(1);
$form->decimal('decimal');
$form->ip('ip');
$form->mobile('mobile');
$form->rate('rate');
```

![数字.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/98f1bc20-cdfe-bc67-149a-5118da502831.png)

numberメソッドは整数値用のフォームで，左右のボタンをクリックすると値が増減します．max，minメソッドで設定した値を超えないようにボタンが動作します．
decimalメソッドは数値用のフォームです．数値以外の文字を入力することはできません．
ipメソッドは各項が255を超えないように動作します．
mobileメソッドは数字以外の入力を受け付けません．

## 金額
```php
$form->currency('currency');
$form->currency('digits4')->digits(4);
$form->currency('symbol')->symbol('￥');
```

![金額.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/9aa6ddcb-dade-c3ac-dbae-77e510021973.png)

digitsメソッドは小数点以下の桁数を指定します．
symbolメソッドはアイコンを変更します．

## 日付
```php
$form->date('date');
$form->date('format')->format('DD-MM-YYYY');
$form->time('time');
$form->datetime('created_at','datetime');
```

![日付.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/9ee90d0d-7562-7557-4f65-b95f1926e506.png)

## チェックボックス
```php
$form->checkbox('checkbox')->options([
    'value1' , 'value2',
]);
$form->checkbox('checked')->options([
    'checked1' , 'checked2',
])->checked([
    'checked1',
]);
```

![チェックボックス.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/26dcbb0e-e420-77ad-c9d5-5f62bd6e88ca.png)

## ラジオボタン
```php
$form->radio('radio')->options([
    'option1' , 'option2'
]);
$form->radio('checked')->options([
    'option1' , 'option2' , 'option3',
])->checked([
    'option1' , 'option2',
]);
$form->radio('inline')->options([
    'option1' , 'option2' , 'option3',
])->inline();
$form->radio('stacked')->options([
    'option1' , 'option2' , 'option3',
])->stacked();
```

![ラジオボタン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/4b0442e4-8814-94c1-503a-00740813ad91.png)

## セレクトボックス
```php
$form->select('select')->options([
    'option1' , 'option2' , 'option3'
]);
$form->multipleSelect('multipleSelect')->options([
    'option1' , 'option2' , 'option3'
]);
```

![セレクトボックス.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/ce5247e2-4017-4af5-f672-80e65afa620b.png)

selectメソッドはセレクトボックスを表示します．
ajaxを用いてoptionを動的に生成することができます(公式ドキュメント参照)．
multipleSelectメソッドは複数を選択することができます．

## ファイル
```php
$form->file('file');
$form->image('image');
$form->imageField('imageField');
$form->multipleFile('multiple');
$form->multipleImage('multipleImage');
```

![ファイル.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/28c19726-abad-852f-0f3a-6f8e23e12ff9.png)

## タグ
```php
$form->tags('tags')->options([
    'option1' , 'option2' , 'option3',
]);
```

![タグ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/6a10c596-89f0-25ca-afa8-a8c3533b4db7.png)

タグメソッドは選択したタグをカンマで区切り，送信します．

## ボタン
```php
$form->button('button')->on('click',
<<<JS
console.log('click!!!')
JS
);
```

![ボタン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/9ad0a77c-5e38-31eb-0618-6f555bd9b2e9.png)

buttonメソッドはボタンを表示します．引数は

```javascript
$('{$this->getElementClassSelector()}').on('$event', function() {
    $callback
});
```
に文字列として埋め込まれます．\$eventが第一引数で，\$callbackが第二引数です．


## スライドバー・スイッチ
```php
$form->slider('slider');
$form->switch('switch');
```

![特殊.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/f76ff3bc-b42a-8745-0030-7ac3ae92cf01.png)

switchメソッドはboolean型のカラムで用います．

## カラーピッカー
```php
$form->color('Color');
$form->color('HEX')->hex();
$form->color('RGB')->rgb();
$form->color('RGBA')->rgba();
```

![カラー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/876bbf92-34d3-bac4-f3e4-5901337fa4e8.png)

左の赤の四角をクリックするとカラーピッカーが表示されます．


## 特殊表示
```php
$form->id('id');
$form->display('id','ID');
$form->display('id','with')->with(function(){
    return 'このページのIDは' . $this->id . 'です';
});
$form->divider();
$form->html('<div class="btn btn-primary">HTML</div>');
$form->icon('icon');
```

![特殊表示.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/ba4bea50-67dc-c54d-bc66-cb7f0260c0da.png)

idメソッドはreadonly属性を持ったフィールドを表示します．
displayメソッドは指定したカラムの値を表示します．この値はそのままHTMLに埋め込まれるため，送信されません．
withメソッドはdisplayメソッドで表示する内容を調整することができます．コールバック内の\$thisはモデルのインスタンスを指します．
dividorメソッドはその場所に\<hr\>を挿入します．
htmlメソッドはHTMLを直接埋め込むことができます．そのため，意図しない動作を引き起こす可能性があるので注意が必要です．
iconメソッドはアイコンを選ぶことができます．


## 隠し入力
```php
$form->hidden('hidden');
```

表示されないinput要素を生成します．

## HasMany
```php
$form->hasMany('books',function(Form\NestedForm $nestedForm) {
    $nestedForm->display('id');
});
$form->hasMany('books',function(Form\NestedForm $nestedForm) {
    $nestedForm->display('id');
})->disableCreate()->disableDelete();
```

![hasMany.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431996/0403f339-bd27-4eae-fa8c-b47b6c77ed09.png)

1対多の関係でつながったデータを表示します．
disableCreate，disableDeleteメソッドはそれぞれ新規・消去ボタンを無効化します．

次のような状況ではうまく動作しないことがあります：Authorモデルがbookカラムを持ち，更に子として

```php:Author.php
public function books() {
    return $this->hasMany(Book::class,'author_id')->orderBy('id','asc');
}
```

を持つ場合．
この場合，

```php:Author.php
public function books_table() {
    return $this->hasMany(Book::class,'author_id')->orderBy('id','asc');
}
```

のように名前の重複を避け，"hasMany('books_table' , func..."とすると動作します．

# 参考元
Laravel-adminドキュメント
https://laravel-admin.org/docs/