2016-08-25 20 views
0

私はPhalconボルトテンプレートを持っています。私はカスタムヘルパーを呼びたいと思っていました。それは配列を受け入れますが、ヘルパーに送られる配列は文字列型です。私はこのコードを持っている私のlist.voltでPhalcon Volt Arrayは文字列型です

私loader.phpで

{% set myfolder = data.foldername %} 
{% set key = data.folderkey %} 
{% set url = convert([myfolder, key]) %} 

私はヘルパーディレクトリを宣言し、このコードを持っています

//$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の提案を適用した後。

は私がloader.phpで

use Modules\Library\MyCustomUrlHelper; 

/* 
    ...... 
    Some code here 
    .............................. 
    .................... 

*/ 

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

私のヘルパーディレクトリを含めました、私はディレクトリ

を登録した、私 services.phpで

Fatal error: Class 'MyCustomUrlHelper' not found in cache/volt/%apps%%invo%%views%%test%%list.volt.php on line 56

エラーを得ました

........ 
..................... 
$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; 
    } 

} 
?> 

は私が何かを見逃していましたか?

答えて

1

これは、拡張ボルトの正しい方法である:

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

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

は自分自身のドキュメントを引用することができます

と同様の質問:Sending variable from volt to custom function


更新:例コードを追加して出力します。

ボルトのカスタム関数:

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

はい。本当、しかし、あなたは上記のみ文字列パラメータを受け入れます。 My $パラメータは動的配列です。カスタムヘルパーへの1回のリクエストで3つの値または4つの値を指定できます。私の問題は、文字列ではなく配列型に$パラメータを作る方法です。 – user1149244

+0

テストするだけで、意図したとおりに動作していることがわかります。テストの例で私の答えを更新する。 –

+0

私はこれを試したところ、このエラーが発生しました。致命的なエラー:クラス 'MyCustomUrlHelper'がキャッシュ/ボルト/%apps %% invo %% views %% test %% list.volt.phpの56行目に見つかりませんでした。上記のサンプルコードを読みやすくするために、私のサンプルコードを追加してください。 – user1149244

関連する問題