php - Laravel POST 调用返回 index() 函数而不是 store()

标签 php laravel laravel-5 http-post laravel-routing

我正在用 Laravel 编写我的第一个应用程序,对于新的 Laravel 开发人员来说,这是一个非常好的环境。简而言之:我通过 php artisan 命令创建了两个 Eloquent 模型,并以相同的方式创建了相应的 Controller 。其中之一是“成员”模型,我在 Controller 的类中创建了公共(public)函数,但是当我尝试 POST 到应该使用 store() 函数的路由时,该路由实际上使用了 index() 函数。

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']
        ];
    }
}

我的模型是:

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 = [

    ];
}

我的 php artisan 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::group(['prefix' => 'api/v1'], function(){       
    Route::resource('members', 'MemberController');
});

我尝试了 ‍mysite.us/api/v1/membersmysite.us/api/v1/members/

它们都在 POST 上返回 index()

最佳答案

@Arangor here 解决了你的问题

引用:

The problem was adding a trailing '/' to the URL. So, instead of using this URL:

mydomain.com/api/v1/messages/

I tried with this one:

mydomain.com/api/v1/messages

and it worked

关于php - Laravel POST 调用返回 index() 函数而不是 store(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173784/

相关文章:

php - 如何更改列以支持 unicode

php - 计算文本中的词频?

laravel - $model->get() 上 Eloquent Model 时间戳的时区错误,但使用 print_r() 正确

php - Connection.php 行 647 : SQLSTATE[42000]: Syntax error or access violation 中的 Laravel QueryException

laravel-5 - 如何在 Eloquent 中定义和使用 JSON 数据类型?

laravel-5 - 错误!尚未应用特征方法恢复,因为与 App\User-laravel softdelete 上的其他特征方法存在冲突

php - 在自定义表单请求中找不到路线

php - 当表示从 MySQL 数据库获取的 "money"属性时,在 PHP 中使用的正确格式是什么?

php - Laravel 资源路由 - 更新抛出 "method not allowed"错误

php - 如何取消设置特定用户的 session ?