merged branch dpb587/patch-trace (PR #2593)

Commits
-------

4858fbe [TwigBundle] Fix trace to not show 'in at line' when file/line are empty.

Discussion
----------

[TwigBundle] Fix trace to not show 'in at line' when file/line are empty.

Occasionally I saw call stacks where file/line are empty in the raw exception object, but the trace.html.twig file was still showing 'in at line' with empty values. I believe this fixes that.

Bug fix: yes
Feature addition: no
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: -

---------------------------------------------------------------------------

by fabpot at 2011/11/09 22:49:35 -0800

The current code looks correct to me. Can you try with the latest version of Twig to be sure that you don't have this issue because of a bug in Twig that has been fixed since then?

---------------------------------------------------------------------------

by dpb587 at 2011/11/10 07:20:34 -0800

Thanks for the feedback. Should I change my patch to check that both are defined and non-empty, such as `trace.file is defined and trace.file and trace.line is defined and trace.line`?

I think the issue is that I'm seeing the file and line keys are defined but empty. I created another branch with a pseudo-test case that shows a little more information. Using symfony-standard with symfony in deps as follows and symfony/twig removed from deps.lock.

    [symfony]
        git=git://github.com/dpb587/symfony.git
        version=origin/patch-trace-debug

Then running the following:

    phpunit -c app/ vendor/symfony/tests/Symfony/Tests/Bundle/TwigBundle/Controller/ExceptionController.php

The test (is backwards) and passes, dumping the following (this call happens right after a call_user_func):

    Array
    (
        [namespace] => Symfony\Bundle\FrameworkBundle\EventListener
        [short_class] => RouterListener
        [class] => Symfony\Bundle\FrameworkBundle\EventListener\RouterListener
        [type] => ->
        [function] => onKernelRequest
        [file] =>
        [line] =>
        [args] => Array
            (
                [0] => Array
                    (
                        [0] => object
                        [1] => Symfony\Component\HttpKernel\Event\GetResponseEvent
                    )

            )

    )

I saw the same results with two php versions:

    PHP 5.3.3-7+squeeze3 with Suhosin-Patch (cli) (built: Jun 28 2011 08:24:40)
    Copyright (c) 1997-2009 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
        with Xdebug v2.1.1, Copyright (c) 2002-2011, by Derick Rethans
        with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH

    PHP 5.3.8 (cli) (built: Nov  4 2011 05:43:22)
    Copyright (c) 1997-2011 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
        with the ionCube PHP Loader v4.0.10, Copyright (c) 2002-2011, by ionCube Ltd., and
        with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technologies

Sorry if I'm simply missing something or doing something silly.

---------------------------------------------------------------------------

by fabpot at 2011/11/11 13:12:21 -0800

`trace.file is defined and trace.file and trace.line is defined and trace.line` looks good to me.
This commit is contained in:
Fabien Potencier 2011-11-12 09:19:12 +01:00
commit b6a98bfc98

View File

@ -5,10 +5,10 @@
{{ trace.type ~ trace.function }}
</strong>
({{ trace.args|format_args }})
<br />
{% endif %}
{% if trace.file is defined and trace.line is defined %}
{% if trace.file is defined and trace.file and trace.line is defined and trace.line %}
{{ trace.function ? '<br />' : '' }}
in {{ trace.file|format_file(trace.line) }}&nbsp;
{% spaceless %}
<a href="#" onclick="toggle('trace_{{ prefix ~ '_' ~ i }}'); switchIcons('icon_{{ prefix ~ '_' ~ i }}_open', 'icon_{{ prefix ~ '_' ~ i }}_close'); return false;">