我已经在Laravel中构建了一个REST API,它目前正在使用MAMP本地运行,尽管我已经在实时服务器上尝试过,但也出现了同样的问题。
当我试图将我的表单发布到API时,除非我同时让Artisan在不同的端口号上为网站提供服务,并发布到该URL(即www.mysite.com:2834/API/curses),否则它不起作用。我可以在浏览器中获取页面,没有问题,只是发布导致了问题。
我启用了COR,并尝试使用PostMan进行相同的POST请求,但它给出了相同的结果,即当我发布到的只是普通URL www.mysite.com/api/courses时,它不起作用,但当我在另一个端口上运行Artisan并发布到www.mysite.com:2834/api/curses时它起作用。
奇怪的是,当使用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');
女士们,先生们,真是面面俱到我想明白了到底出了什么问题。。。是url末尾的斜杠把这一切搞砸了。。