2016-11-28 6 views
0

У меня проблемы с Yii2 в настройке приложения для API внутри расширенного шаблона. Я не могу получить любой входной сигнал, но 404, призывающую модуль с v1 моего APIyii2 API 404 - расширенный шаблон

Я пытаюсь вызвать апи с адресом: http://localhost/HeyConference/api/v1/country

У меня есть следующие учебные пособия/шаблоны:

в ш ell в качестве запроса на поддержку той же проблемы, без успеха.

Yii версия: 2.0.10 PHP версия: 5.6.23 и PHP версии 5.5 (XAMP)

Я подозреваю, что проблема в моей конфигурации

Моя структура файла:

  • _protected
    • апи
      • конфигурации
        • bootstrap.php
        • main.php
        • основные + local.php
        • params.php
        • PARAMS + local.php
      • Контроллеры
        • SiteController.php
      • модули
        • v1
          • контроллеры
            • Contry.php
          • модели
            • Country.php
          • Модуль.PHP
      • выполнения
        • кэш
        • отладки
        • журнал
  • ....
  • апи
    • активы
    • .htaccess
    • index.php
    • индекс
    • test.php
    • robots.txt

здесь являются конкретные файлы:

index.php

<?php 
defined('YII_DEBUG') or define('YII_DEBUG', true); 
defined('YII_ENV') or define('YII_ENV', 'dev'); 
require(__DIR__ . '/../_protected/vendor/autoload.php'); 
require(__DIR__ . '/../_protected/vendor/yiisoft/yii2/Yii.php'); 
require(__DIR__ . '/../_protected/common/config/bootstrap.php'); 
require(__DIR__ . '/../_protected/api/config/bootstrap.php'); 
$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../_protected/common/config/main.php'), 
    require(__DIR__ . '/../_protected/common/config/main-local.php'), 
    require(__DIR__ . '/../_protected/api/config/main.php'), 
    require(__DIR__ . '/../_protected/api/config/main-local.php') 
); 
$application = new yii\web\Application($config); 
$application->run(); 

_protected/API/конфигурации/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-api', 
    'basePath' => dirname(__DIR__), 
    //'controllerNamespace' => 'api\controllers', 
    //'controllerNamespace' => 'api\modules\v1\controllers', 
    'bootstrap' => ['log'], 
    'modules' => [ 
     'v1' => [ 
      'basePath' => '@api/modules/v1', 
      'class' => 'api\modules\v1\Module', // here is our v1 modules 
      'controllerNamespace' => 'api\modules\v1\controllers', 
     ] 
    ], 
    'components' => [ 
     'user' => [ 
      'identityClass' => 'common\models\UserIdentity', 
      'enableAutoLogin' => false, 
     ], 
     'log' => [ 
      'traceLevel' => YII_DEBUG ? 3 : 0, 
      'targets' => [ 
       [ 
        'class' => 'yii\log\FileTarget', 
        'levels' => ['error', 'warning'], 
       ], 
      ], 
     ], 
     'urlManager' => [ 
      'enablePrettyUrl' => true, 
      'enableStrictParsing' => false, //true, 
      'showScriptName' => false, 
      'rules' => [ 
       [ 
        //'pluralize' => false, 

        'class' => 'yii\rest\UrlRule', 

        'controller' => ['v1/country', 'v1/conference'], 
        'tokens' => [ 
         '{id}' => '<id:\\w+>' 
        ] 
       ] 
      ], 
     ] 
    ], 
    'params' => $params, 
]; 

_protected/API/модули/v1/module.php

<?php 
namespace api\modules\v1; 
class Module extends \yii\base\Module 
{ 
    public $controllerNamespace = 'api\modules\v1\controllers'; 
    public function init() 
    { 
     parent::init(); 
    } 
} 

_protected/API /modules/v1/controllers/Country.php

<?php 
namespace api\modules\v1\controllers; 
use yii\rest\ActiveController; 
class ConferenceController extends ActiveController 
{ 
    public $modelClass = 'api\modules\v1\models\Conference'; 
} 

_protected/API/модули/v1/контроллеры/Country.php

<?php 
namespace api\modules\v1\controllers; 
use yii\rest\ActiveController; 
/** 
* Country Controller API 
* 
* @author alex 
*/ 
class CountryController extends ActiveController 
{ 
    public $modelClass = 'api\modules\v1\models\Country'; 
} 

файл .htaccess:

RewriteEngine on 

# If a directory or a file exists, use the request directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Otherwise forward the request to index.php 
RewriteRule . index.php 
+1

, как вы называете действия, которые возвращают 404? – scaisEdge

+0

Возможно, вы забудете файл .htaccess? – Vitaly

ответ

0

Я вижу, что ваши контроллеры не следовать соглашению Yii2. Их следует называть XXX Контроллер.

Таким образом, вместо того, чтобы _protected/api/modules/v1/controllers/Country.php ваш файл должен быть назван _protected/api/modules/v1/controllers/CountryController.php