Этот вопрос закрыт для ответов, так как повторяет вопрос Yii2. Ошибка 404, как исправить?
@kuznecov85

Yii2. Ошибка 404 при обращении к действию контроллера, как исправить?

Добрый день!
Есть небольшая проблемка, если я правильно понимаю. то я запутался в роутах. Просьба помочь

В конфиге код:
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => true,

            'class' => 'common\components\UrlManager',
            'rules' => [
                '/' => 'site/index',
                '<action:(login|logout)>' => 'site/<action>',
                '<action:(post)>' => 'post/<action>',   
            ],
        ],


Главная страница, страница авторизации работают корректно. Они работают через SiteController.

Список новостей ( '' => 'post/',), тоже выводится корректно. Он работает через контроллер PostController.

При попытке открыть страницу site.ru/post/view?url=mynews появляется ошибка 404.
В контроллере PostController есть действия:
public function actionPost(){
        $post = new Post();    
        return $this->render('index', [
                'posts' => $post->getPosts(),
        ]);
    }
     
    public function actionView($url)
    {
        $model = new Post();
        $post = $model->getPost($url);
        $lang_data = $post->getDataPosts();
    
        return $this->render('view', [
                'post' => $post,
                'lang_data' => $lang_data,
        ]);
    }


Я понимаю что ошибка где-то на поверхности, но решить не могу уже долго =(
  • Вопрос задан
  • 925 просмотров
Решения вопроса 2
Agregator
@Agregator
Backend Developer (Yii2)
'<action:(post)>' => 'post/<action>',

для /post/view должно быть как минимум

'<controller:(post)>/<action:(view)>' => '<controller>/<action>',

но обычно никто не ограничивает без нужды
'<controller:(.*)>/<action:(.*)>' => '<controller>/<action>',
Ответ написан
Мой совет - не ленитесь расписывать роуты максимально полно, без использования регулярных выражений и подстановок. Визуально наглядно, проще искать ошибки

Попробуй так:
'rules' => [
                '/' => 'site/index',
                '/login' => 'site/login',
                '/logout' => 'site/logout',
                '/post' => 'post/post',
                '/post/view' => 'post/view',   
            ],


В самом контроллере у тебя не должно быть параметров у actionView() - бери их из Yii::$app->request->get('url');
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы