我刚刚进入MVC和Laravel,对于正确处理事物的方式有疑问。
让我们说我正在用它的CMS或类似的东西建立一个网站。
我的登录页面是www.website.com,CMS位于www.website.com/cms/
CMS有一个导航菜单,其中每个项目代表数据库中的一个表。
让我们说 - 账户|文章|菜单 - 单击每个项目应该在每个表格中显示记录列表。
要做到这一点,我:
a)有路线
Route::get('cms/{requestedtable}', 'PagesController@CmsCreate');
在这条路线上我会
switch($requestedtable)
case 'accounts';
$data = Account::all();
case 'menu'
$data = Menu::all();
b)为每个项目准备一条路线
Route::get('cms/accounts/', 'AccountController@index');
public function index() {
Account::all()
插入,更新和删除相同。为每个事件创建路线更为正确
Route::get('cms/accounts/', 'AccountController@index');
Route::get('cms/accounts/create', 'AccountController@create');
Route::get('cms/accounts/update', 'AccountController@update');
或者只是一条路线,但使用不同的功能
Route::get('cms/{{requestedtable))/update', 'PageController@CmsUpdate');
我对动态选项感到害怕的是,如果我有30个桌子,我将有30个深度开关。但是,如果我有30张桌子,那么我也将拥有30个控制器。我总是希望尽可能保持我的代码标准化(即使是一个单词),即使我是唯一正在处理它的人。我喜欢以正确的方式做事。
感谢您提供任何意见。
答案 0 :(得分:2)
没有对错,两种方式都是有效的,虽然我更喜欢有一条路线,而不是一条带有通配符的路线并添加额外的逻辑。这似乎是错的,我向你保证,将来你会后悔的。
此外,我注意到您对执行典型的CRUD操作感兴趣,使用Resource Controller是保持routes.php
清洁的好方法。请注意,尽管资源控制器通常用于REST API,但您可以在任何Web应用程序中使用它们。
这是您的routes.php的方式:
Route::group(['prefix' => 'cms'], function()
{
Route::resource('Accounts','AccountsController');
Route::resource('Articles','ArticlesController');
Route::resource('Menu','MenuController');
});
这将是可用的路线:
请注意,您还可以在资源控制器上使用通配符here:
Route::resource('{resource}', 'PagesController');