将数据从gridview传递到函数

时间:2014-02-09 19:27:59

标签: php sockets yii

我的服务器模型中有一个函数:

  public function getStatus($server) {
        $socket = @fsockopen($server, '80', $errno, $errstr, 3);
          if($errno == 0) { return true; }
            else { return false;}
        fclose($socket);
    }

在Server视图中的admin.php中:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'server-grid',
'dataProvider'=>$model->search(),
//'filter'=>$model,
'columns'=>array(
    'id',
    'server_name',
    'server_ip',
            array(
                'header'=>'Status',
                'type'=>'html',
                'value'=>$model->getStatus($model->server_ip)?'1':'0',
                 ),
),
)); ?>

server_ip的mysql列是:

`server_ip` varchar(20) NOT NULL DEFAULT '0.0.0.0',

我无法使用getStatus函数获得所需的结果。它一直返回0。当我输入静态值

'value' => $model->getStatus('192.168.1.1')?'1':'0',

它运作正常。

'value' => '$data->server_ip', 

给我每个服务器的ip地址。但是当传递给getStatus时,无论服务器状态如何,它总是返回1。

有人可以指导我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

CGridView值表达式$data中,每个Server引用当前对象/数组。因此,您可以使用Server访问$data属性和方法:

'value'=>'$data->getStatus($data->server_ip)?1:0',

修改

fsockopen()中的最后一个参数是一个浮点数,表示以秒为单位的超时时间。为了减少加载时间:

  1. 将超时设置为较低的数字
  2. 缓存数据库中最后一个状态的结果。这可以定期刷新。
  3. 渲染视图减去状态并通过ajax获取状态。