[英]Laravel REST Resource can't post to API
我已經在 Laravel 中構建了一個 REST API,它目前正在使用 MAMP 在本地運行,盡管我已經在實時服務器上嘗試過它並且出現了同樣的問題。
當我嘗試將我的表單發布到 API 時它不起作用,除非我同時讓 Artisan 在不同的端口號上為站點提供服務並發布到該 URL,即 www.mysite.com:2834/api/courses,我可以獲取瀏覽器中的頁面沒問題,只是 POST 會導致問題。
我啟用了 COR,並且我嘗試使用 PostMan 執行相同的 POST 請求,它給出了相同的結果,即當它只是我發布到的普通 URL www.mysite.com/api/courses 時不起作用但當我也工作時在不同的端口上運行 Artisan 並發布到 www.mysite.com:2834/api/courses。
奇怪的是,使用 CURL 完成后,POST 可以在沒有 Artisan 運行的情況下工作:
curl -i -H "X-Requested-With: XMLHttpRequest" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://www.mysite.io/api/courses --data "&author=tertertert&name=ertertert&description=ertertret&price=ertretret"
這是我的路線列表:
| | GET|HEAD | api/courses | api.courses.index | App\Http\Controllers\CourseController@index | web,cors |
| | POST | api/courses | api.courses.store | App\Http\Controllers\CourseController@store | web,cors |
| | GET|HEAD | api/courses/{courses} | api.courses.show | App\Http\Controllers\CourseController@show | web,cors |
| | PUT|PATCH | api/courses/{courses} | api.courses.update | App\Http\Controllers\CourseController@update | web,cors |
| | DELETE | api/courses/{courses} | api.courses.destroy | App\Http\Controllers\CourseController@destroy | web,cors |
和我的控制器:
<?php
namespace App\Http\Controllers;
use App\Course;
use App\Http\Requests;
use App\Http\Requests\CourseForm;
class CourseController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$courses = Course::all();
return response()->json(['courses' => $courses]);
}
/**
* @param CourseForm $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(CourseForm $request)
{
$course = new Course();
$course->author = $request->input('author');
$course->name = $request->input('name');
$course->description = $request->input('description');
$course->price = $request->input('price');
$course->save();
return response()->json(['message' => 'Course saved']);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$course = Course::find($id);
return response()->json(['course' => $course]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(CourseForm $request, $id)
{
if($request->ajax())
{
$course = Course::find($id);
$course->author = $request->input('author');
$course->name = $request->input('name');
$course->description = $request->input('description');
$course->price = $request->input('price');
$course->save();
return response()->json(['message' => 'Course updated']);
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$course = Course::find($id);
$course->delete();
return response()->json(['message' => 'Course removed']);
}
}
和我的路線文件:
<?php
Route::group(['prefix' => 'api', 'middleware' => ['cors']], function(){
Route::resource('courses', 'CourseController', ['except' => [
'create', 'edit'
]]);
});
Route::group(['prefix' => 'api', 'middleware' => ['cors']], function(){
Route::resource('test', 'HomepageController@index');
Route::resource('projects', 'ProjectController@index');
});
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
Route::group(['before' => 'auth', 'middleware' => ['auth']], function() {
Route::get('/admin/','DashboardController@overview');
});
//Route::get('/test', 'HomepageController@index');
女士們先生們,真面目掌上時尚我已經弄清楚到底是怎么回事……是網址末尾的斜杠把這一切搞砸了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.