首页 > 解决方案 > 如何用 Laravel 中的变量表示请求外观?

问题描述

我正在做一些实验,以使我的控制器尽可能地动态化。让我给你一个简短的。我有一个控制器徽标控制器,我设置如下:-

use App\Models\Logo;

class LogoController extends Controller
{
    public function add(Request $request)
    {
        $data['entity']         = 'logo';
        
        $newEntityObj                = new Logo;
        $newEntityObj->title         = $title;                         // set title 
        $newEntityObj->type          = $type;                          // set type
        $saveNewEntityData           = $newEntityObj->save();          // save the entity data 
        ------------------
        -------------------
    }
}

现在我做了一些改变,比如:-

使用变量来表示徽标模型。

$modelClass             = "App\\Models\\" . ucfirst($data['entity']);

然后,使用 $modelClass 变量对其执行 Eloquent 操作,如下所示:-

$newEntityObj                = new $modelClass;
$newEntityObj->title         = $title;                         // set title 
$newEntityObj->type          = $type;                          // set type
$saveNewEntityData           = $newEntityObj->save();          // save the entity data 

所以徽标控制器类已更新为:-

use App\Models\Logo;

class LogoController extends Controller
{
    public function add(Request $request)
    {
        $data['entity']         = 'logo';
        $modelClass             = "App\\Models\\" . ucfirst($data['entity']);

        $newEntityObj                = new $modelClass;
        $newEntityObj->title         = $title;                         // set title 
        $newEntityObj->type          = $type;                          // set type
        $saveNewEntityData           = $newEntityObj->save();          // save the entity data 
        ------------------
        -------------------
    }
}

现在我创建了一个 Validationb 请求文件来使用它进行表单验证。我这样使用它:-

// Request Validation Inclusion //
use App\Http\Requests\AdminRequests\LogoValidation\LogoRequest;

public function add(LogoRequest $request)
{
    --------------------------
    --------------------------
}

现在,public function add(LogoRequest $request)我不想写,而是想让它更有活力。像这样的东西: -

class LogoController extends Controller
{
    public static $classEntity          = 'logo';
    public static $classFormattedEntity = null;
    public static $classRequestVariable = null;

    public function __construct()
    {
        $entityArray    = explode('-', str_replace('_', '-', self::$classEntity));
        foreach($entityArray as $keyEntity => $rowEntity)
        {
            if($keyEntity !== 0)
                $entityArray[$keyEntity] = ucfirst($rowEntity);
        }
        self::$classFormattedEntity = implode('', $entityArray);
        self::$classRequestVariable = "App\\Http\\Requests\\AdminRequests\\" . ucfirst(self::$classFormattedEntity) . "Validation\\" . ucfirst(self::$classFormattedEntity) . "Request";
    }

    public function add(self::$classRequestVariable $request)
    {
        ..............................
        ..............................
    }
}

变量self::$classRequestVariable实际打印App\Http\Requests\AdminRequests\LogoValidation\LogoRequest

但是当我写public function add(self::$classRequestVariable $request)而不是public function add(LogoRequest $request)我收到以下错误:-

在此处输入图像描述

请帮忙!

标签: laravel-6

解决方案


推荐阅读