【问题标题】:Yii2 DetailView widget and PHP anonymous function errorYii2 DetailView 小部件和 PHP 匿名函数错误
【发布时间】:2017-02-07 03:03:49
【问题描述】:

这个问题与所考虑的问题不同。这个问题 意思是 PHP 匿名函数的奇怪结果。关于 这里的 Yii 只是为了显示匿名的上下文 功能已涉及。

我决定在 Yii2 应用程序中使用 PHP 匿名函数来格式化 DetailView Widget 中的属性值,如下所示:

<?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'id',
            'DatabaseID',           
            'Prod:ntext',
            'desc:ntext',
            [
                'label' => Yii::t('app','review'),
                'value' => function(){return 'hi';}, //Just for simplification the issue explanation. However, it is the actual code that generates the error.
            ],
        ],
]) ?>

我收到以下错误,表明匿名函数没有返回字符串:

htmlspecialchars() 期望参数 1 是字符串,给定对象

我想知道,为什么匿名函数返回一个对象?如代码示例所示,它应该只返回一个简单的字符串hi!

我已阅读有关 Anonymous functions 的 PHP 文档,但我无法找到有关此问题的任何信息。

【问题讨论】:

  • 这是在DetailView 小部件中设置值的错误方式。您将函数传递给value,但它永远不会执行(与GridView 不同,call_user_func 永远不会被调用)。结果,您有此错误。你可以用call_user_func 包装它,但这没有意义。正确的做法是直接调用$model的方法或者一些辅助组件。这是使用匿名函数的错误方式。相关问题请仔细阅读my answer
  • @arogachev 好的,这可能不是正确或合适的方式,但在某些情况下它应该是更快的方式。另外,这个问题主要针对匿名函数的概念,当我认为它应该在没有call_user_func 的情况下运行时,我实现它是错误的。所以这不是一个重复的问题。

标签: php anonymous-function


【解决方案1】:

错误实际上是 ntext 格式。更改为 text 或 html 即可解决问题。这是一个长期存在的错误!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2015-12-27
    • 2015-01-27
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多