我正在开发一个包含控制器的软件包,我希望这个软件包与Laravel和Lumen项目兼容(或可用) . 我的问题是Laravel控制器扩展 Illuminate\Routing\Controller
和Lumen控制器扩展 Laravel\Lumen\Routing\Controller
. 我的包中的控制器不能扩展它们 .
我提出的唯一解决方案是让包内的控制器扩展 App\Http\Controllers\Controller
.
但我看到一些问题:
-
App\Http\Controllers\Controller
应该存在;这意味着如果App
名称空间的名称不同,它将无法工作 . -
包现在是"aware",它被包含在某个东西中 .
-
可测试性:由于对
App\Http\Controllers\Controller
的引用,我无法独立测试控制器 .
有更好的方法吗?
Edit 1
我发现其他类似的方式受到影响 . 例如,特征 Authorizable
的命名空间在Laravel中是 Illuminate\Foundation\Auth\Access
,而在Lumen中是 Laravel\Lumen\Auth
. 我正在使用一个使用该特征的模型 . 如何让我的模型兼容Lumen和Laravel?
1 回答
好吧,您可以简单地将两个不同的文件和类包装在if语句中,并检查要扩展的相应类 . 所以:
LaravelClass.php:
LumenClass.php
加载这两个文件只会加载其中一个类 . 在上面的代码中,我使用特征来加载控制器的内容,假设内容相同,你可以使用相同的特性而不必重复自己 .