首页 > 解决方案 > 如何在 laravel 中使用 trait 作为路由控制器方法?

问题描述

Target [App\Http\Controllers\Traits\FileUploadTrait] is not instantiable.

尝试将文件上传发送到此路由时出现此错误:

<?php

namespace App\Http\Controllers\Traits;

use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;

trait FileUploadTrait
{

    /**
     * File upload trait used in controllers to upload files
     */
    public function saveFiles(Request $request)
    {
      //some file upload code
    }

}

在我的路线中:

Route::post('upload/files', ['uses' => 'Traits\FileUploadTrait@saveFiles', 'as' => 'media.upload']);

如何将特征用作路由控制器@方法?

标签: phplaravel

解决方案


您不能将 Trait 用作控制器,因为 Trait 不是类,但实际上它们“是一种在 PHP 等单继承语言中重用代码的机制”。(参见 php 文档)

特征是不可实例化的,这意味着在底层,Laravel 无法 $controller = new FileUploadTrait()使用它。

要使用特征,您必须将其包含在某个类中,例如:

class MyController {
    use FileUploadTrait;
}

然后你定义你的路线来使用你定义的那个类。


推荐阅读