【问题标题】:how to solve "Object of class Closure could not be converted to int"如何解决“类闭包对象无法转换为int”
【发布时间】:2018-04-10 09:21:06
【问题描述】:

我打算在 gridview 中调用模型中的数据。我通过 composer 安装了高级网格视图,我正在使用 \yiister\grid\widgets\ProgressColumn。但是prolem ProgressColumn 小部件没有占用

 'value'=>function($model){
          return $model->paxtashart;
         },

作为int值,它给了我错误:类闭包的对象无法转换为int

我可以将其转换为 int 或任何其他替代方法吗?

这里让我向您展示我的整个代码:

  [


        'class' => \yiister\grid\widgets\ProgressColumn::className(),
        'attribute' => 'paxta_given',
        'size' => \yiister\grid\widgets\ProgressColumn::SIZE_LARGE,
        'isAnimated' => true,
         'value'=>function($model){
           $model->paxtashart;
         },

        // 'maxValue'=> $fermercha->paxtashart,
        // 'minValue'=> $fermercha->paxta_given,
        'progressBarClass' => function ($model, $column) {
            return $model->{$column->attribute} > 60
                ? \yiister\grid\widgets\ProgressColumn::STYLE_SUCCESS
                : \yiister\grid\widgets\ProgressColumn::STYLE_WARNING;
        },
    ],

我试过这样: $model->paxtashat 但它只是给我所有属性的 1 值,它没有帮助 这是我的模型的样子:

 <?php

    namespace app\models;

    use Yii;

    /**
     * This is the model class for table "fermer".
     *
     * @property integer $id
     * @property string $FIO
     * @property integer $tuman_id
     * @property string $Massiv
     * @property integer $ferhojalik
     * @property integer $maydoni
     * @property integer $paxtamay
     * @property integer $paxtashart
     * @property integer $gallamay
     * @property integer $gallashart
     * @property integer $bog
     * @property integer $uzum
     * @property integer $poliz
     * @property integer $sabzavot
     * @property integer $chorva
     */
    class Fermer extends \yii\db\ActiveRecord
    {
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'fermer';
        }

        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [

                [['tuman_id', 'ferhojalik', 'maydoni', 'paxtamay', 'paxtashart', 'gallamay', 'gallashart', 'paxta_given', 'poliz', 'sabzavot', 'chorva','paxta_done'], 'integer'],
                [['FIO', 'Massiv'], 'string', 'max' => 255],
                [['image'], 'file',  'extensions' => ['png','jpg','jpeg']],

            ];
        }

        public function upload()
        {
            if ($this->validate() and $this->image->baseName) {
                $this->image->saveAs(Yii::$app->basePath.'/web/uploads/' . $this->image->baseName . '.' . $this->image->extension);
                return true;
            } else {
                return false;
            }
        }
        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'id' => 'ID',
                'FIO' => 'ФИО',
                'tuman_id' => 'Туман номи',
                'Massiv' => 'Массив номи',
                'ferhojalik' => 'Фермер хўжалиги номи',
                'maydoni' => 'Майдони',
                'paxtamay' => 'Пахта майдони',
                'paxtashart' => 'Пахта майдони шартнома режаси (тонна)',
                'gallamay' => 'Ғалла майдони',
                'gallashart' => 'Ғалла майдони шартнома режаси (тонна)',
                'paxta_given' => 'Пахта шартнома бўйича топширилган тонна',
                'image' => 'Расм',
                'poliz' => 'Полизчилик',
                'sabzavot' => 'Сабзавотчилик',
                'chorva' => 'Чорвачилик',
            ];
        }
            // return $this->hasone(Extraagri::className(), ['id' => 'po_item_no']);

     public function getDone()
     {
        return  $this->hasone(done::classname(),['id'=>'paxta_done']);
     }

    /*      public function getPoitem()
        {
            return $this->hasMany(Poitem::className(), ['id' => 'po_item_no']);
        }*/

     /* public function getExtraagri()
        {
            return $this->hasMany(Extraagri::className(), ['id' => 'id']);
        }
    */


    }

【问题讨论】:

  • 如果你在前面加上return $model-&gt;paxtashart这样的return呢?
  • 我添加了 return 但仍然给我这个错误:类 Closure 的对象无法转换为 int
  • 尝试提前将闭包分配给一个变量。喜欢$paxtashart = function($model){ return $model-&gt;paxtashart; }。然后像value=&gt; (int) $paxtashart() 一样调用它。顺便说一句,$model 是什么?你能在这里添加更多代码吗!
  • 这是我的模特兄弟

标签: php yii2


【解决方案1】:

匿名函数是类闭包的一个实例。尝试以下变化

    //assign the closure to variable
    $value = function($model){
           return $model->paxtashart;
         }  
    $progressBarClass = function ($model, $column) {
            return $model->{$column->attribute} > 60
                ? \yiister\grid\widgets\ProgressColumn::STYLE_SUCCESS
                : \yiister\grid\widgets\ProgressColumn::STYLE_WARNING;
        }   
    [
        'class' => \yiister\grid\widgets\ProgressColumn::className(),
        'attribute' => 'paxta_given',
        'size' => \yiister\grid\widgets\ProgressColumn::SIZE_LARGE,
        'isAnimated' => true,
        'value'=>(int)$value($model), //invoke the closure and cast as integer
        'progressBarClass' =>(string)$progressBarClass($model, $column), //invoke the closure and cast as string
    ],

【讨论】:

  • 谢谢兄弟,它只是向我显示了这个错误:未定义的变量:模型
  • 这一行兄弟 --> 'value'=>(int)$value($model)
  • 我假设你已经在这部分之前的某个地方初始化了 $model!也许这就是问题所在。
  • PHP 通知 – yii\base\ErrorException 类 Closure 的对象无法转换为 int 1. in C:\xampp\htdocs\tomorqa_local\vendor\yiister\yii2-advanced-grid\src\小部件\ProgressColumn.php
  • 你定义的$model是什么? $model-&gt;paxtashart的值是多少?
猜你喜欢
  • 2019-05-02
  • 2020-06-26
  • 2017-03-08
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2012-06-22
  • 1970-01-01
相关资源
最近更新 更多