Sto scrivendo la mia prima app in laravel, è davvero un buon ambiente per i nuovi sviluppatori di laravel. Per accorciare la storia: ho creato due modelli eloquenti tramite comandi php artisan e creato controller corrispondenti allo stesso modo. Uno di questi è il modello "Members", ho creato funzioni pubbliche all'interno della classe del controller, ma quando provo a postare sulla route che dovrebbe utilizzare la funzione store() quella route utilizza effettivamente la funzione index().La chiamata POST di Laravel restituisce la funzione index() invece di store()
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']
];
}
}
Il mio modello è:
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 = [
];
}
mio php artigianale percorso: lista è: definizione
+--------+-----------+-------------------------------+------------------------+--------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------------+------------------------+--------------------------------------------------------+------------+
| | GET|HEAD |/ | | Closure | |
| | POST | api/v1/members | api.v1.members.store | App\Http\Controllers\[email protected] | |
| | GET|HEAD | api/v1/members | api.v1.members.index | App\Http\Controllers\[email protected] | |
| | GET|HEAD | api/v1/members/create | api.v1.members.create | App\Http\Controllers\[email protected] | |
| | DELETE | api/v1/members/{members} | api.v1.members.destroy | App\Http\Controllers\[email protected] | |
| | GET|HEAD | api/v1/members/{members} | api.v1.members.show | App\Http\Controllers\[email protected] | |
| | PUT|PATCH | api/v1/members/{members} | api.v1.members.update | App\Http\Controllers\[email protected] | |
| | GET|HEAD | api/v1/members/{members}/edit | api.v1.members.edit | App\Http\Controllers\[email protected] | |
| | GET|HEAD | auth/login | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | POST | auth/login | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | GET|HEAD | auth/logout | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | POST | auth/register | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | GET|HEAD | auth/register | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | POST | password/email | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | GET|HEAD | password/email | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\[email protected] | web,guest |
| | GET|HEAD | password/reset/{token} | | App\Http\Controllers\Auth\[email protected] | web,guest |
+--------+-----------+-------------------------------+------------------------+--------------------------------------------------------+------------+
Percorso:
Route::group(['prefix' => 'api/v1'], function(){
Route::resource('members', 'MemberController');
});
Ho provato sia mysite.us/api/v1/members che mysite.us/api/v1/members/ - entrambi restituiscono index() su POST.
ci mostrano la vostra lama pure . Assicurati che il tuo modulo sia del metodo 'post' –
Sto usando il plug-in di POSTMAN per postarlo tramite questo URL, ho lo stesso modello esatto chiamato Contatti, sulla mia altra installazione di Laravel e funziona senza intoppi. E sì
in postino controlla se stai inviando dati di modulo e non (ad esempio) json –