| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | <?phpnamespace App\Admin\Extensions\Field;use Encore\Admin\Admin;use Encore\Admin\Form;use Encore\Admin\Form\Field;use Illuminate\Support\Collection;/** * Class Template * 表单模板 * @method Field\Text           text($column, $label = '') * @method Field\Checkbox       checkbox($column, $label = '') * @method Field\Radio          radio($column, $label = '') * @method Field\Select         select($column, $label = '') * @method Field\MultipleSelect multipleSelect($column, $label = '') * @method Field\Textarea       textarea($column, $label = '') * @method Field\Hidden         hidden($column, $label = '') * @method Field\Id             id($column, $label = '') * @method Field\Ip             ip($column, $label = '') * @method Field\Url            url($column, $label = '') * @method Field\Color          color($column, $label = '') * @method Field\Email          email($column, $label = '') * @method Field\Mobile         mobile($column, $label = '') * @method Field\Slider         slider($column, $label = '') * @method Field\Map            map($latitude, $longitude, $label = '') * @method Field\Editor         editor($column, $label = '') * @method Field\File           file($column, $label = '') * @method Field\Image          image($column, $label = '') * @method Field\Date           date($column, $label = '') * @method Field\Datetime       datetime($column, $label = '') * @method Field\Time           time($column, $label = '') * @method Field\Year           year($column, $label = '') * @method Field\Month          month($column, $label = '') * @method Field\DateRange      dateRange($start, $end, $label = '') * @method Field\DateTimeRange  datetimeRange($start, $end, $label = '') * @method Field\TimeRange      timeRange($start, $end, $label = '') * @method Field\Number         number($column, $label = '') * @method Field\Currency       currency($column, $label = '') * @method Field\HasMany        hasMany($relationName, $callback) * @method Field\SwitchField    switch($column, $label = '') * @method Field\Display        display($column, $label = '') * @method Field\Rate           rate($column, $label = '') * @method Field\Divide         divider() * @method Field\Password       password($column, $label = '') * @method Field\Decimal        decimal($column, $label = '') * @method Field\Html           html($html, $label = '') * @method Field\Tags           tags($column, $label = '') * @method Field\Icon           icon($column, $label = '') * @method Field\Embeds         embeds($column, $label = '') */class Template{    /**     * 对应表单     * @var Collection     */    protected $templates;    protected $nowId;    public function __construct()    {        $this->templates=new Collection();    }    public function setTemplatesId($id)    {        $this->nowId=$id;        if (!$this->templates->has($id)) {            $this->templates->put($id, new Collection());        }        return $this;    }    protected function pushField(Field $field)    {        $this->templates->get($this->nowId)->push($field);    }    protected function getHtmlAndScript()    {        $htmls = [];        $scripts = [];        /* @var Field $field */        foreach ($this->templates as $key => $template) {            $html='';            $script=[];            foreach ($template as $field) {                //when field render, will push $script to Admin                $html.= $field->render();                /*                 * Get and remove the last script of Admin::$script stack.                 */                if ($field->getScript()) {                    $script[] = array_pop(Admin::$script);                }            }            $htmls[$key]=$html;            $scripts[$key]=implode("\r\n", $script);        }        return [$htmls, $scripts];    }    /**     * Add nested-form fields dynamically.     *     * @param string $method     * @param array  $arguments     *     * @return mixed     */    public function __call($method, $arguments)    {        if ($className = Form::findFieldClass($method)) {            $column = array_get($arguments, 0, '');            /* @var Field $field */            $field = new $className($column, array_slice($arguments, 1));            $this->pushField($field);            return $field;        }        return $this;    }    public function render()    {        list($template, $script) = $this->getHtmlAndScript();        return view('admin.field.template')->with('templates', $template)->with('scripts', $script)->render();    }}
 |