Laravel 什么';这是将RESTful API和web路由结合在一起的正确方法
假设我想为外部设备(如Android)制作一个RESTful API,同时我想使用web路由和刀片模板使用该API 路由:api/articles/{id}/editLaravel 什么';这是将RESTful API和web路由结合在一起的正确方法,laravel,Laravel,假设我想为外部设备(如Android)制作一个RESTful API,同时我想使用web路由和刀片模板使用该API 路由:api/articles/{id}/edit public function API_edit(Article $article) { $article->body = request('body'); $article->save(); return response()->json([...]); } public funct
public function API_edit(Article $article)
{
$article->body = request('body');
$article->save();
return response()->json([...]);
}
public function edit(Article $article)
{
$article->body = request('body');
$article->save();
return redirect()->back()->with(['message' => 'Article edited']);
}
事情是这样的。我该怎么做才能不重蹈覆辙?因为我想创建另一个基本上与API_edit相同的方法是不合适的
路由:文章/{id}/edit
public function API_edit(Article $article)
{
$article->body = request('body');
$article->save();
return response()->json([...]);
}
public function edit(Article $article)
{
$article->body = request('body');
$article->save();
return redirect()->back()->with(['message' => 'Article edited']);
}
这肯定是错的,这是一个简单的例子,但如果逻辑更复杂呢?感觉不对。在这种情况下,这可能正是你应该做的。正如您所说,逻辑可能更复杂,在这种情况下,您可能不应该将其留在控制器中,而不管跨web/api路由重复使用。如果控制器需要执行的操作有任何复杂性,请将其提取到某种服务中。在这种情况下,这可能正是您应该做的。正如您所说,逻辑可能更复杂,在这种情况下,您可能不应该将其留在控制器中,而不管跨web/api路由重复使用。如果控制器需要执行的操作有任何复杂性,请将其提取到某种服务。您可以使用\light\Support\Facades\Request facade的wantsJson方法检查:
public function edit(Article $article)
{
$article->body = request('body');
$article->save();
$response = ['message' => 'Article edited'];
if (Request::wantsJson()) {
return response()->json($response);
}
return redirect()->back()->with($response);
}
您可以使用\illumb\Support\Facades\Request facade的wantsJson方法来检查:
public function edit(Article $article)
{
$article->body = request('body');
$article->save();
$response = ['message' => 'Article edited'];
if (Request::wantsJson()) {
return response()->json($response);
}
return redirect()->back()->with($response);
}
看看这篇文章,如果我理解正确的话() 当在用于外部框架(如Vue/Angular或任何外部服务)的RESTful API中使用时,您需要设置并“复制”这两者的路由,并在
web.php
内部处理这些路由,以处理内部请求
但是,您仍然可以将这些请求指向同一控制器
例如:
web.php
Route::get('/some/web/request', 'YourController@function')
Route::get('/some/api/request', 'YourController@function');
api.php
Route::get('/some/web/request', 'YourController@function')
Route::get('/some/api/request', 'YourController@function');
看看这篇文章,如果我理解正确的话() 当在用于外部框架(如Vue/Angular或任何外部服务)的RESTful API中使用时,您需要设置并“复制”这两者的路由,并在
web.php
内部处理这些路由,以处理内部请求
但是,您仍然可以将这些请求指向同一控制器
例如:
web.php
Route::get('/some/web/request', 'YourController@function')
Route::get('/some/api/request', 'YourController@function');
api.php
Route::get('/some/web/request', 'YourController@function')
Route::get('/some/api/request', 'YourController@function');
为什么不从API_edit调用edit,在edit方法中创建一个参数,说明它是否必须返回视图或JSON数据?为什么不从API_edit调用edit,在edit方法中创建一个参数,说明它是否必须返回视图或JSON数据?