【问题标题】:How to pass a function as a parameter in admin class [duplicate]如何在管理类中将函数作为参数传递[重复]
【发布时间】:2015-06-09 09:36:18
【问题描述】:

早上好,我在使用奏鸣曲管理包时遇到了一点问题,假设我有一个返回字符串的函数,我想将此函数的结果作为参数传递到数据网格中:类似于:

protected $datagridValues = array (
'email' => array ('type1' => 2, 'value' => function()), // type 2 : >
'_page' => 1, // Display the first page (default = 1)
'_sort_by' => 'id' 
);

任何人都知道这样做的方法吗?谢谢你

【问题讨论】:

    标签: php mongodb symfony sonata-admin


    【解决方案1】:

    您可以覆盖getFilterParameters() 方法来更改您的$datagridValues

    public function getFilterParameters()
    {
        $this->datagridValues = array_merge(array(
                'email' => array ('type1' => 2, 'value' => function()),
            ), $this->datagridValues);
    
        return parent::getFilterParameters();
    }
    

    【讨论】:

    • 谢谢@Michael,我这样做了,但是我应该在我的管理类中将什么传递给“值”以使过滤器正常工作?
    • 您询问了如何将$datagridValues['value'] 设置为函数返回的值。我回答了你。我怎么知道你想传递什么给这个值?
    • 好的,我这样做了,在 function() 实现中我返回了一个字符串,但没有应用过滤器
    • 抱歉,我的代码不好。我更新了我的答案。现在它必须有正确的过滤器。
    • 哦,是的,现在可以了,非常感谢@Michael
    【解决方案2】:

    问题在于

    中的function()
    'email' => array ('type1' => 2, 'value' => function())
    

    传递一个正确的变量,它就会起作用。

    'email' => array ('type1' => 2, 'value' => 'myValue')
    

    编辑

    要在参数中传递函数(命名为回调函数),您必须在参数中传递回调名称,然后使用call_user_func 运行它:

    function mycallback(){
        // do things
    }
    
    protected $datagridValues = array (
        'email' => array ('type1' => 2, 'value' => 'mycallback')
        '_page' => 1,
        '_sort_by' => 'id' 
    );
    

    然后你可以在你的脚本中做:

    call_user_func($datagridValues['email']['value']);
    

    【讨论】:

    • 谢谢@Rémi 它可以工作,但我需要先执行该函数以将返回值存储在变量中,我在哪里可以执行它?
    • 啊不,它实际上不起作用它将'myValue'解释为字符串而不是变量
    • 如果您想在参数中传递函数,请注意我的编辑。
    • 我注意到了这一点,但是我可以在哪里添加这一行?在 configureDatagridFilters() 函数中?
    • 嗯,看起来不错,但我遇到了一个异常:警告:call_user_func() 期望参数 1 是有效的回调,未找到函数“mycallback”或函数名称无效
    【解决方案3】:

    在数组中你不能调用函数.. 你可以这样做。

    $var = function_name();
    
    protected $datagridValues = array (
    'email' => array ('type1' => 2, 'value' => $var), // type 2 : >
    '_page' => 1, // Display the first page (default = 1)
    '_sort_by' => 'id' 
    );
    

    【讨论】:

    • 语法是 'value' => 'var' 没有 '$' @Aniket,但还是谢谢兄弟
    • 这里有语法错误。 PHP 不支持在定义字段时调用函数。
    • 这里的 function() 表示您正在调用的函数的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2019-07-23
    • 2011-04-07
    相关资源
    最近更新 更多