如何在laravel资源控制器中添加其他路由

时间:2013-11-29 06:04:36

标签: controller resources routes laravel-4 restful-url

我在使用laravel4 restful routing时遇到了一些问题。这是我如何得到错误

在我的路线中,我关注了用户资源

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

根据这个,我可以访问资源支持的所有方法。在我的用户控制器中,我想添加新方法 getProfile 。这意味着我正在尝试使用资源无法支持的方法。根据一些帖子,我建议添加

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

最后我的路线变成了

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

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

通过这种方式,我可以从getProfile这样的任何地方拨打users/profile 一切都很好。

但是当我在该方法中加载视图时出现问题

public function getProfile()
    {

        return View::make('users.profile');
    }

任何人都可以帮助我离开这里

4 个答案:

答案 0 :(得分:0)

首先,我建议你阅读菲尔鲟写的beware-the-route-to-evil。如果你想使用资源路由与其他路由,你必须将其他路由放在资源路由的顶部..例如:

Route::get('users/login','UsersController@getLogin');
Route::resource('users','UsersController');

OR

您可以从

更改控制器
public function getLogin()

public function login()

希望你找到这个有用的

答案 1 :(得分:0)

<强> Route.php

Route::get('/', function()
{
    return View::make('hello');
});

// Route::controller('users', 'UsersController');

Route::get('users/login','UsersController@login');

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

Route::resource('customers', 'CustomersController');


UsersController.php

<?php

class UsersController extends BaseController {

    /**
     * User Repository
     *
     * @var User
     */
    protected $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        $users = $this->user->all();

        return View::make('users.index', compact('users'));
    }


    /**
     * 
     * Login Form View
     * 
     * @return Response
     */
    public function getLogin()
    {       
        return View::make('users.login');
    }



}


user.php的(模型)

<?php

class User extends Eloquent {
    protected $guarded = array();

    public static $rules = array(
        'name' => 'required',
        'email' =>  'required|email|unique:users',
        'password' => 'required|min:8|max:32|confirmed'
    );

    /* Relationship */
    public function enquire()
    {
        return $this->hasMany('Enquire');
    }   

}

答案 2 :(得分:0)

它得到了解决方案,但我不满意。这是我如何做到的 Route::get('users/login', array('as' => 'users.login', 'uses' => 'UsersController@login') );

答案 3 :(得分:0)

@Sanny Singhts解决方案是正确的,但请注意,在 routes.php 中,您应该按顺序放置路线..

Route::get() or Route::post()

应始终位于Route :: resource()

之上