Lex Parser和CodeIgniter,条件性怪异行为

rryofs0p  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(147)

我使用lexpyrocms解析器作为一个包,与composer一起安装,沿着使用带有HMVC的codeigniter框架,它允许我在模板/视图中使用{{pseudo-variable}}。
在我看来,解析器语法有一个非常奇怪的行为:
我有一个简单的$modules数组作为数据,可以在视图/模板中打印_r()

$modules = 
Array ( 
       [users] => stdClass Object ( [id_mdl] => 8 [name_mdl] => users ),
       [actions] => stdClass Object ( [id_mdl] => 9 [name_mdl] => actions ) 
);

如果我使用基本的Lex语法,我可以显示name_mdl而不会出现问题
{{modules}} {{name_mdl}} {{/modules}} =〉输出“用户”和“操作”
但是当我在循环中使用条件“if”时,当我测试变量是否存在时,我得到了一个错误的匹配:

{{modules}}

    {{name_mdl}} 

{{/modules}}

这将正确输出users actions

{{modules}}

    {{if exists name_mdl}} 
    name_mdl OK {{name_mdl}} 
    {{endif}}

{{/modules}}

但这不会输出任何内容:

{{modules}}

    {{if not exists name_mdl}} 
    name_mdl  NOT OK {{name_mdl}} 
    {{endif}}

{{/modules}}

这将输出'name_mdl NOT OK users name_mdl NOT OK actions',解析器将正确显示一个变量,该变量刚刚作为条件中的现有变量而被重新使用。
我到处都找了一点,但它看起来像一个孤儿的问题,到处都找不到线索。

jgzswidk

jgzswidk1#

嗯......我设法摆脱了这种奇怪的行为,但我不确定我所做的改变的哪一部分解决了问题......所以不管怎么说:
我遇到的错误是,在循环{{list_of_things}}{{/list_of_things}}中,无法使用条件if exists检查现有变量,尽管该变量的显示效果很好:

{{list_of_things}}

    {{ list_name }} <-- display the list_name of each entry  

    {{ if exists list_name }} 
        The condition was never met, tough the data 'list_name' can be displayed above
    {{ endif }} 

{{/list_of_things}}

在那之后我做了两件事,摆脱了这个问题...
1-我把Lex解析器的声明移到了$this->parser = new Lex\Parser();
从我的前端控制器application/modules/my_module/module_controller.php
我的扩展核心控制器类application/core/MY_Controller.php的构造函数
2-我清理了我的视图文件夹,因为那里有一些来自早期开发的双文件:
注意:调用的视图是 * 应用程序/模块/我的模块/视图/主题/我的模板. php *

  • 之前:

modules/my_module/views/ my_template.php
modules/my_module/views/theme/ my_template.php

  • 之后:

modules/my_module/views/
modules/my_module/views/theme/ my_template.php
所以我最好的猜测是HMVC用"loaded_path"搞砸了Lex Parser,同一个模块中两个同名的视图(即使不在同一个目录中)可能会导致意外的行为...但是我不明白为什么会改变解析器的条件...

相关问题