如何使用 xdebug 和 Netbeans 调试 Yii REST 控制器文件(在哪里放置断点以及 url 使用什么)?

How to debug Yii REST controller file with xdebug and Netbeans (where to put breakpoint and what url use)?

我已经安装了 Netbenas、XAMPP、xdebug 和 Yii2,并且我有简单的 REST 控制器:

<?php
namespace app\controllers;
use yii\rest\ActiveController;

class ContractController extends ActiveController
{
    public $modelClass = 'app\models\Contract';
}

连接到 Firebird 2.1 数据库 (WIN1257) 并给出错误:

error on line 2 at column 431: Encoding error

我想调试此错误以确定如何改进 Yii-Firebird 插件,但如果此控制器没有操作(使用来自基础 class 的操作),我可以将断点放在哪里。在 运行 配置中我有项目 URL:

http://localhost:8081/myproject/

和索引文件:

web/index.php

我的本意是放在这里 url 给出了错误:

http://localhost:8081/myproject/web/index.php/contract

但 Netbeans 不接受索引文件字段中的 /contract 部分。

所以 - 我应该在 Netbenas 中打开哪个文件以及如何指示我要调试 url http://localhost:8081/myproject/web/index.php/contract

你的

class ContractController extends ActiveController

ActiveController

的扩展

因此您可以将断点放置到正确的 ActiveController 操作上..

 vendor/yiisoft/yii2/rest/ActionController 

你可以找到

public function actions()
{
    return [
        'index' => [
            'class' => 'yii\rest\IndexAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
        ],
        'view' => [
            'class' => 'yii\rest\ViewAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
        ],
        'create' => [
            'class' => 'yii\rest\CreateAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
            'scenario' => $this->createScenario,
        ],
        'update' => [
            'class' => 'yii\rest\UpdateAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
            'scenario' => $this->updateScenario,
        ],
        'delete' => [
            'class' => 'yii\rest\DeleteAction',
            'modelClass' => $this->modelClass,
            'checkAccess' => [$this, 'checkAccess'],
        ],
        'options' => [
            'class' => 'yii\rest\OptionsAction',
        ],
    ];
}

在这里您可以看到每个操作都有一个适当的 class 例如:..

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

在同一个目录 vendor/yiisoft/yii2/rest/ActionController 你可以找到 class 代码

然后你可以把断点放在相关的 class 运行 函数上

public function run()
{
    if ($this->checkAccess) {
        call_user_func($this->checkAccess, $this->id);
    }

    return $this->prepareDataProvider();
}