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 { protected $table = 'members'; protected $fillable = [ 'email', 'first_name', 'last_name', 'phone', 'address_one', 'address_two', 'zip_code', 'city', 'county', 'state_region', 'country', 'job_title', 'company', 'clearance_level', ]; 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
.