在web.php中添加动态角色 - Laravel 5.4

时间:2017-06-16 17:41:38

标签: php laravel-5.4

我正在与Zizaco Entrust合作,我开发的平台允许用户创建新角色,但当我宣布哪些角色可以访问web.php时,我希望是动态的。

这是我的web.php

Auth::routes();
use Illuminate\Support\Facades\DB;

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时,我收到此错误:

[Illuminate\Database\QueryException]                                                                                    
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

有人有想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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