Afi*_*ifa 2 php reflection laravel
我正在尝试通过其类名访问 Laravel 应用程序中的模型,但出现以下错误:
Class 'Asset' not found
Run Code Online (Sandbox Code Playgroud)
不过,我已经导入了这个模型。这是我的代码:
<?php
namespace App\Services;
use App\Models\Asset as Asset;
use App\Models\Benefit\BenefitGroup as BenefitGroup;
use App\Models\Benefit\EmployeeDependent as EmployeeDependent;
use App\Models\Country as Country;
use App\Models\Employee\Education as Education;
use App\Models\Employee\EducationType as EducationType;
use App\Models\Employee\Employee as Employee;
use App\Models\Employee\EmployeeVisa as EmployeeVisa;
use App\Models\Employee\VisaType as VisaType;
use App\Models\Note as Note;
use App\Models\PaidTimeOff\Policy as Policy;
use App\Models\PaidTimeOff\TimeOffType as TimeOffType;
use Illuminate\Database\Eloquent\Model;
class ACLService
{
public function getDefaultPermissions($roleType)
{
//Array to append all default permissions in single array without extra indexing
$permissions=[];
$models=['Asset', 'Employee', 'Education', 'EducationType', 'VisaType', 'EmployeeVisa', 'BenefitGroup', 'EmployeeDependent',
'Policy', 'TimeOffType','Country', 'Note'];
foreach ($models as $model) {
$permissions=$this->getModelPermissions($model, $roleType, $permissions);
}
}
public function getModelPermissions($model, $roleType, $currentPermissions)
{
$data=$model::getDefaultPermissionsForThisModel($roleType, $currentPermissions);
return $data;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我通过
App\Models\Asset
Run Code Online (Sandbox Code Playgroud)
代替
Asset
Run Code Online (Sandbox Code Playgroud)
然后错误得到解决,但我不想以这种格式传递数据,因为如果我们(将来)更改模型在项目中的位置,它会增加工作量。
这是一个不完整的项目,我们肯定会改变模型的位置。
我正在寻找更清洁的解决方案。
使用::class常量来获取正确命名空间的类名。如果您移动文件,这也将使其更容易。智能 IDE 将能够检测到引用。
$models=[
Asset::class,
Employee::class,
...
];
Run Code Online (Sandbox Code Playgroud)
这假定所有类都已导入到 PHP 文件的顶部。
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |