Lex Parser & CodeIgniter,条件奇怪的行为
Lex Parser & CodeIgniter, conditionnal weird behavior
我正在使用 lexpyrocms 解析器作为与 composer 一起安装的软件包以及带有 HMVC 的 codeigniter 框架,这允许我在我的 templates/views.
中使用 {{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}}
=> 输出 'users' 和 'actions'
但是当我在循环中使用条件 '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'
解析器正确显示了它刚刚回避的变量,因为它存在于条件中..
我到处搜索了一下,但它看起来像一个孤儿问题,在任何地方都找不到线索..
嗯..我设法摆脱了这种奇怪的行为,但我不确定我所做的更改的哪一部分解决了问题......所以它的价值:
我遇到的错误是在循环 {{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}}
之后我做了两件事,rid-off 解决了问题...
1- 我移动了 Lex 解析器的声明 $this->parser = new Lex\Parser();
来自我的前端控制器application/modules/my_module/module_controller.php
进入我的扩展核心控制器的构造函数 class 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 解析器与 'loaded_paths' 混淆了一点,并且同一模块中具有相同名称的两个视图(即使不在同一目录中)会导致意外行为..但我不明白为什么会改变解析器的条件...
我正在使用 lexpyrocms 解析器作为与 composer 一起安装的软件包以及带有 HMVC 的 codeigniter 框架,这允许我在我的 templates/views.
中使用 {{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}}
=> 输出 'users' 和 'actions'
但是当我在循环中使用条件 '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'
解析器正确显示了它刚刚回避的变量,因为它存在于条件中..
我到处搜索了一下,但它看起来像一个孤儿问题,在任何地方都找不到线索..
嗯..我设法摆脱了这种奇怪的行为,但我不确定我所做的更改的哪一部分解决了问题......所以它的价值:
我遇到的错误是在循环 {{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}}
之后我做了两件事,rid-off 解决了问题...
1- 我移动了 Lex 解析器的声明 $this->parser = new Lex\Parser();
来自我的前端控制器application/modules/my_module/module_controller.php
进入我的扩展核心控制器的构造函数 class 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 解析器与 'loaded_paths' 混淆了一点,并且同一模块中具有相同名称的两个视图(即使不在同一目录中)会导致意外行为..但我不明白为什么会改变解析器的条件...