phalcon / cphalcon

High performance, full-stack PHP framework delivered as a C extension.
https://phalcon.io
BSD 3-Clause "New" or "Revised" License
10.77k stars 1.97k forks source link

[BUG]: Volt Render Notice : Undefined index: name #16097

Closed kevcomparadise closed 1 year ago

kevcomparadise commented 1 year ago

Describe the bug When we try to access a public method of a sub class contained in a public property of a root class, Volt generates a Notice. PS : Return value OK

To Reproduce Steps to reproduce the behavior:

class TestController extend Controller {

   public function indexAction()
   {

       $subObject = new class {

            public function getValue() {
                return 'Value';
            }

        };

        $rootObject = new class ($subObject) {

            public $sub_object = null;

            public function __construct($subObject)
              {
                  $this->sub_object =  $subObject;
              }
        };

        $this->view->testObject = $rootObject
  }
}

Note : If we use a getter for sub_object (like : getsubObject()) it work

Expected behavior Render without notice

Details

niden commented 1 year ago

Does it work if you use different files for classes vs the new class syntax?

I have not tested this but I am not sure Volt works with that (yet).

kevcomparadise commented 1 year ago

Does it work if you use different files for classes vs the new class syntax?

I have not tested this but I am not sure Volt works with that (yet).

Nop same result This work with Phalcon 3.4

colinpieper commented 1 year ago

I'm also experiencing this issue (in v5.0.2). A workaround that seems to work for my situation is to first set a variable, and then display that variable. Using your example:

Change:

{{ testObject.sub_object.getValue() }}

To:

{% set foo = testObject.sub_object.getValue() %}
{{ foo }}
rtiagom commented 1 year ago

same problem here. The solution @colinpieper mentioned works but far from ideal especially when you have many templates, like @kevcomparadise said this used to work in Phalcon 3.4.5. Can we expect this to be fixed soon?

palcoder commented 1 year ago

I have the same issue and the releases from v5.0.0RC4 to v5.0.4 have the issue but the release v5.0.0RC3 works fine

ccc-nghia-le commented 1 year ago

Any update on when this will be fixed please?

niden commented 1 year ago

We are working on this one guys. Hopefully we can figure out where it comes from.

I checked a bit the code and it seems to fail in the code to ob_start() so that might be happening in Zephir.

niden commented 1 year ago

This has been resolved in https://github.com/phalcon/cphalcon/pull/16187.

Thank you @kevcomparadise @colinpieper