若类存在于包控制器中,则Laravel有条件加载特性



我已经构建了一个包含在我的一个Laravel项目中的Laravel 8包,该包可以选择性地使用另一个包的功能,例如Traits,我使用PHP的class_exists有条件地将这些加载到我的包的控制器中,但这在我的控制器的第22行引发了以下错误:

语法错误,意外的"使用"(T_use(

我的控制器看起来像:

<?php
namespace StsonlineInboundManagementHttpControllers;
use IlluminateHttpRequest;
use AppHttpControllersController;
use CompanyCorePackageModelsAffiliates;
use CompanyCorePackageModelsSettings;
if (class_exists('CompanyOptionalPackageTraits')) {
use CompanyOptionalPackageTraitsProxy;
}
class UtilityController extends Controller
{
if (class_exists('CompanyOptionalPackageTraits')) {
use Proxy;
}
/**
* Inbound Array
*
* Store private variables for use elsewhere.
*/
public $inboundArray
// ... functions below here
}

我错过了什么?我需要从另一个包的文件中提取函数和功能,只有当它存在时。

由于这是一个Laravel控制器,并且您不能有条件地选择根据请求创建的实例,因此您可以创建以下类:

class UtilityController extends Controller {
// Nothing used
}
class UtilityProxyController extends UtilityController  {
use Proxy;
// add utility controller functions that use the `Proxy` trait in this one
}

然后在web.php或api.php(或您声明路线的位置(中执行:

// Add all `UtilityContoller` routes here
if (class_exists('CompanyOptionalPackageTraitsProxy')) {
Route::get('someroute/path', [ UtilityProxyController::class, 'handler' ]);
}

你也可以制作另一个";回退";类,以防在这些情况下您不想要默认的404响应。

最新更新