0

我喜欢使用 Slim,但对如何调试它感到沮丧。可以说我有以下路由。我可以执行 cURL 请求并查看输出,但我希望使用我的 IDE 调试器逐行浏览脚本,该调试器恰好是 NuShere 的 phpED。虽然我还没有快速弄清楚,但我很确定我可以让 phpED 发出 POST 请求,但绝对不是 PUT 或 DELETE 请求,所以没有意义。

有什么办法吗?我可以很容易地强制$_SERVER['REQUEST_URI']$_SERVER['REQUEST_METHOD']任何值,也可以更改$_GET超全局,但身体数据(即$_POST)不是那么简单。

<?php
$app = new \Slim\Slim();
$app->get('/books/:id', function ($id) {
    //Show book identified by $id
});
$app->post('/books', function () {
    //Create book
});
$app->put('/books/:id', function ($id) {
    //Update book identified by $id
});
$app->delete('/books/:id', function ($id) {
    //Delete book identified by $id
});
$app->get('/toys/:id', function ($id) {
    //Show toy identified by $id
});
$app->post('/toys', function () {
    //Create toy 
});
$app->put('/toys/:id', function ($id) {
    //Update toy identified by $id
});
$app->delete('/toys/:id', function ($id) {
    //Delete toy identified by $id
});
4

3 回答 3

0

如果您需要调试信息以防出现异常:

$app->config('debug', true);

您也可以使用 Firebug + FirePHP,如下所述: https ://www.sitepoint.com/debug-php-firebug-firephp/

特雷西
,但我喜欢调试界面,所以我发现了这样的东西:https ://github.com/nette/tracy

签出这个要点:https ://gist.github.com/1f7/b2d2846777e71f48e43a2ef7acc0a655 (它有一些小错误,但你可以处理它)

演示在这里:https ://nette.github.io/tracy/tracy-debug-bar.html

我的测试实现的屏幕截图:

截屏



但我真的建议您使用普通的 IDEPHPStorm并像老板一样调试您的应用程序(:

观看:https ://www.youtube.com/watch?v=rqDDJfG6ip4 或这个:https ://www.youtube.com/watch?v=_U8xrj0-PXU

ps 对于正确配置 Tracy 的问题,请写在评论中 (;

于 2016-09-17T22:31:50.277 回答
0

Slim3 Tracy gist增加到Slim3 Debug Bar 包

Slim3 调试栏 更多截图在这里

我同意 - PHPStorm 更适合调试,但在 Tracy 中更容易快速发现 var。

在不久的将来计划添加 Echo 控制台(JQuery 终端) Slim3 调试栏终端示例

于 2016-12-16T05:38:13.537 回答
0

根据 Blake 的评论,我创建了以下方法,并在构造函数中调用它。每次请求后,都会创建一个可以调试的新测试文件。

    private function createTest($params,$method)
    {
        $inputs=print_r($params,1);
        $method=strtolower($method);
        $method2=($method=='put' || $method=='delete')?'post':$method;
        $html=$this->createTestInputs($params,null,null); //array, previous inputs, name prefix
        $html=<<<eod
<p>URL: $_SERVER[REQUEST_URI]</p>
<p>METHOD: $method</p>
<p>INPUTS:<pre>$inputs</pre></p>
<form action="$_SERVER[REQUEST_URI]" method="$method2">
    $html
    <input type="hidden" name="_METHOD" value="$method"/>
    <input type="submit" value="Test"/>
</form>
eod;
        file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test.php', $html);
    }    

    private function createTestInputs($params,$html,$prefix)
    {
        foreach($params as $name=>$value) {
            if(is_array($value)) {
                $html=$this->createTestInputs($value,$html,$name);
            }
            else {
                $html.="<input name='".($prefix?$prefix.'['.$name.']':$name)."' type='hidden' value='$value' />\n";
            }
        }
        return $html;
    }    
于 2016-09-17T16:19:20.573 回答