在Laravel 5.1中动态加载模型 [英] Load in models dynamically in Laravel 5.1

查看:279
本文介绍了在Laravel 5.1中动态加载模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Laravel和框架的新手,我觉得我的答案很简单

I'm new to Laravel and frameworks in general, and am having trouble with something I assume has an easy answer

我正在建立一个管理面板,我想根据给定的路由在表格中加载.在我的路线文件中,我有:

I'm building an admin panel, and I want to load in tables based on the route given. In my Routes file I have:

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

在我的AdminController中,我有:

In my AdminController I have:

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时,出现此错误:

When I go to /admin/table1 this I get this error:

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

我很确定这是行不通的,因为不允许将$ variables作为类名,例如$table::all().最后,我要避免的是必须执行以下操作:

I pretty sure this doesn't work because I'm not allowed to have $variables as class names like $table::all(). In the end what I am trying to avoid is having to do something like this:

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));
}

当然,如果您要使用更简单的路由参数(例如用户)代替用户",则可以这样做:

Of course if you want to use simpler route parameters like users instead of User you can do like so:

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

这篇关于在Laravel 5.1中动态加载模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆