2015-07-07 2 views
1

Я изменил свой $defaultRoute на мою конфигурацию, которая выглядит так. Это соответствует моему контроллеру по умолчанию AdminController? Я получаю сообщение об ошибке 404Yii2: Как исправить ошибку 404 при изменении контроллера по умолчанию на расширенном шаблоне?

главного-local.php

<?php 
$config = [ 
'defaultRoute' => 'admin/index', 
'components' => [ 
    'request' => [ 
     // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 
     'cookieValidationKey' => 'b0pQ7nOuVjCprrOGrTarC-ErVMHUWQbb', 
    ], 
    ], 
]; 
if (!YII_ENV_TEST) { 
// configuration adjustments for 'dev' environment 
$config['bootstrap'][] = 'debug'; 
$config['modules']['debug'] = 'yii\debug\Module'; 

$config['bootstrap'][] = 'gii'; 
$config['modules']['gii'] = 'yii\gii\Module'; 
} 

return $config; 

Я тестирую мое приложение на локальном хосте, но я до сих пор моя основную конфигурацию с корнем по умолчанию.

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'], 
'defaultRoute' => 'admin/index', 
'modules' => [], 
'components' => [ 
    'user' => [ 
     'identityClass' => 'backend\models\Admin', 
     'enableAutoLogin' => true, 
    ], 
    'log' => [ 
     'traceLevel' => YII_DEBUG ? 3 : 0, 
     'targets' => [ 
      [ 
       'class' => 'yii\log\FileTarget', 
       'levels' => ['error', 'warning'], 
      ], 
     ], 
    ], 
    'errorHandler' => [ 
     'errorAction' => 'admin/error', 
    ], 
], 
'params' => $params, 
]; 

Мой .htaccess имеет следующий код:

Options +FollowSymLinks 
IndexIgnore */* 
RewriteEngine on 

# if request begins with /admin remove admin and ad /backend/web/ 
RewriteCond %{REQUEST_URI} ^/admin 
RewriteRule ^admin\/?(.*) /backend/web/$1 

# other requests add /frontend/web/$1 
RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin) 
RewriteRule (.*) /frontend/web/$1 

# if frontend request 
RewriteCond %{REQUEST_URI} ^/frontend/web 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /frontend/web/index.php 

# if backend request 
RewriteCond %{REQUEST_URI} ^/backend/web 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /backend/web/index.php 

Также здесь мой AdminController код:

<?php 
namespace backend\controllers; 
use Yii; 
use yii\filters\AccessControl; 
use yii\web\Controller; 
use backend\models\LoginForm; 
use yii\filters\VerbFilter; 
class AdminController extends Controller 
    { 
    public function behaviors() 
    { 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       [ 
        'actions' => ['login', 'error'], 
        'allow' => true, 
       ], 
       [ 
        'actions' => ['logout', 'index'], 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
      ], 
     ], 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'logout' => ['post'], 
      ], 
     ], 
    ]; 
} 

/** 
* @inheritdoc 
*/ 
public function actions() 
{ 
    return [ 
     'error' => [ 
      'class' => 'yii\web\ErrorAction', 
     ], 
    ]; 
} 

public function actionIndex() 
{ 
    return $this->render('index'); 
} 

public function actionLogin() 
{ 
    if (!\Yii::$app->user->isGuest) { 
     return $this->goHome(); 
    } 

    $model = new LoginForm(); 
    if ($model->load(Yii::$app->request->post()) && $model->login()) { 
     return $this->goBack(); 
    } else { 
     return $this->render('login', [ 
      'model' => $model, 
     ]); 
    } 
} 

public function actionLogout() 
{ 
    Yii::$app->user->logout(); 

    return $this->goHome(); 
} 
} 

Могу ли я вставлять 'defaultRoute' => 'myController/myAction', в wr ong файл. Я не хочу делать это на самом коде фреймворка, поэтому я очень благодарен за вашу помощь.

+0

Это находится в каталоге серверной? – n099y

+0

@ n099y да, это справочный каталог. – Zack

+0

Можете ли вы вставить htaccess и ваш код администратора. – n099y

ответ

-1

Возьмите его из главного-local.php

Внутри main.php он находится в правильном месте тыс.

'defaultRoute' => 'admin/index', 

Обратите внимание, что вам необходимо поместить AdminController в каталоге @ бэкэнд/контроллеров, как указано в данном заявлении, в вашем коде.

'controllerNamespace' => 'backend\controllers', 
+0

Все еще получаю ошибку 404. У меня уже был AdminController в каталоге backend/controller. – Zack

+0

Я бы вставлял ваш .htaccess, потому что без правил urlmanger и этой настройки он должен маршрутизировать их все на ваш контроллер по умолчанию. – n099y

1

Ваше размещение верно в отношении свойства defaultRoute.

Вы пытались установить его в нечто иное, чем admin/index, который не имеет правила в вашем .htaccess?

Если это работает, вы знаете, что ваш .htaccess противоречит ему, и я попробую следующее.

Я бы удалил пользовательские правила .htaccess (я буду называть их блоками 1,2,4) по одному, оставив остальные блоки. Если это не сработает, удалите 1 & 2 вместе; то я попробую все. Делая это, это должно помочь вам сузить проблему.

Обратите внимание, что если вы удалите правила, вам необходимо будет соответствующим образом настроить ваш URL для тестов (например, добавить backend/web/back to url, чтобы yourAppName/backend/web вы попали в ваш админ/индекс) так как у вас не будет правил удаления бэкэнда/веб-сайта из вашего URL-адреса для вас.

Если это не .htaccess, тогда это должен быть другой код, который у вас есть в вашем приложении, которое является обычным.

Вот правило .htaccess для удаления .index

#Use if on shared hosting and this not in the root folder. 
#RewriteBase/

RewriteEngine on 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php 
RewriteRule . index.php 
+0

В настоящее время я пытаюсь найти проблему, используя ваше предложение установить что-то еще в 'defaultRoute'. Таким образом, это помогло мне продвинуться вперед. Я ввел тестовый контроллер «Настройки», и он действительно работает. Проблема заключается в том, что когда я возвращаюсь к контроллеру admin, он перенаправляется на 'index.php? R = site/login.' Я не понял, почему пока. – Zack

+0

Я бы предположил, что это ваши правила доступа, которые перенаправляют его. Если это так, то только гость перенаправляется и не регистрируется пользователями. Однако вам нужно будет добавить «index» к вашему правилу первого доступа в свойстве «access» вашего контроллера, что позволит не регистрировать пользователей для просмотра страницы администратора. Я также обновил ответ, чтобы удалить r = index.php из вашего url, однако вам также потребуется обновить urlmanager, чтобы отразить изменения. Это должно быть точно так же, как @Bharat Chauhan. Разумеется, правила могут быть разными. – skworden

+0

Вы посмотрели мой текущий .htaccess? Это выглядит точно так же, за исключением того, что ваш основной шаблон. – Zack

Смежные вопросы