Вывод из PHP в Firebug. Helper для CakePHP
Как вы делаете отладку? В запутанных случаях я использую Zend Debugger, а в простых случаях пишу pr($variable).
Прочитав Ярослава, я вдруг осознал насколько удобно было бы не мусорить окно браузера, а красиво выводить отладочные сообщения в Firebug. Особенно приятно туда выводить сложные объекты и большие массивы так как Firebug позволяет удобно такие вещи просматривать.
Но реализация от Ярослава мне не подходит.
Там много всяких полезностей, но мне они не нужны :). Схожие функции выполняет будет когда-то выполнять дополнительная панель к Firebug - FirePHP. Но это совсем уже монстр, к тому же пока очень бета. Может, когда его доработают, то я себе установлю.
А пока мне просто нужно писать во View
-
<?=$jsDebug->console($strangeVariable)?>
, где переменная может быть как целым числом, так и сложным массивом или объектом. Это перекрывает 90% потребностей. Бонусом является возможность добавления стандартных иконок Firebug (warn, info, error) и иногда устанавливать переменную javascipt, чтобы потом javascriptом её и обрабатывать. А для тех, у кого нет Firebug, можно использовать метод alert.
Как обычно начинаем с теста, который покажет как использовать этот helper
-
<?
-
-
loadHelper('JsDebug');
-
-
class JsDebugTest extends UnitTestCase {
-
var $helper = null;
-
-
function setUp() {
-
$this->helper = new JsDebugHelper();
-
}
-
-
function testConsole() {
-
$result = $this->helper->console('');
-
$this->assertEqual('<script type="text/javascript">console.log(eval(""))</script>', $result);
-
-
$result = $this->helper->console('1');
-
$this->assertEqual('<script type="text/javascript">console.log(eval("1"))</script>', $result);
-
-
$this->assertEqual('<script type="text/javascript">console.log(eval([1,2,3]))</script>', $result);
-
-
$this->assertEqual('<script type="text/javascript">console.log(eval({"one":"test","two":[1,2,3],"0":3}))</script>', $result);
-
}
-
-
function testConsoleTypes() {
-
$result = $this->helper->console('1', 'info');
-
$this->assertEqual('<script type="text/javascript">console.info(eval("1"))</script>', $result);
-
-
$result = $this->helper->info('1');
-
$this->assertEqual('<script type="text/javascript">console.info(eval("1"))</script>', $result);
-
-
$result = $this->helper->warn('1');
-
$this->assertEqual('<script type="text/javascript">console.warn(eval("1"))</script>', $result);
-
-
$result = $this->helper->error('1');
-
$this->assertEqual('<script type="text/javascript">console.error(eval("1"))</script>', $result);
-
}
-
-
function testSet() {
-
$result = $this->helper->set('', 'test');
-
$this->assertEqual('<script type="text/javascript">var test = eval("")</script>', $result);
-
-
$result = $this->helper->set('1', 'test');
-
$this->assertEqual('<script type="text/javascript">var test = eval("1")</script>', $result);
-
-
$this->assertEqual('<script type="text/javascript">var test = eval([1,2,3])</script>', $result);
-
-
$this->assertEqual('<script type="text/javascript">var test = eval({"one":"test","two":[1,2,3],"0":3})</script>', $result);
-
}
-
-
function testAlert() {
-
$result = $this->helper->alert('');
-
$this->assertEqual('<script type="text/javascript">alert(\'\')</script>', $result);
-
-
$result = $this->helper->alert('1');
-
$this->assertEqual('<script type="text/javascript">alert(\'1\')</script>', $result);
-
-
$this->assertEqual('<script type="text/javascript">alert(\'Array\n(\n [0] => 1\n [1] => 2\n [2] => 3\n)\n\')</script>', $result);
-
-
$this->assertEqual('<script type="text/javascript">alert(\'Array\n(\n [one] => test\n [two] => Array\n (\n [0] => 1\n [1] => 2\n [2] => 3\n )\n\n [0] => 3\n)\n\')</script>', $result);
-
}
-
-
function tearDown() {
-
}
-
}
-
-
-
?>
А вот и сам helper
-
<?
-
-
/**
-
* JsDebug helper
-
*
-
* Sends php variables to Firebugs console.log or just sets javascript variable
-
* Console method requires Firebug at client browser. You can download it at http://www.getfirebug.com
-
*
-
* @author Vladimir Luchaninov
-
* @version 1.0 (16 Oct 2007)
-
*/
-
-
class JsDebugHelper extends Helper {
-
-
var $varPrefix = 'JsDebug_';
-
var $varCounter = 1;
-
-
/**
-
* Makes Firebug console.log of $value
-
*
-
* @param variant $value
-
* @param string $type
-
* You may specify icon near the debug message. Possible values: info, warn, error
-
* @return string
-
*/
-
function console($value, $type=null) {
-
$type = 'log';
-
}
-
-
return $this->output($this->_wrapScript('console.'.$type.'('.$this->_wrapEval($value).')'));
-
}
-
-
function info($value) {
-
return $this->console($value, 'info');
-
}
-
-
function warn($value) {
-
return $this->console($value, 'warn');
-
}
-
-
function error($value) {
-
return $this->console($value, 'error');
-
}
-
-
/**
-
* Alerts variable dump
-
*
-
* @param variant $value
-
* @return string
-
*/
-
function alert($value) {
-
-
return $this->output($this->_wrapScript('alert(\''.$this->_escapeString($value).'\')'));
-
}
-
-
/**
-
* Sets javascript variable
-
*
-
* @param variant $value
-
* @param string $name
-
* If empty then name will be generated as JsDebug_1, JsDebug_2, ...
-
* @return string
-
*/
-
function set($value, $name=null) {
-
$name = $this->varPrefix . $this->varCounter++;
-
}
-
-
return $this->output($this->_wrapScript('var '.$name.' = '.$this->_wrapEval($value)));
-
}
-
-
/**
-
* Very similar to Javascript Helper escapeString
-
* But this version also includes replacement of </script>
-
*
-
* @param string $string
-
* @return string
-
*/
-
function _escapeString($string) {
-
"\r\n" => '\n',
-
"\r" => '\n',
-
"\n" => '\n',
-
'"' => '\"',
-
"'" => "\\'",
-
'</script>' => '<\/script>'
-
);
-
}
-
-
function _wrapScript($s) {
-
return '<script type="text/javascript">'.$s.'</script>';
-
}
-
-
function _wrapEval($value) {
-
return 'eval('.json_encode($value).')';
-
}
-
-
}
-
-
?>
, CakePHP? Zend Debugger ?
Zend Platform (-, ZendCore), Zend Studio. breakpoints.
( IE Firefox).
Zend profiler.
Zend, XDebug + Eclipse/Komodo.
, CakePHP, PHP- + time timeEnd ,
http://rapidshare.com/files/64364765/JsDebugHelper.rar.html
@sp3ct00m: , . , Javascript, . .
, , CakePHP. ""
, ( , 8- ).
, CakePHP
Firebug,
, sp2ctr00m ,
- , , http://ifolder.ru/ ? 
.. , -61 , 580(i8080)
@VolCh: -61 , : 101 - . 580 , -
. , , helper Firebug Cake.
Собрат по Спекки! Уважаю!
Я в начале 90-х несколько лет посвятил ассемблеру Z-80... Вот было время!
Распишите пожалуйста подробней процесс установки.
я назвал первый файл test.php.
Положил в папку www вместе с JsDebugHelper.php
запустил http://anyname/test.php
firefox (с firebug) выдал ошибку
Call to undefined function loadHelper() ... on line 3
Еще опишите конечный результат. Как я понял, будет записываться console.log.
[...] Вывод сообщений в FireBug из cakePHP (Tested on 1.2.x) [...]