Laravel Route::apiResource Post 查询没有正常工作
Laravel Route::apiResource Post query didn't work properly
我使用 laravel 作为 api 但问题是当我想存储一个项目(模型:“Bataille”)时,我在route "api/batailles/" 但 laravel 执行我的控制器的 index() 函数而不是 store() 函数...(所有其他路由都有效)
这是我的路线:
Route::apiResource('batailles', 'BatailleController');
这是我的路线列表:
+--------+-----------+--------------------------+-------------------+-------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+--------------------------+-------------------+-------------------------------------------------+------------+
| | GET|HEAD | api/batailles | batailles.index | App\Http\Controllers\BatailleController@index | api |
| | POST | api/batailles | batailles.store | App\Http\Controllers\BatailleController@store | api |
| | GET|HEAD | api/batailles/{bataille} | batailles.show | App\Http\Controllers\BatailleController@show | api |
| | PUT|PATCH | api/batailles/{bataille} | batailles.update | App\Http\Controllers\BatailleController@update | api |
| | DELETE | api/batailles/{bataille} | batailles.destroy | App\Http\Controllers\BatailleController@destroy | api |
| | GET|HEAD | api/lieus | lieus.index | App\Http\Controllers\LieuxController@index | api |
| | POST | api/lieus | lieus.store | App\Http\Controllers\LieuxController@store | api |
| | GET|HEAD | api/lieus/{lieu} | lieus.show | App\Http\Controllers\LieuxController@show | api |
| | PUT|PATCH | api/lieus/{lieu} | lieus.update | App\Http\Controllers\LieuxController@update | api |
| | DELETE | api/lieus/{lieu} | lieus.destroy | App\Http\Controllers\LieuxController@destroy | api |
+--------+-----------+--------------------------+-------------------+-------------------------------------------------+------------+
最后这是我的 BatailleController :
<?php
namespace App\Http\Controllers;
use App\Bataille;
use Illuminate\Http\Request;
class BatailleController extends Controller
{
/**
* Display a listing of the resource.
*
* @return string
*/
public function index()
{
return Bataille::all()->toJson();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return false|string
*/
public function store(Request $request)
{
$bataille = new Bataille([
"nom" =>$request->input("nom"),
"date" =>$request->input("date"),
"lieus_id" =>$request->input("lieus_id")
]);
if($bataille->save()) {
return json_encode([
"method"=>"store",
"status"=>"OK"
]);
} else {
return json_encode([
"method"=>"store",
"status"=>"FAILED"
]);
}
}
/**
* Display the specified resource.
*
* @param \App\Bataille $bataille
* @return string
*/
public function show(Bataille $bataille)
{
return Bataille::find($bataille->id)->toJSON();
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Bataille $bataille
* @return false|string
*/
public function update(Request $request, Bataille $bataille)
{
$bataille1 = Bataille::find($bataille->id);
if ($request->input("nom") != null) {
$bataille1->nom = $request->input("nom");
}
if ($request->input("date") != null) {
$bataille1->date = $request->input("date");
}
if ($request->input("lieus_id") != null) {
$bataille1->lieus_id = $request->input("lieus_id");
}
if ($bataille1->save()) {
return json_encode([
"method" => "update",
"status" => "OK"
]);
} else {
return json_encode([
"method" => "update",
"status" => "FAILED"
]);
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Bataille $bataille
* @return false|string
*/
public function destroy(Bataille $bataille)
{
$batailled = Bataille::find($bataille->id);
if($batailled->delete()) {
return json_encode([
"method"=>"destroy",
"status"=>"OK"
]);
} else {
return json_encode([
"method"=>"destroy",
"status"=>"FAILED"
]);
}
}
}
我该如何解决这个问题?
你的 route:list 看起来不错。如果您正在点击 index() 那么您不是在发布,而是在获取。检查您的 ajax 电话。
确保您的请求设置为 POST 方法,因为资源中的路由具有相同的名称,但它们在 HTTP 方法中不同,例如,如果您使用 jQuery Ajax set 方法至 POST
$.ajax({
method: "POST",
url: window.location.origin + "/api/batailles",
data: {
name: "John",
location: "Boston"
}
})
.done(function(msg) {
alert("Data Saved: " + msg);
});
我使用 laravel 作为 api 但问题是当我想存储一个项目(模型:“Bataille”)时,我在route "api/batailles/" 但 laravel 执行我的控制器的 index() 函数而不是 store() 函数...(所有其他路由都有效)
这是我的路线:
Route::apiResource('batailles', 'BatailleController');
这是我的路线列表:
+--------+-----------+--------------------------+-------------------+-------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+--------------------------+-------------------+-------------------------------------------------+------------+
| | GET|HEAD | api/batailles | batailles.index | App\Http\Controllers\BatailleController@index | api |
| | POST | api/batailles | batailles.store | App\Http\Controllers\BatailleController@store | api |
| | GET|HEAD | api/batailles/{bataille} | batailles.show | App\Http\Controllers\BatailleController@show | api |
| | PUT|PATCH | api/batailles/{bataille} | batailles.update | App\Http\Controllers\BatailleController@update | api |
| | DELETE | api/batailles/{bataille} | batailles.destroy | App\Http\Controllers\BatailleController@destroy | api |
| | GET|HEAD | api/lieus | lieus.index | App\Http\Controllers\LieuxController@index | api |
| | POST | api/lieus | lieus.store | App\Http\Controllers\LieuxController@store | api |
| | GET|HEAD | api/lieus/{lieu} | lieus.show | App\Http\Controllers\LieuxController@show | api |
| | PUT|PATCH | api/lieus/{lieu} | lieus.update | App\Http\Controllers\LieuxController@update | api |
| | DELETE | api/lieus/{lieu} | lieus.destroy | App\Http\Controllers\LieuxController@destroy | api |
+--------+-----------+--------------------------+-------------------+-------------------------------------------------+------------+
最后这是我的 BatailleController :
<?php
namespace App\Http\Controllers;
use App\Bataille;
use Illuminate\Http\Request;
class BatailleController extends Controller
{
/**
* Display a listing of the resource.
*
* @return string
*/
public function index()
{
return Bataille::all()->toJson();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return false|string
*/
public function store(Request $request)
{
$bataille = new Bataille([
"nom" =>$request->input("nom"),
"date" =>$request->input("date"),
"lieus_id" =>$request->input("lieus_id")
]);
if($bataille->save()) {
return json_encode([
"method"=>"store",
"status"=>"OK"
]);
} else {
return json_encode([
"method"=>"store",
"status"=>"FAILED"
]);
}
}
/**
* Display the specified resource.
*
* @param \App\Bataille $bataille
* @return string
*/
public function show(Bataille $bataille)
{
return Bataille::find($bataille->id)->toJSON();
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Bataille $bataille
* @return false|string
*/
public function update(Request $request, Bataille $bataille)
{
$bataille1 = Bataille::find($bataille->id);
if ($request->input("nom") != null) {
$bataille1->nom = $request->input("nom");
}
if ($request->input("date") != null) {
$bataille1->date = $request->input("date");
}
if ($request->input("lieus_id") != null) {
$bataille1->lieus_id = $request->input("lieus_id");
}
if ($bataille1->save()) {
return json_encode([
"method" => "update",
"status" => "OK"
]);
} else {
return json_encode([
"method" => "update",
"status" => "FAILED"
]);
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Bataille $bataille
* @return false|string
*/
public function destroy(Bataille $bataille)
{
$batailled = Bataille::find($bataille->id);
if($batailled->delete()) {
return json_encode([
"method"=>"destroy",
"status"=>"OK"
]);
} else {
return json_encode([
"method"=>"destroy",
"status"=>"FAILED"
]);
}
}
}
我该如何解决这个问题?
你的 route:list 看起来不错。如果您正在点击 index() 那么您不是在发布,而是在获取。检查您的 ajax 电话。
确保您的请求设置为 POST 方法,因为资源中的路由具有相同的名称,但它们在 HTTP 方法中不同,例如,如果您使用 jQuery Ajax set 方法至 POST
$.ajax({
method: "POST",
url: window.location.origin + "/api/batailles",
data: {
name: "John",
location: "Boston"
}
})
.done(function(msg) {
alert("Data Saved: " + msg);
});