如何向 smarty 扩展 yii2 添加自定义函数
How to add a custom function to smarty extension yii2
我对 yii2 的 smarty 扩展有点小问题。
我创建了一个新的 smarty 函数,并将代码添加到此文件中:
backend/vendor/yiisoft/yii2-smarty/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文件被替换了,所以我不能再访问自定义函数了。
我的问题是:如何在 yii2 中为 smarty 添加自定义函数?
我将这样设置配置数组:
//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',
],
],
],
然后将我的 test.php
文件插入到 saSmartyPlugin 文件夹中:
<?php
class Test{
function functionTest($params, $template){
return "Test custom funcion";
}
}
但是我得到这个错误:
Smarty: Undefined class 'test' in register template class
我同意 Muhammad Omer Aslam 的观点,您应该从 backend/vendor/yiisoft/yii2-smarty/src/Extension.php 扩展,以便创建任何新方法并能够在更新后使用它们。之后,您只需将配置文件路径写入扩展 class.
我会根据@MuhammadOmerAslam 和@SergheiLeonenco 的建议找到解决方案。
我为遇到此问题的任何人写下此答案。
首先,我创建了 php 文件 Test.php 并扩展了 Smarty
的扩展 class
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'
],
],
],
],
我对 yii2 的 smarty 扩展有点小问题。
我创建了一个新的 smarty 函数,并将代码添加到此文件中:
backend/vendor/yiisoft/yii2-smarty/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文件被替换了,所以我不能再访问自定义函数了。 我的问题是:如何在 yii2 中为 smarty 添加自定义函数?
我将这样设置配置数组:
//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',
],
],
],
然后将我的 test.php
文件插入到 saSmartyPlugin 文件夹中:
<?php
class Test{
function functionTest($params, $template){
return "Test custom funcion";
}
}
但是我得到这个错误:
Smarty: Undefined class 'test' in register template class
我同意 Muhammad Omer Aslam 的观点,您应该从 backend/vendor/yiisoft/yii2-smarty/src/Extension.php 扩展,以便创建任何新方法并能够在更新后使用它们。之后,您只需将配置文件路径写入扩展 class.
我会根据@MuhammadOmerAslam 和@SergheiLeonenco 的建议找到解决方案。 我为遇到此问题的任何人写下此答案。
首先,我创建了 php 文件 Test.php 并扩展了 Smarty
的扩展 classnamespace 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'
],
],
],
],