【发布时间】:2016-11-13 00:20:19
【问题描述】:
我正在开发一个宁静的 laravel 应用程序,我需要知道在 Laravel 中实现路由、控制器和方法以同时支持 restful requests 和 HTTP web requests 的最佳实践是什么,我们可以轻松创建资源控制器和然后将以下行添加到 Laravel 中的路由文件中:
Route::resource('Photo', 'PhotoController');
然后在PhotoController 中,我们只需要添加以下代码行,它们会从所有照片中返回json 响应:
class PhotoController {
public function index()
{
$photos = Photo::all();
return response()->
json(['result' => $photos]);
}
}
我们还需要一个Controller 和一个method,它们响应网络HTTP 请求并返回一个网页,而不是一个向网络用户显示所有照片的json 响应
问题: 放置此方法和控制器的最佳位置在哪里?将它放在同一个控制器中并返回视图是一种好习惯吗?像下面的例子
class PhotoController{
public function getAll(){
$photos = Photo::getAll();
return view('views',['photos'=>$photos]);
}
}
或者创建另一个Controller 并在那里处理网络请求并在routes 文件中添加一个新的rout 例如:mysite.com\photos\all 到路由文件?
或者我是否必须将其保存在另一个 Controller 中,或者我是否必须确定该请求是否来自 Web 内的相同方法,如下例所示:
public function index()
{
$photos = Photo::all();
if ( from web ){
return view('views',['photos'=>$photos]);
} else {
return response()->
json(['result' => $photos]);
}
}
我还必须提到我之前问过以下问题: Best design practice to implement routes and controllers for a RESTFul Laravel app 但没有得到任何答复。
【问题讨论】:
-
您可能想检查请求是 ajax 还是请求需要 json 响应。您是否尝试过使用
if ($request->wantsJson()) {? -
我认为它们有很多解决方案,这完全取决于您的项目是什么。我喜欢有 2 套控制器、中间件、错误处理程序,并将我的所有逻辑放在公共服务类中
标签: rest laravel laravel-5 restful-url