我是laravel的新手,我在第一次申请时设置了管理面板授权。我目前设置文件设置的方式是:
controllers/
admin/
dashboard.php
settings.php
non-admin-controller1.php
non-admin-controller1.php
views/
admin/
dashboard.blade.php
login.blade.php
template.blade.php
non-admin-view1.php
non-admin-view1.php
non-admin-view1.php
......这些是我的路线
Route::get('admin/login', function()
{
return View::make('admin.login');
});
Route::get('admin/logout', function()
{
return Auth::logout();
return Redirect::to('admin/login');
});
Route::post('admin/login', function()
{
$userdata = array('username' => Input::get('username'),
'password' => Input::get('password'));
if (Auth::attempt($userdata))
{
return Redirect::to('admin');
}
else
{
return Redirect::to('admin/login')->with('login_errors',true);
}
});
Route::controller('admin.dashboard');
Route::get('admin', array('before' => 'auth', function() {
return Redirect::to_action('admin@dashboard');
}));
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::to('admin/login');
});
当我去/ admin时,我被重定向到admin / login并要求登录,这正是我需要它工作的方式。登录后,我被重定向到管理员/仪表板,这一切看起来都很好。然而,我有两个问题。
当我进入管理/退出时,我已退出,但迎接了一个空白页面(它没有重定向到管理员/登录)
退出时,如果我转到管理员/信息中心,我会遇到错误
呈现视图时出错:[admin.dashboard]
尝试获取非对象的属性
我在这里做错了什么?我做得对吗?为管理员创建一个单独的包更合理吗?谢谢!
答案 0 :(得分:10)
所以我能够以稍微不同的方式解决我的问题。我在controllers文件夹的根目录中创建了一个(基础)Admin_Controller,构造函数在执行之前调用了auth过滤器:
class Admin_Controller extends Base_Controller {
public function __construct()
{
$this->filter('before', 'auth');
}
}
然后在/ controllers / admin中使我所有与管理员相关的控制器扩展Admin_Controller并调用父构造函数:
class Admin_Dashboard_Controller extends Admin_Controller {
public function __construct()
{
parent::__construct();
}
public function action_index()
{
return View::make('admin.dashboard');
}
}
这可能不是最有说服力的解决方案,但它可以胜任!
答案 1 :(得分:9)
在admin/login
路线中,您在Auth::logout()
来电之前有不必要的回复,核实并且应该修复它。
此处的另一个问题是,只有您的一条“管理员”路线会被过滤掉。您可以使用Route::group()
包装所有管理路由,并在过滤前应用'auth',也可以使用Route::filter('pattern: admin/*', 'auth')
。
退房:
http://laravel.com/docs/routing#filters
对于第二个问题,您的Admin Dashboard控制器类是否为Admin_Dashboard_Controller
,如果是,您是否在返回视图时有action_index()或get_index()函数?
退房:
http://laravel.com/docs/controllers#nested-controllers
(我假设你在这里使用L3。)
答案 2 :(得分:6)
对于未来的读者来说,使用Laravel的Route Groups:
路由组允许您跨大量路由共享路由属性,例如中间件或命名空间,而无需在每条路径上定义这些属性。
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
// Uses Auth Middleware
});
Route::get('user/profile', function () {
// Uses Auth Middleware
});
});
它们不仅可用于身份验证,还可用于Namespaces
,Sub-Domains
等。