HandleController.php 2.3 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 重写laravel-admin Handle 控制类
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @package   App\Admin\Rewrite\Controllers
 * @package   App\Admin\Rewrite\Controllers
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年3月23日,14:20:56
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Rewrite\Controllers;

use App\Admin\Rewrite\Actions\GridAction;
use App\Admin\Rewrite\Actions\RowAction;
use Encore\Admin\Controllers\HandleController as EncoreHandleController;
use Illuminate\Http\Request;
use Encore\Admin\Actions\Response;
use Exception;

/**
 * Class HandleController
 *
 * @package   App\Admin\Rewrite\Controllers
 * @package   App\Admin\Rewrite\Controllers
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年3月23日,14:20:56
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
class HandleController extends EncoreHandleController
{
    /**
     * @param Request $request
     *
     * @return $this|\Illuminate\Http\JsonResponse
     * @throws Exception
     */
    public function handleAction(Request $request)
    {
        $action = $this->resolveActionInstance($request);

        $model = null;
        $arguments = [];

        if ($action instanceof GridAction) {
            $model = $action->retrieveModel($request);
            $arguments[] = $model;
        }

        if (!$action->passesAuthorization($model)) {
            return $action->failedAuthorization();
        }

        if ($action instanceof RowAction) {
            $action->setRow($model);
        }

        try {
            $response = $action->validate($request)->handle(
                ...$this->resolveActionArgs($request, ...$arguments)
            );
        } catch (Exception $exception) {
            return Response::withException($exception)->send();
        }

        if ($response instanceof Response) {
            return $response->send();
        }
    }
}