Имеются следующие файлы:
config/web.php - секция urlManager
Код: Выделить всё
urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => true,
'rules' => require DIR . '/routes.php'
],
Код: Выделить всё
use app\controllers\SiteController;
return [
"" => SiteController::routeId(SiteController::ACTION_INDEX),
];
Код: Выделить всё
<?php
namespace app\controllers;
use Yii;
class AdvancedController extends \yii\web\Controller
{
use ControllerRoutesTrait;
}
Код: Выделить всё
<?php
namespace app\controllers;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
trait ControllerRoutesTrait
{
/**
* Получение маршрута на указанное действие с указанными параметрами.
*
* @param string $action Название действия
* @param array $params Дополнительные параметры
*
* @return array
*/
public static function getUrlRoute(string $action, array $params = []): array
{
$path = static::routeId($action);
return array_merge(['/' . $path], $params);
}
/**
* Getting route id, can be passed to routes
*/
public static function routeId(string $action): string
{
preg_match('#\\\\modules\\\\(?P<module>.+?)\\\\#', static::class, $matches);
$module = ($matches['module'] ?? null);
$controller = StringHelper::basename(static::class);
$controller = preg_replace('/Controller$/', '', $controller);
$controller = Inflector::camel2id($controller);
$path = implode('/', array_filter([$module, $controller, $action]));
return $path;
}
}
Код: Выделить всё
<?php
namespace app\controllers;
use app\controllers\AdvancedController;
class SiteController extends AdvancedController
{
const ACTION_INDEX = 'index';
public function actionIndex()
{
return $this->render('index.php')
}
}
Долго мучался так и не смог разобраться, в чем проблема - при этом отдельное тестирование такой конструкции print_r(SiteController::routeId(SiteController::ACTION_INDEX)) в другом контроллере показывает что возвращается строка 'site/index'.PHP Fatal error: Uncaught Error: Class 'app\controllers\SiteController' not found in config\router.php on line 4
Очень хочу разобраться с этой проблемой, т.к. подход такой к построению маршрутов понравился + точно помню что видел проект, где этот подход работал без ошибок.
Буду очень рад любым мыслям на этот счет!