2016-11-28 14 views
0

アドバンストテンプレート内にAPI用アプリケーションを設定する際にYii2に問題があります。私は、任意の入力を取得することはできませんが、私のAPIyii2 API404-アドバンステンプレート

のV1とモジュールを呼び出す404は私がアドレスを使用してAPIを呼び出すためにしようとしている: http://localhost/HeyConference/api/v1/country

私は、以下のチュートリアル/テンプレートがあります

(ここでModule.phpファイルが欠落していました)同じ問題をサポートするためのリクエストとして、成功することはありません。

のYiiバージョン:2.0.10 PHPバージョン:5.6.23 と 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
ここ

ある特定のファイル:

/API _protected

の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(); 
    } 
} 

/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ファイル:私はあなたのコントローラがYii2規則に従わないことがわかり

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

命名すべきですか? – scaisEdge

+0

多分あなたは.htaccessファイルを忘れていますか? – Vitaly

答えて

0

XXXコントローラーと呼びます。

ので、代わりの_protected/api/modules/v1/controllers/Country.phpあなたのファイルがどのように404を返すアクションを呼び出します_protected/api/modules/v1/controllers/CountryController.php