天天看點

laravel admin 自定義編輯非本清單的model資料:actionScript

作者:會動的耳朵1001

laravel admin action操作明面上的編輯隻針對目前行對應的model,如果要編輯從屬的model則需要js去配合,也就是傳參

laravel admin 自定義編輯非本清單的model資料:actionScript

自定義action繼承的虛構類的基類裡有個actionScript方法可重寫,可用來送出額外的參數

laravel admin 自定義編輯非本清單的model資料:actionScript

但是直接在handle方法裡是不允許直接使用$a的值的。有點像java的final ,具體的原因沒搞明白。

laravel admin 自定義編輯非本清單的model資料:actionScript

網上查到一個 使用session傳參的。有點違背程式設計的思想。是以就翻了下源碼,嘗試了三次才成功。

setAgentId方法用來指派,但是handle方法接收不到新值。

parameters方法 是用來設定model參數的,單一作用無法重寫。

// GridAction.php   
/**
     * @return array
     */
    public function parameters()
    {
        return ['_model' => $this->getModelClass()];
    }           

翻找RowAction的基類Action.php 才發現actionScript方法可重寫,可傳參。以前也看到過這個方法,但是沒發現他的具體作用。

// Action.php
/**
     * @return mixed
     */
    protected function addScript()
    {
        if (!is_null($this->interactor)) {
            return $this->interactor->addScript();
        }

        $parameters = json_encode($this->parameters());

        $script = <<<SCRIPT

(function ($) {
    $('{$this->selector($this->selectorPrefix)}').off('{$this->event}').on('{$this->event}', function() {
        var data = $(this).data();
        var target = $(this);
        Object.assign(data, {$parameters});
        {$this->actionScript()}  
        {$this->buildActionPromise()}
        {$this->handleActionPromise()}
    });
})(jQuery);

SCRIPT;

        Admin::script($script);
    }
   /**
     * 這個就像form,html,href等方法,允許重寫
     * @return string
     */
    public function actionScript()
    {
        return '';
    }           

作者還是很用心的。