在 Laravel 5.1 中动态加载模型
Load in models dynamically in Laravel 5.1
我是 Laravel 和一般框架的新手,我遇到了一些我认为很容易回答的问题
我正在构建一个管理面板,我想根据给定的路由加载表格。在我的路线文件中,我有:
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
我很确定这行不通,因为我不允许将 $variables 作为 class 名称,如 $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));
}
当然,如果您想使用更简单的路由参数,例如 users 而不是 User,您可以这样做:
$class = 'App\' . ucwords(rtrim($table,'s'));
我是 Laravel 和一般框架的新手,我遇到了一些我认为很容易回答的问题
我正在构建一个管理面板,我想根据给定的路由加载表格。在我的路线文件中,我有:
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
我很确定这行不通,因为我不允许将 $variables 作为 class 名称,如 $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));
}
当然,如果您想使用更简单的路由参数,例如 users 而不是 User,您可以这样做:
$class = 'App\' . ucwords(rtrim($table,'s'));