【发布时间】:2016-12-02 16:33:30
【问题描述】:
我目前正在使用 Laravel 重建我的 vanilla-PHP-App,但遇到以下问题。 我有多个数据库表,代表单词类别(名词,动词,副词,...)。对于每个表,我创建了一个单独的模型、一个 route::resource 和一个单独的资源控制器。例如:
NomenController.php
public function show($id)
{
$vocab = Nomen::find($id);
return view('glossarium.vocab_update', compact('vocab'));
}
和
动词控制器.php
public function show($id)
{
$vocab = Verb::find($id);
return view('glossarium.vocab_update', compact('vocab'));
}
...除了 Model 类之外,它们本质上是相同的。
我不想为每个模型创建一个单独的控制器,这完全一样。解决这个问题的最简单和优雅的方法是什么? 我是否应该只创建一个 VocabController.php 并为模型名称添加一个参数,例如:
Route::resource('/vocab/{category}', 'VocabController');
然后在这个控制器中添加一个构造方法
public function __construct ($category) {
if ($category == 'nomen') {
$this->vocab = App\Nomen;
}
else if ($category == 'verb') {
$this->vocab = App\Verb;
}
}
我想知道是否有更简单的方法可以做到这一点。我可以通过路由模型绑定以某种方式做到这一点吗?
提前致谢
【问题讨论】:
-
你建议的方式可行,但我建议创建一个名词/动词/等继承自的“词汇”模型,然后你只需要你的词汇控制器。
标签: php laravel model-view-controller