【问题标题】:Laravel 4 Route Parameters for REST用于 REST 的 Laravel 4 路由参数
【发布时间】:2013-10-16 21:19:46
【问题描述】:

这可能是一个简单的问题,但我正在使用 Laravel 进行测试。我相应地设置了我的路线:

// Users Route
Route::get('users',array('as'=> 'users', 'uses'=> 'UsersController@index'));
Route::get('users/{id}', array('as' => 'user', 'uses' => 'UsersController@show') );
Route::get('users/{id}/edit', array('as' => 'edit_user', 'uses' => 'UsersController@edit') );
Route::get('users/new', array('as' => 'new_user', 'uses' => 'UsersController@create'));
Route::post('users',  'UsersController@create');
Route::delete('users', 'UsersController@destroy');

现在,在我的浏览器中,如果我访问localhost/users/new,它将调用名为“user”的路由而不是“new_user”。我的意思是,它将加载编辑路径而不是创建用户。

我的代码有什么问题?

【问题讨论】:

    标签: php rest laravel laravel-4 laravel-routing


    【解决方案1】:

    如果你使用RESTful API,最好使用资源路由。

    路线,

    Route::resource('users', 'UsersController');
    

    还有控制器,

    <?php
    
    
    class UsersController extends BaseController {
    
        /**
         * Display all users.
         *
         * @return Response
         * GET http://localhost/laravel/users
         */
    
        public function index() {
    
        }
    
        /**
         * Show the form for creating a new resource.
         *
         * @return Response
         */
    
        public function create() {
            //
        }
    
        /**
         * Store a newly created resource in storage.
         *
         * @return Response
         * POST http://localhost/laravel/users
         */
    
        public function store() {
            //
        }
    
        /**
         * Display the specified resource.
         *
         * @param  int  $id
         * @return Response
         * GET http://localhost/laravel/users/1
         */
    
        public function show($id) {
            //
        }
    
        /**
         * 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
         * PUT http://localhost/laravel/users/1
         */
    
        public function update($id) {
            //
        }
    
        /**
         * Remove the specified resource from storage.
         *
         * @param  int  $id
         * @return Response
         * DELETE http://localhost/laravel/users/1
         */
    
        public function destroy($id) {
    
    
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      优先级很重要,只需更改为:

      Route::get('users',array('as'=> 'users', 'uses'=> 'UsersController@index'));
      Route::get('users/new', array('as' => 'new_user', 'uses' => 'UsersController@create'));
      Route::get('users/{id}', array('as' => 'user', 'uses' => 'UsersController@show') );
      Route::get('users/{id}/edit', array('as' => 'edit_user', 'uses' => 'UsersController@edit') );
      Route::post('users',  'UsersController@create');
      Route::delete('users', 'UsersController@destroy');
      

      Laravel 假设 'new' 是你的 {id} 参数。

      【讨论】:

      • 我尝试使用此代码,当我访问“users/new”时抛出此错误:isset 中的非法偏移类型或为空
      • 现在你必须看看你的方法UsersController@create,看起来你那里有错误。
      • 哦,我认为这是我问题的根源,而不是路线。
      • 路由也不起作用,因为正如我所说,优先级很重要。如果 Laravel 将按照您编写的顺序处理路由,如果它找到适合的路由,则将使用该路由,而忽略所有其他路由。
      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 2014-08-10
      • 2014-10-13
      • 2017-10-10
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多