laravel 4中两个管理员的路由混淆

时间:2015-02-04 09:00:56

标签: php laravel-4

我有以下路线:

// For user
  Route::controller('/', 'LoginController');


 //For admin
  Route::group(array('prefix' => 'admin'), function() {
        Route::get('/', 'admin\LoginController@index');
        Route::get('/dashboard', 'admin\LoginController@show');
        Route::get('/Logout','admin\LoginController@logout');
        Route::resource('/setting','admin\SettingController');  
    });

我的用户面板没有前缀。 在logincontroller中包含授权码。 我发现'未找到控制器方法'。我打开admin时出错。但是当我对用户路由发表评论时,管理员工作正常,但用户面板发现了同样的错误。请帮助先生。谢谢

是这是用户的LoginController

<?php
class LoginController extends BaseController {

    public function getIndex()
    {
        if(Auth::check())
        {
            return Redirect::to('/user/home');
        }
        return View::make('login.index');
    }
    public function postIndex()
    {
        $username = Input::get('username');
        $password = Input::get('password');
        if (Auth::attempt(['username' => $username, 'password' => $password]))
        {
            return Redirect::intended('/user/home');
        }
        return Redirect::back()
            ->withInput()
            ->withErrors('Sorry,Username or password is incorrect');
    }
    public function getLogin()
    {
        return Redirect::to('/');
    }
    public function getLogout()
    {
        Auth::logout();

        return Redirect::to('/');
    } 
}

管理员登录控制器

<?php
namespace admin;
class LoginController extends \BaseController {
public function showLogin() {
             return \View::make('admin.login');
   }
     public function index()
     {
          return \View::make('admin.index');
     }
     public function store()
     {
               $username = \Input::get('username');
             $password = md5(\Input::get('password'));
                   if ($mm=\DB::select('select * from admin where uname = ? and password = ?', array($username, $password)))
                   {
                            \Session::put('admin', $mm);
                      return \Redirect::intended('/admin/dashboard');
               } 
               else
               {
                \Session::flush('admin');
                   return \Redirect::back()
                    ->withInput()
                    ->withErrors('Sorry,Unauthorized admin please try again');
              }
    }
      public function postIndex()
    {
         echo 'Demo of  post index';exit;
      }
    public function show()
    {
       $tt=\Session::get('admin');
       return \View::make('admin.dashboard');
    }
    public function Logout()
    {

       \Session::flush('admin');
        return \Redirect::to('/admin');
    }
}

1 个答案:

答案 0 :(得分:0)

问题是Route::controller('/')正在捕获只有一个段的所有请求。这也意味着/admin。然后,它会尝试在用户getAdmin()中找到一个显然不存在的LoginController方法。

这里你基本上有两个选择。

1。更改路线顺序

按照您注册的顺序搜索路线。如果您将admin组放在另一条路线之前,一切都会按预期工作:

Route::group(array('prefix' => 'admin'), function() {
    Route::get('/', 'admin\LoginController@index');
    Route::get('/dashboard', 'admin\LoginController@show');
    Route::get('/Logout','admin\LoginController@logout');
    Route::resource('/setting','admin\SettingController');  
});

Route::controller('/', 'LoginController');

2。制作明确的路线

您可以指定每条路线,而不是使用Route::controller('/')

Route::get('/', 'LoginController@getIndex');
Route::get('login', 'LoginController@getLogin');
// etc...

Route::group(array('prefix' => 'admin'), function() {
    Route::get('/', 'admin\LoginController@index');
    Route::get('/dashboard', 'admin\LoginController@show');
    Route::get('/Logout','admin\LoginController@logout');
    Route::resource('/setting','admin\SettingController');  
});