簡體   English   中英

Laravel REST 資源無法發布到 API

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM