php – 在Laravel 5.1中动态加载模型

我是Laravel的新手和一般的框架,我遇到的问题很简单

我正在构建一个管理面板,我想根据给定的路径加载表.在我的Routes文件中,我有

Route::get('/admin/{table}', 'AdminController@table');

在我的AdminController中,我有

public function table()
{
    if (file_exists(app_path() . '/' . $table . '.PHP')){
        $data = $table::all();
    } else {
        abort(404);
    }

    return view('admin.pages.' . $table, compact($data));
}

当我转到/ admin / table1时,我收到此错误

FatalErrorException in AdminController.PHP line 20:
Class 'table1' not found

我很确定这不起作用,因为我不允许将$变量作为类名,如$table :: all().最后我要避免的是必须做这样的事情:

public function table1()
{
    $data = table1::all();
    return view('admin.pages.table1', compact($data));
}

public function table2()
{
    $data = table2::all();
    return view('admin.pages.table2', compact($data));
}

public function table3()
{
    $data = table3::all();
    return view('admin.pages.table3', compact($data));
}

...

任何意见,将不胜感激.

解决方法:

public function table($table)
{
    $class = 'App\\' . $table;
    if (class_exists($class)) {
        $data = $class::all();
    } else {
        abort(404);
    }

    return view('admin.pages.' . $table, compact($data));
}

当然,如果你想使用更简单的路由参数,比如用户而不是用户,你可以这样做:

$class = 'App\\' . ucwords(rtrim($table,'s'));

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...