Мне нравится использовать Slim, но я разочарован тем, как его отладить. Допустим, у меня есть следующий маршрут. Я могу сделать запрос cURL и посмотреть вывод, но вместо этого я хочу построчно пройти по сценарию с моим отладчиком IDE, который оказывается phpED NuShere. Хотя я не очень быстро понял это, я почти уверен, что смогу заставить 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
});
Основываясь на комментариях Блейка, я создал следующий метод и вызвал его в конструкторе. После каждого запроса создается новый тестовый файл, который можно отлаживать.
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;
}
Если вам нужна отладочная информация в случае исключения:
$app->config('debug', true);
Также Вы можете использовать Firebug + FirePHP, как описано здесь: https://www.sitepoint.com/debug-php-firebug-firephp/
Tracy
но мне нравится интерфейс отладки, поэтому я нашел что-то вроде этого: https://github.com/nette/tracy
Оформить заказ https://gist.github.com/1f7/b2d2846777e71f48e43a2ef7acc0a655 (в этом примере есть небольшие ошибки, но Вы можете справиться с этим)
демо здесь: https://nette.github.io/tracy/tracy-debug-bar.html
скриншот моей тестовой реализации:
но я очень рекомендую вам использовать нормальный IDE, как PHPStorm
и отладить ваше приложение как босс (:
часы: https://www.youtube.com/watch?v=rqDDJfG6ip4 или это: https://www.youtube.com/watch?v=_U8xrj0-PXU
постскриптум на вопрос о правильной настройке Трейси напишите в комментарии (;
Slim3 Трейси суть увеличился до Slim3 Debug Bar пакет.
Больше скриншотов Вот.
И я согласен — PHPStorm лучше для отладки, но быстрое обнаружение переменных легче в Tracy.