Lex Parser& CodeIgniter,条件奇怪的行为

时间:2018-03-10 22:04:50

标签: codeigniter hmvc pyrocms-lex

我使用lexpyrocms解析器作为与作曲家一起安装的包以及带有HMVC的codeigniter框架,这使我可以在我的模板/视图中使用{{pseudo-variable}}。

我在视图中使用解析器语法时有一种非常奇怪的行为:

我有这个简单的$ modules数组作为数据,我可以在view / template

中print_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' 解析器正确显示一个变量,它只是条件中存在的变量..

我到处搜索了一下,但它看起来像一个孤儿问题,无法在任何地方找到线索..

1 个答案:

答案 0 :(得分:0)

嗯..我设法摆脱了这种奇怪的行为,但我不确定我所做的改变的哪一部分解决了这个问题......所以它的价值是什么:

我遇到的错误是在循环{{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 Parser $this->parser = new Lex\Parser();

的声明

来自我的前端控制器application/modules/my_module/module_controller.php

到我的扩展核心控制器类application/core/MY_Controller.php

的构造函数中

2-我清理了我的views文件夹,因为那里有一些早期开发的双文件:

需要注意的是:调用的视图是和 application / modules / my_module / views / theme / my_template.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使用“已加载路径”对Lex Parser进行了一些混乱,并且同一模块中的两个具有相同名称的视图(即使不在同一目录中)可以导致出乎意料的行为..但我不知道为什么会改变解析器条件的地狱......