Laravel 变量代替类名创建对象?

<?php
namespace App\Http\Controllers\Admin;
use App\Models\User;
class CommonController extends Controller
{
    protected $table_name;
    public function index()
    {
        $user = $this->table_name;
        $userModel = new $user();
        $rows = $userModel->all();
        return view('admin.users.member-list', compact('users'));
    }
}

我这个是父类控制器,然后子类继承,并且子类中设置属性$table_name的值为"User",当前类可以使用$this->table_name获取到"User"值,我想使用$user来代表类名(User),达到方法可以动态创建不同的类,在php原生态的方式中,这是可行的,但是在这里会提示User类没有找到。只有使用 new User()才行

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案

你的 $this->table_name 必须是 App\Models\Users 才行。或者:

        $user = 'App\\Models\\'.$this->table_name;
        $userModel = new $user();
7年前 评论
讨论数量: 4
leo

你的 $this->table_name 必须是 App\Models\Users 才行。或者:

        $user = 'App\\Models\\'.$this->table_name;
        $userModel = new $user();
7年前 评论

@leo ·$users = $user::where('status', '!=', -1)->orderBy('id', 'asc')->paginate(20); ·
new一个对象可以了,如果我想直接这样调用,怎么办呢?

7年前 评论
leo

@Goodbye (new $user)->where('status', '!=', -1)->orderBy('id', 'asc')->paginate(20)

7年前 评论

@leo 谢谢,,搞定了,非常感谢

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!