2016-03-23 24 views
5

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.

+0

ci mostrano la vostra lama pure . Assicurati che il tuo modulo sia del metodo 'post' –

+0

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ì

è anch'esso nel formato blade. –

+0

in postino controlla se stai inviando dati di modulo e non (ad esempio) json –

risposta

4

Il tuo problema è stato risolto da @Arangor here

Citazione:

Il problema stava aggiungendo un finale '/' all'URL. Così, invece di utilizzare questo URL:

mydomain.com/api/v1/messages/ 

ho provato con questo:

mydomain.com/api/v1/messages 

e ha funzionato

Problemi correlati