Как добавить пользовательскую функцию в расширение smarty yii2 - PullRequest
2 голосов
/ 05 июня 2019

У меня небольшая проблема с расширением smarty для yii2.

Я создал новую функцию smarty и добавил код в этот файл:

бэкенд / продавец / yiisoft / yii2-всезнайка / SRC / Extension.php

 public function __construct($viewRenderer, $smarty)
    {
        //other code
        /* CUSTOM FUNCTION REGISTER */
        $smarty->registerPlugin('function', 'test', [$this, 'functionTest']);
    }
//this is the custom function
public function functionTest($params, $template){
        return "Test custom funcion";
    }

И я могу использовать эту пользовательскую функцию в своем шаблоне, как это {test}, и все работает отлично.

Сегодня я обновил yii2 до версии 2.0.20, и, очевидно, файл Extension.php был заменен, поэтому я больше не могу получить доступ к пользовательской функции. Мой вопрос: как я могу добавить пользовательскую функцию для smarty в yii2?

Я установлю массив конфигурации следующим образом:

//this is in backend/config/main.php
'view' => [

            'renderers' => [
                'tpl' => [
                    'class' => 'yii\smarty\ViewRenderer',
                    'pluginDirs' => ['@backend/saSmartyPlugin'],
                    'widgets' =>[
                                  'functions' => [['test' => 'test'], ],
                                ],
                    //'cachePath' => '@runtime/Smarty/cache',
                ],
            ],
        ],

и в папку saSmartyPlugin я вставляю свой test.php файл следующим образом:

<?php
    class Test{
        function functionTest($params, $template){
           return "Test custom funcion";
        }
    }

Но я получаю эту ошибку:

Smarty: неопределенный класс 'test' в классе шаблона регистра

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Я найду решение, думая о @MuhammadOmerAslam, и @SergheiLeonenco предложит мне. Я пишу этот ответ для тех, кто имеет эту проблему.

Сначала я создаю свой php-файл Test.php и расширяю класс расширений Smarty

namespace common\components;

use yii\smarty\Extension;

class Test extends Extension{

    public function __construct($viewRenderer, $smarty){ 

        parent::__construct($viewRenderer, $smarty);// call parent construct
        $smarty->registerPlugin('function', 'bread', [$this, 'functionBreadcrumbs']);//register my custom function
    }
    //My custom function
    function functionTest($params, $template){
       return "Test custom funcion";
    }

И я сохраняю этот файл в common/components/

После этого я изменил свой файл config.php

'view' => [

            'renderers' => [
                'tpl' => [
                    'class' => 'yii\smarty\ViewRenderer',
                    'extensionClass' => 'common\components\Test'
                ],
            ],
        ],

    ],
0 голосов
/ 06 июня 2019

Я согласен с Мухаммедом Омером Асламом: вы должны выйти из backend / vendor / yiisoft / yii2-smarty / src / Extension.php, чтобы создавать любые новые методы и иметь возможность использовать их после обновления.После этого вы просто пишете в своем файле конфигурации путь к расширенному классу.

...