2016-11-28 81 views
0

Yii2在高级模板中设置API的应用程序时遇到问题。我不能让任何输入,但一个404呼叫我的API的V1模块yii2 API 404 - 高级模板

我试图打电话与地址的API: http://localhost/HeyConference/api/v1/country

我有以下教程/模板:

为w请求支持同样的问题,但没有成功。

Yii的版本:2.0.10 PHP版本:23年6月5日 和 PHP版本:5.5(XAMP)

我怀疑问题出在我的配置

我的文件结构是:

  • _protected
    • API
      • 配置
        • bootstrap.php中
        • main.php
        • 主+ local.php
        • params.php
        • PARAMS + local.php
      • 控制器
        • 个SiteController.php
      • 模块
        • V1
          • 控制器
            • Contry.php
          • 模型
            • Country.php
          • 模块。PHP
      • 运行
        • 缓存
        • 调试
        • 日志
  • ....
  • API
    • 资产
    • 的.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