Closed6
Laravel Admin
公式
ひとまず最初はここを読む
version
"laravel/framework": "^7.0",
"encore/laravel-admin": "1.8.1",
管理画面ムードボード
resource配下にViewをおくことについて
結論
やめるべき
理由
おそらくresource配下のViewについてはカスタマイズを行う目的でおくことが多いかもしれないが、バージョンアップする際に結構Viewの変更が入っていることが多く、バージョンアップで簡単に大幅な変更が入る。
バージョンアップのたびにViewを結構修正する必要があることからやめた方が良い
もしViewをカスタマイズしたいのであれば、AdminControllerなどで、文字やツールなどを最低限変更する手段はあるので、できるだけそちらを使うか、別の手段を持って、Viewのカスタマイズを行うべき
やるにしてもできるだけ、ディレクトリを絞るとか考える方が修正する量を減らすことができるので、脳死でResourceに全てのViewをコピーすると辛い。
参考
Formの挙動について
- 何かの値をformのカラム などを並べた時点で個別で取得することはできない
- ある1カラムの値を別のカラムに対して詰めたいなどといった挙動は
$form->saving
や$form->saved
などを使ってそこで値を取得して詰め直すといった作業が必要
後から値を上書きしたい場合
$form->saving(function ($form) {
$form->relationship['relationship_property'] = 'overwrite_text';
}
とやってしまいがちだが、これだと上書きできないことも多い。
Indirect modification of overloaded property Encore\Admin\Form::$address has no effect
こういうエラーが出るため。値によっては出ないこともあるが、不安定になりやすいため基本的には次の書き方が推奨される
$form->saving(function ($form) {
$form->input('address.cep', preg_replace( '#[^0-9]#', '', $form->address['cep']));
});
An invalid form control with name='XXX' is not focusable.
tab()を使っている際に違うタブのrequired()メソッドの内容が発火してしまうため、送信できない
例えば、tabA, tabBというものを作成したとして。
再現実装手順
- tabAのcolumnAにrequired()を使って必須を実装
- tabBのcolumnAAにもrequired()を使って必須を実装
$form->tab(
'tabA',
function (Form $form) {
$form->text('columnA', 'TabATitle')
->required();
)->tab(
'tabB',
function (Form $tabform) use ($mentor){
$form->text('columnAA', 'TabBTitle')
->required();
}
);
これをやっちゃうとtabBの入力なしにtabAを送信すると、エラーも表示もなしにtabBの必須項目がないよとconsoleにエラーが出て送信できないという問題が存在します。
出るエラーについては、このような形式。ブラウザのコンソールに出ます。
An invalid form control with name='XXX' is not focusable.
↓該当のIssue
回避方法
- required()を全てrules('required')に置換する
$form->tab(
'tabA',
function (Form $form) {
$form->text('columnA', 'TabATitle')
->rules('required');
)->tab(
'tabB',
function (Form $tabform) use ($mentor){
$form->text('columnAA', 'TabBTitle')
->rules('required');
}
);
これだけ。内部実装的な問題なので、興味がある方は、該当Issueに出ている内容を見てみると良いかもです。
このスクラップは2022/05/03にクローズされました