Задать вопрос

Как исправить ошибку в функции addFunction volt?

Нашёл хороший пример по созданию виджета в phalcon
docs.phalconphp.ru/ru/1.2.0/reference/forms.html

прочёл статью:
https://docs.phalconphp.com/en/3.0.0/reference/vol...

В общем не могу понять почему после вывода виджета прекращается работа
{{ widget('Form',['2','4','5']) }} и не отображается ни обной ошибки
// файл лежит в public/index.php

  // Register Volt as a service
  $di->set(
    "voltService",
    function ($view, $di) use ($config){
      $volt = new Volt($view, $di);

      $volt->setOptions(
        [
          "compiledSeparator" => "_",
          "compiledPath"      => "../cache/",
          "compiledExtension" => ".compiled",
        ]
      );

      $compiler = $volt->getCompiler();
//      $compiler->addFunction( //пробовал самотстоятельно функции добавлять смотрел как работает
//        "widget", function ($resolvedArgs, $exprArgs) {
////          return "Library\\Widgets::widget(" . $resolvedArgs . ")";
//        }
//      );

//уверен ошибка где-то здесь:
      $compiler->addFunction('widget', function($resolvedArgs, $exprArgs) use($compiler) {
        $class = trim($compiler->expression($exprArgs[0]['expr']), "'");
        $params = empty($exprArgs[1]['expr']) ? null : $compiler->expression($exprArgs[1]['expr']);
        $result = "\\Widgets\\$class::widget($params)";
        echo var_dump($result);
        return $result;
      });
      return $volt;
    }
  );

    // Регистрация сервиса widgetView
    $widget = $di->set('widgetView', [
        'className' => '\Phalcon\Mvc\View',
        'calls' => [
            ['method' => 'setViewsDir', 'arguments' => [
                ['type' => 'parameter', 'value' =>  '../app/widgets/'],
            ]],
            ['method' => 'registerEngines', 'arguments' => [
                ['type' => 'parameter', 'value' => [
                    ".volt" => "voltService",
                ]],
            ]],
        ],
    ]);

//думал что так он мне больше ошибок выведет но ни ошибок не предупреждений нет:

} catch (Exception $e) {
  echo get_class($e), ": ", $e->getMessage(), "\n";
  echo " File=", $e->getFile(), "\n";
  echo " Line=", $e->getLine(), "\n";
  echo $e->getTraceAsString();
}


//результат вардампа:
string(43) "\Widgets\Form::widget(array('2', '4', '5'))"


структура
app/Widgets/Form.php
app/Widgets/View/formView.volt
app/Library/Widget.php
public/index.php - головной файл
  • Вопрос задан
  • 165 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
jasonOk
@jasonOk
Легче болтать, чем код писать
Привет.

Просто нужно создать (допустим в директории /app/library/widget/)

Класс Widget такого типа и жизнь сразу лёгкой станет:

namespace Library\Widget;

use Phalcon\Mvc\User\Component;

class Widget extends Component
{
  ...

  public function output ($widget) { // к примеру
  ...


Потом в представлении всё легче простого:

Форма:

{{ widget.output('Form') }}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы