Lex Parser & CodeIgniter, странное странное поведение
Я использую синтаксический анализатор lexpyrocms в качестве пакета, установленного с composer вместе с платформой codeigniter с HMVC, которая позволяет мне использовать {{pseudo-variable}} в моих шаблонах / представлениях.
У меня очень странное поведение с синтаксисом синтаксического анализатора, на мой взгляд:
У меня есть этот простой массив $modules в качестве данных, которые я могу 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'
но когда я использую условное "если" внутри цикла, я получаю неправильное соответствие, когда проверяю, существует ли переменная:
{{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 ответ
Хорошо.. Мне удалось избавиться от этого странного поведения, но я не уверен, какая часть изменений, которые я сделал, решила проблему... Так для чего это стоит:
Ошибка, с которой я столкнулся, заключалась в том, что в цикле {{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- Я очистил папку с представлениями, потому что там был двойной файл из более ранней разработки:
Следует отметить: вызываемое представление было и есть 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 с "loaded_paths ", и что два представления с одинаковым именем в одном модуле (даже если они не в одном и том же каталоге) могут привести к неожиданному поведению... но я не не понимаю, какого черта, что изменило бы условия парсера...