Phalcon 伏特数组为字符串类型
Phalcon Volt Array is of string type
我有一个 Phalcon 伏特模板,我想在我的自定义助手中调用它,它将接受一个数组,但发送到助手的数组是字符串类型。
在我的 list.volt 我有这个代码,
{% set myfolder = data.foldername %}
{% set key = data.folderkey %}
{% set url = convert([myfolder, key]) %}
在 my loader.php, 中,我已经声明了帮助程序目录并具有以下代码:
//$params should be single dimensional array
$compiler->addFunction('convert', function($params){
var_dump($params);
return MyCustomHelper::convert($params);
});
将输出 string(31) "array($fname, $fkey)"
而不是数组类型。它让我的助手停止工作。
有人遇到过这个问题,我需要它是数组类型而不是字符串?
更新:应用@Nikolay Mihaylov 建议后。
遇到错误
Fatal error: Class 'MyCustomUrlHelper' not found in cache/volt/%apps%%invo%%views%%test%%list.volt.php on line 56
在我的 services.php, 中,我包含了我的助手目录
use Modules\Library\MyCustomUrlHelper;
/*
......
Some code here
..............................
....................
*/
$compiler->addFunction('convert', function($resolvedArgs, $exprArgs){
return 'MyCustomUrlHelper::convert('.$resolvedArgs.')';
});
在loader.php,我已经注册了目录
........
.....................
$loader->registerDirs(array(APP_PATH.'Modules/Library'))->register();
...................
........................
在我的 Modules/Library 目录中,我有这个 MyCustomUrlHelper.php
<?php
namespace Modules\Library;
use Phalcon\Tag;
class MyCustomUrlHelper extends Tag
{
public function convert($params)
{
if(!is_array($params))
{
$params = array($params);
}
/*
..... some code here ...
.................
..........
*/
return $converted;
}
}
?>
我还漏掉了什么吗?
这是延长电压的正确方法:
$compiler->addFunction('convert', function($resolvedArgs, $exprArgs){
return 'MyCustomHelper::convert(' . $resolvedArgs . ')';
});
将允许我自己引用文档:
Functions act as normal PHP functions, a valid string name is required
as function name. Functions can be added using two strategies,
returning a simple string or using an anonymous function. Always is
required that the chosen strategy returns a valid PHP string
expression.
以下链接中的更多信息:
文档:https://docs.phalconphp.com/en/latest/reference/volt.html#id1
SO 的类似问题:
更新: 添加示例代码和输出。
伏特自定义函数:
$compiler->addFunction('testArrays', function($resolvedArgs, $exprArgs) {
return 'Helpers\VoltCms::testArrays(' . $resolvedArgs . ')';
});
帮助文件:
public static function testArrays($param)
{
d($param);
}
用法和输出:
{{ testArrays(['asd', 'asd1']) }}
Array
(
[0] => asd
[1] => asd1
)
我有一个 Phalcon 伏特模板,我想在我的自定义助手中调用它,它将接受一个数组,但发送到助手的数组是字符串类型。
在我的 list.volt 我有这个代码,
{% set myfolder = data.foldername %}
{% set key = data.folderkey %}
{% set url = convert([myfolder, key]) %}
在 my loader.php, 中,我已经声明了帮助程序目录并具有以下代码:
//$params should be single dimensional array
$compiler->addFunction('convert', function($params){
var_dump($params);
return MyCustomHelper::convert($params);
});
将输出 string(31) "array($fname, $fkey)"
而不是数组类型。它让我的助手停止工作。
有人遇到过这个问题,我需要它是数组类型而不是字符串?
更新:应用@Nikolay Mihaylov 建议后。
遇到错误
Fatal error: Class 'MyCustomUrlHelper' not found in cache/volt/%apps%%invo%%views%%test%%list.volt.php on line 56
在我的 services.php, 中,我包含了我的助手目录
use Modules\Library\MyCustomUrlHelper;
/*
......
Some code here
..............................
....................
*/
$compiler->addFunction('convert', function($resolvedArgs, $exprArgs){
return 'MyCustomUrlHelper::convert('.$resolvedArgs.')';
});
在loader.php,我已经注册了目录
........
.....................
$loader->registerDirs(array(APP_PATH.'Modules/Library'))->register();
...................
........................
在我的 Modules/Library 目录中,我有这个 MyCustomUrlHelper.php
<?php
namespace Modules\Library;
use Phalcon\Tag;
class MyCustomUrlHelper extends Tag
{
public function convert($params)
{
if(!is_array($params))
{
$params = array($params);
}
/*
..... some code here ...
.................
..........
*/
return $converted;
}
}
?>
我还漏掉了什么吗?
这是延长电压的正确方法:
$compiler->addFunction('convert', function($resolvedArgs, $exprArgs){
return 'MyCustomHelper::convert(' . $resolvedArgs . ')';
});
将允许我自己引用文档:
Functions act as normal PHP functions, a valid string name is required as function name. Functions can be added using two strategies, returning a simple string or using an anonymous function. Always is required that the chosen strategy returns a valid PHP string expression.
以下链接中的更多信息:
文档:https://docs.phalconphp.com/en/latest/reference/volt.html#id1
SO 的类似问题:
更新: 添加示例代码和输出。
伏特自定义函数:
$compiler->addFunction('testArrays', function($resolvedArgs, $exprArgs) {
return 'Helpers\VoltCms::testArrays(' . $resolvedArgs . ')';
});
帮助文件:
public static function testArrays($param)
{
d($param);
}
用法和输出:
{{ testArrays(['asd', 'asd1']) }}
Array
(
[0] => asd
[1] => asd1
)