我有很多路由,对于一个页面(我的主页),我需要对几乎所有的模型进行采样。我是这样做的:
use AppModelsAa;
use AppModelsBb;
use AppModelsCc;
// and so on ...
Route::get('/', function () {
$data_for_view = [
'aa' => Aa::where('show', true)->inRandomOrder()->limit(4)->get(),
'bb' => Bb::where('published', true)->limit(4)->get(),
'cc' => Cc::where('published', true)->limit(4)->get()
// ... and so on
// ...
];
return view('welcome', $data_for_view);
});
然而,这是唯一使用这么多模型的路线。所以我的问题是:有没有更好的方法来实现这个目标?
这是标准做法吗?
一开始你应该使用一些控制器并将你所有的逻辑包装在方法
中例如:在web.php路由文件中添加:
use AppHttpControllersSomeController;
// SomeController
Route::get('/', [SomeController::class, 'index']);
在SomeController
<?php
namespace AppHttpControllers;
use AppModelsAa;
use AppModelsBb;
use AppModelsCc;
class SomeController extends Controller
{
public function index()
{
$data_for_view = [
'aa' => Aa::where('show', true)->inRandomOrder()->limit(4)->get(),
'bb' => Bb::where('published', true)->limit(4)->get(),
'cc' => Cc::where('published', true)->limit(4)->get()
// ... and so on
// ...
];
return view('welcome',compact('data_for_view'));
}
}
您可以使用artisan命令创建控制器。
php artisan make:controller SomeController