在PHP Trait Laravel 5.5中使用从父类导入的类

时间:2019-02-08 15:43:52

标签: php laravel laravel-5.5

我目前正在研究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内再次包含要使用的模型类,还是我做错了其他事情?

1 个答案:

答案 0 :(得分:0)

如果将new与可变的类名一起使用,则必须使用完全限定的类名。我猜这里是new $class_name的根本原因,因为$class_name必须是这样的:'App \ Models \ ImagenDiapositiva'或任何完整的名称空间。只需更改调用$request->class_name = 'ImagenDiapositiva';以反映该类的全名即可。

相关问题