Sia*_*osh 1 rest restful-url laravel laravel-5
我正在开发一个宁静的laravel应用程序,我需要知道在Laravel中实现路由,控制器和方法的最佳实践是什么,以支持我们restful requests,HTTP web requests我们可以轻松创建资源控制器,然后将以下行添加到routes文件在Laravel:
Route::resource('Photo', 'PhotoController');
然后在PhotoController我们只需要添加以下代码行,这些代码返回json所有照片的响应:
class PhotoController {
public function index()
{
$photos = Photo::all();
return response()->
json(['result' => $photos]);
}
}
Run Code Online (Sandbox Code Playgroud)
我们还需要一个Controller和一个method响应Web HTTP请求并返回一个网页而不是一个json响应的响应,该响应向Web用户显示所有照片
问题: 放置此方法的最佳位置在哪里和控制器是一个好的做法,将它放在同一个Controller中并返回一个视图?像下面的例子
class PhotoController{
public function getAll(){
$photos = Photo::getAll();
return view('views',['photos'=>$photos]);
}
}
Run Code Online (Sandbox Code Playgroud)
或者创建另一个Controller并在那里处理Web请求并rout在routes文件中添加一个新的例如:mysite.com\photos\all到routes文件?
或者我是否必须将此保留在另一个中,Controller或者我是否必须使用与以下示例相同的方法来确定请求是否来自Web:
public function index()
{
$photos = Photo::all();
if ( from web ){
return view('views',['photos'=>$photos]);
} else {
return response()->
json(['result' => $photos]);
}
}
Run Code Online (Sandbox Code Playgroud)
我还要提到我之前问过以下问题: 为RESTFul Laravel应用程序实现路由和控制器的最佳设计实践 但没有得到任何答案.
上次你提出这个问题时,你可能没有得到答案.这真的取决于你的项目.我会分享自己的偏好:
我有两套路由,中间件,控制器和公共服务.
路线:
//For web
Route::resource('photo', 'PhotoController');
/For API, with versioning
Route::resource('api/v1/photo', 'API\PhotoController');
Run Code Online (Sandbox Code Playgroud)
中间件
//For web
public function handle($request, Closure $next, $role="view")
{
if(Gate::denies($role.'-photo', $photo)){
if($role == "view"){
abort(404);
}
return $this->redirect($photo)->withErrors(['You are not authorized to see this photo']);;
}
}
return $next($request);
/For API, with versioning
public function handle($request, Closure $next, $role="view")
{
if(Gate::forUser(Auth::guard('api')->user())->denies($role.'-photo', $photo)){
if($role == "view"){
return Response::json([], 404);
}
return Response::json([], 403);
}
}
return $next($request);
Run Code Online (Sandbox Code Playgroud)
控制器
//PhotoController
class PhotoController{
//RESTful name here
public function index(){
$photoService = new PhotoService();
$photos = $photoService->getAll();
return view('views',['photos'=>$photos]);
}
}
//API\PhotoController
class PhotoController{
//RESTful name here
public function index(){
$photoService = new PhotoService();
$photos = $photoService->getAll();
return Response::json($photos, 200);
}
}
Run Code Online (Sandbox Code Playgroud)
服务
class PhotoService(){
//You could add a _construct() that would accept Request $request or User $user
public function getAll(){
return Photo::all();
}
}
Run Code Online (Sandbox Code Playgroud)
奖金:异常处理程序
你应该看看这个RestExceptionHandlerTrait.
它似乎有很多重复,但对我而言,这比$request->wantsJson()在任何地方添加更加可读和清晰.你可能认为这是一种矫枉过正,在某些情况下,这可能是一种矫枉过正.
但是,我喜欢这个,因为我的api和我的网站的请求和响应逻辑是分开的.因此,我可以处理不同的请求(例如:访问用户信息)和不同的响应(例如:JSON或视图).它还为每种类型的请求创建专用空间,允许您在应用程序的每个部分都需要时执行额外的逻辑.
再次,这是一个偏好和项目的问题,但我希望它能回答你的问题.
| 归档时间: |
|
| 查看次数: |
1329 次 |
| 最近记录: |