Laravel POST call returns index () function instead of store ()

I am writing my first Laravel application, it is a really good environment for new Laravel developers. To shorten the story: I created two eloquent models using php artisan commands and created corresponding controllers in the same way. One of them is the "Members" model, I created public functions inside the controller class, but when I try to POST to a route that should use the store () function, this route actually uses the index () function.

controller:

namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Member; use Response; class MemberController extends Controller { /** * Display a listing of the resource. * * @return Response */ public function index() { $members = Member::all(); return Response::json([ 'data' => $this->transformCollection($members) ], 200); } /** * Show the form for creating a new resource. * * @return Response */ public function create() { // } /** * @param Request $request * @return mixed */ public function store(Request $request) { if(! $request->email){ return Response::json([ 'error' => [ 'message' => 'Please Provide email' ] ], 422); } $Member = Member::create($request->all()); return Response::json([ 'message' => 'Member Created Succesfully', 'data' => $this->transform($Member) ]); } /** * Display the specified resource. * * @param int $id * @return Response */ public function show($id) { $Member = Member::find($id); if(!$Member){ return Response::json([ 'error' => [ 'message' => 'Member does not exist' ] ], 404); } return Response::json([ 'data' => $this->transform($Member) ], 200); } /** * Show the form for editing the specified resource. * * @param int $id * @return Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param int $id * @return Response */ public function update(Request $request, $id) { if(! $request->user_id){ return Response::json([ 'error' => [ 'message' => 'Please Provide user_id' ] ], 422); } $Member = Member::find($id); if($request->email){ $Member->email = $request->email; } if($request->first_name){ $Member->first_name = $request->first_name; } if($request->last_name){ $Member->last_name = $request->last_name; } if($request->phone){ $Member->phone = $request->phone; } if($request->address_one){ $Member->address_one = $request->address_one; } if($request->address_two){ $Member->address_two = $request->address_two; } if($request->zip_code){ $Member->zip_code = $request->zip_code; } if($request->city){ $Member->city = $request->city; } if($request->county){ $Member->county = $request->county; } if($request->state_region){ $Member->state_region = $request->state_region; } if($request->country){ $Member->country = $request->country; } if($request->job_title){ $Member->job_title = $request->job_title; } if($request->company){ $Member->company = $request->company; } if($request->clearance_level){ $Member->clearance_level = $request->clearance_level; } $Member->save(); return Response::json([ 'message' => 'Member Updated Succesfully', 'data' => $this->transform($Member) ]); } /** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { Member::destroy($id); } /** * @Description Data transform * @param $contacts * @return array */ private function transformCollection($contacts) { return array_map([$this, 'transform'], $contacts->toArray()); } /** * @Description Data transform * @param $contact * @return array */ private function transform($contact) { return [ 'id' => $contact['id'], 'fname' => $contact['first_name'], 'lname' => $contact['last_name'], 'email' => $contact['email'], 'address' => $contact['address_one'] ]; } } 

My model:

 namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Request; class Member extends Model { /** * The database table used by the model. * * @var string */ protected $table = 'members'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'email', 'first_name', 'last_name', 'phone', 'address_one', 'address_two', 'zip_code', 'city', 'county', 'state_region', 'country', 'job_title', 'company', 'clearance_level', ]; /** * The attributes excluded from the model JSON form. * * @var array */ protected $hidden = [ ]; } 

My artisan php route: list:

 +--------+-----------+-------------------------------+------------------------+--------------------------------------------------------+------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+-------------------------------+------------------------+--------------------------------------------------------+------------+ | | GET|HEAD | / | | Closure | | | | POST | api/v1/members | api.v1.members.store | App\Http\Controllers\ MemberController@store | | | | GET|HEAD | api/v1/members | api.v1.members.index | App\Http\Controllers\ MemberController@index | | | | GET|HEAD | api/v1/members/create | api.v1.members.create | App\Http\Controllers\ MemberController@create | | | | DELETE | api/v1/members/{members} | api.v1.members.destroy | App\Http\Controllers\ MemberController@destroy | | | | GET|HEAD | api/v1/members/{members} | api.v1.members.show | App\Http\Controllers\ MemberController@show | | | | PUT|PATCH | api/v1/members/{members} | api.v1.members.update | App\Http\Controllers\ MemberController@update | | | | GET|HEAD | api/v1/members/{members}/edit | api.v1.members.edit | App\Http\Controllers\ MemberController@edit | | | | GET|HEAD | auth/login | | App\Http\Controllers\Auth\ AuthController@getLogin | web,guest | | | POST | auth/login | | App\Http\Controllers\Auth\ AuthController@postLogin | web,guest | | | GET|HEAD | auth/logout | | App\Http\Controllers\Auth\ AuthController@getLogout | web,guest | | | POST | auth/register | | App\Http\Controllers\Auth\ AuthController@postRegister | web,guest | | | GET|HEAD | auth/register | | App\Http\Controllers\Auth\ AuthController@getRegister | web,guest | | | POST | password/email | | App\Http\Controllers\Auth\ PasswordController@postEmail | web,guest | | | GET|HEAD | password/email | | App\Http\Controllers\Auth\ PasswordController@getEmail | web,guest | | | POST | password/reset | | App\Http\Controllers\Auth\ PasswordController@postReset | web,guest | | | GET|HEAD | password/reset/{token} | | App\Http\Controllers\Auth\ PasswordController@getReset | web,guest | +--------+-----------+-------------------------------+------------------------+--------------------------------------------------------+------------+ 

Route Definition:

 Route::group(['prefix' => 'api/v1'], function(){ Route::resource('members', 'MemberController'); }); 

I tried both mysite.us/api/v1/members and mysite.us/api/v1/members/

they both return index() on POST .

+5
source share
2 answers

Your problem is solved with @Arangor here

Quote:

The problem was adding the final "/" to the URL. So, instead of using this url:

 mydomain.com/api/v1/messages/ 

I tried with this:

 mydomain.com/api/v1/messages 

and he worked

+6
source

add CSRF field to the form

eg:

 <form id="form-login" class="mt form-horizontal" role="form" method="post" action="/login"> {{csrf_field()}} 
0
source

Source: https://habr.com/ru/post/1245615/


All Articles