I'm writing my first app in laravel, it's really nice environment for new laravel developers. To shorten the story: I've created two eloquent models via php artisan commands and created corresponding controllers the same way. One of those is "Members" model, I've created public functions inside the class of the controller, but when I try to POST to the route that should use store() function that route actually uses 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 is:
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's JSON form.
*
* @var array
*/
protected $hidden = [
];
}
My php artisan route:list is:
+--------+-----------+-------------------------------+------------------------+--------------------------------------------------------+------------+
| 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
.
post
method – Unamata Sanatarai