6

yii2 基本テンプレート用の REST API を作成したいと考えていました。次のリンクをたどりました。

という名前のテーブル、という名前usersのコントローラーを作成しましたUserController

<?php
namespace app\controllers;

use yii\rest\ActiveController;

class UserController extends ActiveController
{
    public $modelClass = 'app\models\User';
}
?>

そしてウェブで

   'urlManager' => [
    'enablePrettyUrl' => true,
    'enableStrictParsing' => true,
    'showScriptName' => false,
    'rules' => [
        ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
    ],
],

        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '4534',
            'parsers' => [
        'application/json' => 'yii\web\JsonParser',
    ],
        ],  

私のファイル名はrestapiなので、このURL http://localhost/~user/restapi/web/を試し てみましたが、404ページが見つからないというエラーが表示されます。どんな助けでもいただければ幸いです

4

2 に答える 2

8

Rest Api は、Yii2 基本アプリに実装するのが非常に簡単です。以下の手順に従ってください。このコードは私のために働いています。

アプリケーション構造

yourapp
+ web
+ config
+ controllers
...
+ api
  + config
  + modules
    + v1
      + controllers
  .htaccess
  index.php

API/index.php

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

// Use a distinct configuration for the API
$config = require(__DIR__ . '/config/api.php');

(new yii\web\Application($config))->run();

api/.htaccess

Options +FollowSymLinks
IndexIgnore */*

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

api/config/api.php

<?php

$db     = require(__DIR__ . '/../../config/db.php');
$params = require(__DIR__ . '/params.php');

$config = [
    'id' => 'basic',
    'name' => 'TimeTracker',
    // Need to get one level up:
    'basePath' => dirname(__DIR__).'/..',
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // Enable JSON Input:
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ]
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                     // Create API log in the standard log dir
                     // But in file 'api.log':
                    'logFile' => '@app/runtime/logs/api.log',
                ],
            ],
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                ['class' => 'yii\rest\UrlRule', 'controller' => ['v1/project','v1/time']],
            ],
        ], 
        'db' => $db,
    ],
    'modules' => [
        'v1' => [
            'class' => 'app\api\modules\v1\Module',
        ],
    ],
    'params' => $params,
];

return $config;

API/モジュール/v1/Module.php

<?php
// Check this namespace:
namespace app\api\modules\v1;

class Module extends \yii\base\Module
{
    public function init()
    {
        parent::init();

        // ...  other initialization code ...
    }
}

API/モジュール/v1/コントローラー/ProjectController.php

<?php
namespace app\api\modules\v1\controllers;

use yii\rest\ActiveController;

class ProjectController extends ActiveController
{
    // We are using the regular web app modules:
    public $modelClass = 'app\models\Project';
}

参照

于 2015-09-17T12:54:33.483 に答える
5

これらの構成で:

'rules' => [
    ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
],

リソースはこれらの URL 内で利用できる必要があります。

http://localhost/~user/restapi/web/users

http://localhost/~user/restapi/web/users/1

  • yii\rest\UrlRule::$pluralize注: Yii は、プロパティを設定しない限り、エンドポイントで使用するコントローラ名を自動的に複数形にします。

また、 Apacheサーバーを使用している場合は、このコンテンツを含むファイルをフォルダーに追加して、Pretty Urlsを有効にする前にサーバーを構成する必要があります ( nginx を使用している場合は、以下のリンクを参照してください)。.htaccessweb

# Set document root to be "basic/web"
DocumentRoot "path/to/basic/web"

<Directory "path/to/basic/web">
    # use mod_rewrite for pretty URL support
    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

    # ...other settings...
</Directory>

この部分は、インストールとサーバー構成のセクションに従うことを期待していたため、提供したリンクのドキュメントには記載されていませんでした。

http://www.yiiframework.com/doc-2.0/guide-start-installation.html#configuring-web-servers

于 2015-09-17T12:58:15.423 に答える