我目前正在研究PHP特质,这将帮助我在使用Laravel框架的某些类控制器中重用代码。
我想让trait方法尽可能地动态,但是当尝试访问父类导入的类时,我得到了Class not found exception
。
我的班级控制器如下:
namespace App\Http\Controllers\Admin;
use App\Models\ {
Curso,
Leccion,
Diapositiva,
ImagenDiapositiva
};
use App\Traits\TestTrait;
class DiapositivasController extends Controller{
use TestTrait;
public function addRecord(Request $request){
$request->class_name = 'ImagenDiapositiva';
$this->addImage($request);
}
}
我的特质:
namespace App\Traits;
trait TestTrait{
public function addImage($request){
$class_name = $request->class_name;
$diapositiva = new $class_name;
//extra code
}
}
所以我的疑问是,我是否必须在Trait内再次包含要使用的模型类,还是我做错了其他事情?
答案 0 :(得分:0)
如果将new
与可变的类名一起使用,则必须使用完全限定的类名。我猜这里是new $class_name
的根本原因,因为$class_name
必须是这样的:'App \ Models \ ImagenDiapositiva'或任何完整的名称空间。只需更改调用$request->class_name = 'ImagenDiapositiva';
以反映该类的全名即可。