在 Web 中添加动态角色.拉拉维尔 5.4



我正在使用Zizaco Entrust,我正在开发的平台允许用户创建新角色,但是当我声明哪些角色在Web中具有访问权限时.php我想是动态的。

这是我的网络.php

Auth::routes();
use IlluminateSupportFacadesDB;
Route::get('/', function () {
return view('welcome');
});
Route::group(['middleware'=> 'revalidate'], function(){ 
$a = DB::table('roles')->where('acceso', true)->get();
foreach ($a as $item) {
    $array[] = $item->name;
}
list($keys,$values) = array_divide($array);
$newArray = array_except($values, ['superadmin']);
$b = implode('|', $newArray);
Route::group(['prefix' => 'ControlPanel', 'middleware' => ['auth', 'role:superadmin|' . $b], 'namespace' => 'controlpanel'], function () {
    // Dashboard
    Route::resource('/', 'DashboardController');
    // Donantes
    Route::resource('/donantes','DonanteController');
    // Tarjetas de creditos donantes
    Route::resource('/tarjetas','TarjetaController');
    // Paises
    Route::resource('/paises','PaisController');
    // Tipos de donantes
    Route::resource('/tipo-donantes','TipoDonanteController');
    // Montos de donaciones
    Route::resource('/monto-donaciones','MontoDonacionController');
    // Roles administrativos
    Route::resource('/roles-administrativos','RoleController');
    // Administrativo
    Route::resource('/administradores','UserController');
    // Administrativo
    Route::resource('/configuraciones','ConfigController');
    // Administrativo
    Route::resource('/monedas','MonedaController');
    // Transacciones
    Route::resource('/transacciones','TransaccionController');
    // Calendario
    Route::resource('/calendario','CalendarioController');
    // Calendario
    Route::resource('/campaigns','CampaignController');
    // User information
    Route::any('/user/{id}','QueryController@user');
    // Actualizar informacion dashboard
    Route::get('/update-data/ledger','UpdateDataController@ledger');
    // Processar tarjetas programadas
    Route::get('/processcards','UpdateDataController@processcards');
    // ipaccess
    Route::resource('/ipaccess','IpController');
    // Log files
    Route::resource('/logfiles','LogfileController');
});

});

但是当我运行php artisan migrate时,我收到此错误:

[IlluminateDatabaseQueryException]                                                                                    
SQLSTATE[42P01]: Undefined table: 7 ERROR:  no existe la relación «roles»                                               
LINE 1: select * from "roles" where "acceso" = $1                                                                                             
^ (SQL: select * from "roles" where "acceso" = 1)                                                                                                                                                                                                                                                                                                                                                                                                                         
[PDOException]                                                                                                          
SQLSTATE[42P01]: Undefined table: 7 ERROR:  no existe la relación «roles»                                               
LINE 1: select * from "roles" where "acceso" = $1 

首先我不明白为什么php artisan migrate指向web.php.

有人有想法吗?

谢谢!

如果您查看 Illuminate 源代码,您会发现artisan是用于控制台的应用程序的容器化版本,或者换句话说,它是 Container 的实例。因此,它所经历的引导过程与应用程序作为完整堆栈运行时的引导过程大致相同。因此,数据库层自然会绑定到容器。这就是为什么你看到你的错误。您认为命令php artisan route:list如何工作?它必须启动应用程序,注册路由器并映射路由,这意味着访问路由文件。

至于错误,您是否事先迁移了数据库?我的西班牙语说得不太好,但这似乎是在说角色表不存在。 如果已迁移但仍看到错误,请为所有DB::调用指定数据库连接,如下所示:

$a = DB::connection('my_connection')->table('roles')->where('acceso', true)->get();

最新更新