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 ", и что два представления с одинаковым именем в одном модуле (даже если они не в одном и том же каталоге) могут привести к неожиданному поведению... но я не не понимаю, какого черта, что изменило бы условия парсера...

Другие вопросы по тегам