Phalcon Volt数组是字符串类型[英] 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中,我已声明了Helper目录并拥有此代码:

 //$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建议后.

收到错误

致命错误:在缓存/volt/%apps中找不到的'mycustomurlhelper'%% Invo %% Views %% test %% list.volt.php在第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();
...................
........................

在我的模块/库中目录,我有这个 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;
    }

}
?>

我错过了别的吗?

推荐答案

这是延伸Volt的正确方式:

$compiler->addFunction('convert', function($resolvedArgs, $exprArgs){
    return 'MyCustomHelper::convert(' . $resolvedArgs . ')';  
});

将允许自己引用文件:

函数充当普通PHP函数,需要有效的字符串名称 作为函数名称.可以使用两种策略添加功能, 返回一个简单的字符串或使用匿名函数.永远是 要求所选的策略返回有效的PHP字符串 表达.

以下链接中的更多信息:

文档: https://docs.phalconphp.com/en/latest/reference/volt.html#id1

类似的问题:从volt到自定义发送变量功能


更新:添加示例代码和输出.

volt自定义功能:

$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
)

本文地址:https://www.itbaoku.cn/post/1739801.html