Can't access module routes
opened this issue · comments
Hello. I am using advanced yii2 template + apache.
Main application address (for example localhost/) is targeting to @app/frontend/web/
Second application address (for example localhost/admin) is targeting to @app/backend/web/
(by apache's virtualhost alias).
I followed all guide steps, but seems that module is still not working.
@app/common/config/main.php
:
<?php
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'modules' => [
'rbac' => [
'class' => 'yii2mod\rbac\Module',
],
],
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'authManager' => [
'class' => 'yii\rbac\DbManager',
'defaultRoles' => ['guest', 'user'],
],
],
];
I added Yii's application modules dump in views files.
And rbac module in the list.
var_dump(\Yii::$app->modules);
localhost/rbac <- incorrect address 404
localhost/admin/rbac <- incorrect address 404
What's wrong? Thanks.
P.S: i think it's not important, but
$ php -v
PHP 7.1.7
Hi, Try to add this code to backend main.php configuration
'modules' => [
'rbac' => [
'class' => 'yii2mod\rbac\Module',
],
],
And check the following url - /rbac/assignment/index
Also check your routes configuration for backend application, here is my config
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
],
],
I use this configuration for my advanced template and I have the following list of routes:
@igor-chepurnoi
Thanks for the answer, but i still can't open the module's pages.
Seems, that it is not a typical problem.
frontend main.php
:
<?php
$params = array_merge(
require(__DIR__ . '/../../common/config/params.php'),
require(__DIR__ . '/../../common/config/params-local.php'),
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);
return [
'id' => 'app-frontend',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'frontend\controllers',
'modules' => [
'rbac' => [
'class' => 'yii2mod\rbac\Module',
],
],
'components' => [
'request' => [
'csrfParam' => '_csrf-frontend',
],
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
],
'session' => [
// this is the name of the session cookie used for login on the frontend
'name' => 'advanced-frontend',
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
],
],
],
'params' => $params,
];
backend main.php
:
<?php
$params = array_merge(
require(__DIR__ . '/../../common/config/params.php'),
require(__DIR__ . '/../../common/config/params-local.php'),
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);
return [
'id' => 'app-backend',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'backend\controllers',
'bootstrap' => ['log'],
'modules' => [
'rbac' => [
'class' => 'yii2mod\rbac\Module',
],
],
'components' => [
'request' => [
'csrfParam' => '_csrf-backend',
],
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
],
'session' => [
// this is the name of the session cookie used for login on the backend
'name' => 'advanced-backend',
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
],
],
'urlManagerFrontend' => [
'class' => \yii\web\UrlManager::class,
'baseUrl' => '/',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<action:(.*)>' => '/site/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
],
],
],
'params' => $params,
];
You don't need to add this module to frontend, add it only to backend configuration.
I will try to re-install your module this evening.
It's probably my fault, but i don't know where is it.
You can try to create own module in the backend app, and try to use it. Maybe you have some errors with your apache configuration
@igor-chepurnoi ok, will try later, thanks
The my main problem was an incorrect urlManager rule.
Incorrect rule: '<action:(.*)>' => 'site/<action>'
Correct rule: '<controller:\w+>/<action:\w+>' => '<controller>/<action>'
After this fix i got another error about translation.
Google said that i need to connect i18n module, so i did it.
The way to get working module:
- composer require
- add module to config
- add authManger to config
- fix urlManager rule
- add i18n to config
'modules' => [
'rbac' => [
'class' => 'yii2mod\rbac\Module',
],
],
'components' => [
'urlManager' => [
'baseUrl' => '/admin',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
],
],
'authManager' => [
'class' => 'yii\rbac\DbManager',
'defaultRoles' => ['guest', 'user'],
],
'i18n' => [
'translations' => [
'yii2mod.rbac' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@yii2mod/rbac/messages',
],
],
],
],
Ok, nice.