Php Laravel 5.2,基于用户信息加载视图
这是Laravel 5.2的新安装,我做的唯一一件事就是向表用户添加一个新列。这个新列是call roles,它只是整数…Php Laravel 5.2,基于用户信息加载视图,php,laravel-5.2,Php,Laravel 5.2,这是Laravel 5.2的新安装,我做的唯一一件事就是向表用户添加一个新列。这个新列是call roles,它只是整数… 我想做的是根据本专栏的信息加载一个控制器/视图… 假设列角色的值为1,则加载视图X 在我的路由文件中,我有这个 Route::group(['middleware' => ['web']], function () { Route::auth(); if(Auth::user()->roles == '1') { Route::get('/adm
我想做的是根据本专栏的信息加载一个控制器/视图…
假设列角色的值为1,则加载视图X
在我的路由文件中,我有这个
Route::group(['middleware' => ['web']], function () {
Route::auth();
if(Auth::user()->roles == '1') {
Route::get('/admin', 'AdminController@index');
Route::post('/admin', 'AdminController@save');
Route::get('/admin/{datas}', 'AdminController@datas');
Route::get('/admin/list', 'AdminController@list');
Route::get('/admin/list/{details}', 'AdminController@details');
} else {
Route::get('/login', 'UsersController@login');
}
namespace App\Http\Controllers;
use App\Http\Requests;
use Auth;
use Illuminate\Http\Request;
// use App\Http\Controllers\Controller;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
//
public function index() {
// TODO Gets Data...
$datos = ['Nombre', 'Otro Nombre', 'Otro mas'];
// Return Data to tyhe view...
if(Auth::user()->roles == '11') {
return View('admin.home', compact('datos'));
} else {
return View('/welcome');
}
}
}
如果我在一个视图中使用这个Auth::user()->roles==“1”
,它“起作用”,但不是我想要的,我真的不想安装第三个软件包来进行用户控制,我只想要一些非常简单的东西。。。那么我如何才能做到这一点呢?…根据马特所说的(我一开始没听懂,我对拉雷维尔很陌生,所以请容忍我),这就是我所做的。。。
安装新的laravel…
然后运行这个
php artisan make:auth
,它将安装用户注册/登录/重置所需的一切…然后打开AuthController.php将此
protected$redirectTo='/home'
更改为您想要的任何内容,在我的例子中,我调用了delegate$redirectTo='/delegate'
然后在您的routers.php文件中放入如下内容
Route::group(['middleware' => ['web']], function () {
Route::auth();
Route::get('/delegate', 'DelegateController@index');
});
您实际上不需要此路线的视图,您需要的是控制器在这个控制器上,DelegateController.php将放置如下内容
Route::group(['middleware' => ['web']], function () {
Route::auth();
if(Auth::user()->roles == '1') {
Route::get('/admin', 'AdminController@index');
Route::post('/admin', 'AdminController@save');
Route::get('/admin/{datas}', 'AdminController@datas');
Route::get('/admin/list', 'AdminController@list');
Route::get('/admin/list/{details}', 'AdminController@details');
} else {
Route::get('/login', 'UsersController@login');
}
namespace App\Http\Controllers;
use App\Http\Requests;
use Auth;
use Illuminate\Http\Request;
// use App\Http\Controllers\Controller;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
//
public function index() {
// TODO Gets Data...
$datos = ['Nombre', 'Otro Nombre', 'Otro mas'];
// Return Data to tyhe view...
if(Auth::user()->roles == '11') {
return View('admin.home', compact('datos'));
} else {
return View('/welcome');
}
}
}
这就是如何根据用户信息获得不同的视图。。。至少他在为我工作
------更新
在我玩了一会儿之后,我发现即使您为管理员/用户/客户/提供者加载了正确的视图…等等,url/路径也不正确,原因如下:使用上面的代码,当用户加载提供正确视图的委派控制器时,您将获得
foo.com/login,但url保持为foo.com/delegate如果用户是管理员,我们希望类似foo.com/admin not/delegate的内容,即使您手动将其从/delegate更改为/admin,它仍然可以工作,但问题是,如果用户不是管理员,它仍然会显示管理员面板,我们不希望这样。。。为了解决这个问题,我必须更改我的委派控制器。。。我必须将用户重定向到正确的路径,而不是加载视图。。。
这是与之前相同的代码,但我没有加载视图,而是重定向用户,为了在路由文件中正常工作,您必须声明每个路径的名称,如下所示
Route::group(['middleware' => ['web']], function () {
Route::auth();
Route::get('delegate', 'DelegateController@index');
// Add your route
// Route::get('admin', 'AdminController@home');
Route::get('admin', ['as'=>'admin', 'uses'=>'AdminController@home']);
});
这样,通过调用名称routereturn redirect()->route('/myprofile')
…etc现在这项工作已经开始,我们需要最后检查一下用户正在加载什么,要在每个视图控制器上完成这项工作非常简单,您应该有这样的东西…
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
// gets the disco bouncer working...
if(Auth::user()->roles != '10') {
Auth::logout();
}
}
//
public function home() {
// TODO Gets Data...
$datos = ['Nombre', 'Otro Nombre', 'Otro mas'];
// TODO build a model for the actual data...
// Return Data to the view...
return View('admin.home', compact('datos'));
}
}
如您所见,我们可以在所有控制器上使用此选项,并跳过DelegationController,但随后您必须在单个app.blade主视图上为每个用户角色创建一个菜单,这将看起来更脏……如果你问我的话,是的,我学习拉威尔很开心 只需抓取控制器函数中的列数据(将该页的所有已发布数据发送到该控制器函数),根据所选选项在控制器中进行处理,然后根据所选选项返回视图。