版本
"encore/laravel-admin": "^1.8",
問題及需求
需要在 laravel admin form tab
裡面純 HTML
顯示,如下圖所示,想要在橘色框裡直接顯示 HTML
而不是 laravel admin
表單組件的 HTML
顯示。
懶人包
- 創建一個新的組件,如
htmlCustom
,並繼承 Encore\Admin\Form\Field\Html
- 修改組件的
render
方法,以便直接返回要渲染的 HTML
而不是包含在框架中
- 在
app\Admin\bootstrap.php
中註冊組件
- 在您的代碼中使用該組件,可以是實現了
Htmlable、Renderable
或實現了 __toString()
方法的類或者是閉包,以便在表單中插入 HTML
內容。
具體示例代碼請往下查看。
自訂義組件
在 Laravel admin
中有一個類似表單組件 Encore\Admin\Form\Field\Html
,程式碼如下,但他會被限縮在 render function
裡所撰寫的 html
。
<?php
namespace Encore\Admin\Form\Field;
use Encore\Admin\Form\Field; use Illuminate\Support\Arr;
class Html extends Field {
protected $html = '';
protected $label = '';
protected $plain = false;
public function __construct($html, $arguments) { $this->html = $html;
$this->label = Arr::get($arguments, 0); }
public function plain() { $this->plain = true;
return $this; }
public function render() { if ($this->html instanceof \Closure) { $this->html = $this->html->call($this->form->model(), $this->form); }
if ($this->plain) { return $this->html; }
$viewClass = $this->getViewElementClasses();
return <<<EOT <div class="{$viewClass['form-group']}"> <label class="{$viewClass['label']} control-label">{$this->label}</label> <div class="{$viewClass['field']}"> {$this->html} </div> </div> EOT; } }
|
繼承並改寫組件
<?php
namespace App\Admin\Extensions;
use Encore\Admin\Form\Field\Html;
class htmlCustom extends Html {
public function render() { if ($this->html instanceof \Closure) { $this->html = $this->html->call($this->form->model(), $this->form); }
if ($this->plain) { return $this->html; }
return <<<EOT {$this->html} EOT; } }
|
註冊組件
修改app\Admin\bootstrap.php
use App\Admin\Extensions\htmlCustom;
Form::extend('htmlCustom', htmlCustom::class);
|
使用組件
插入html內容,參數可以是實現了 Htmlable、Renderable
或者實現了 __toString()
方法的類
$form->htmlCustom(function () use ($store_id) { $parameter; return view('admin.your_blade', compact('parameter')); }, null);
|
來源
組件管理->擴展自訂義組件
Laravel admin form tab表單插入html