php - 如何在 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']);
如何将特征用作路由控制器@方法?
解决方案
您不能将 Trait 用作控制器,因为 Trait 不是类,但实际上它们“是一种在 PHP 等单继承语言中重用代码的机制”。(参见 php 文档)。
特征是不可实例化的,这意味着在底层,Laravel 无法
$controller = new FileUploadTrait()
使用它。
要使用特征,您必须将其包含在某个类中,例如:
class MyController {
use FileUploadTrait;
}
然后你定义你的路线来使用你定义的那个类。
推荐阅读
- javascript - 如何在扩展面板中使用滚动查看
- javascript - 永久更新我从 chrome 扩展中的本地存储中获得的值
- ruby - Gemfile.lock 充满了我无法解决的冲突
- css - 删除加载条之间的所有空间 - ngx-skeleton-loader - Angular
- angular - 交互测试中的角度变化检测
- java - 使用 Hibernate 验证实体是否存在的最佳实践
- php - 获取 X-Sendfile 提供的字节数
- javascript - React-native RNFetchBlob:Axios Post 请求发送字符串而不是二进制数据
- java - 计算素数的大 O 表示法
- hibernate - 休眠时区。不同的价值观在哪里?