在不使用序列化的情况下将数据数组发送到函数

时间:2014-05-29 15:37:19

标签: php arrays cakephp arraylist

我有一个从excel加载数据的数组,现在我需要将这些数据发送到另一个视图以供审查测试,但是找不到因为是一个函数中的数组,我尝试使用序列化和反序列化但是这个在网址中发送characteres限制错误。

public function excel() {
    $this->loadModel('SoyaProductorCompra');
    $excel=array();
    $k=0;
    if ($this->request->is('post')) {
        $datos = new Spreadsheet_Excel_Reader();
        $datos->read($this->request->data['SoyaProductorCompra']['excel']['tmp_name']);
        for ($i = 2; $i <= $datos->sheets[0]['numRows']; $i++) {
            $excel[$k]['producto']=$datos->sheets[0]['cells'][$i][1];
            $excel[$k]['toneladas']=$datos->sheets[0]['cells'][$i][2];
            $excel[$k]['precio']=$datos->sheets[0]['cells'][$i][3];
            $excel[$k]['total']=$datos->sheets[0]['cells'][$i][4];
            $excel[$k]['fecha']=$datos->sheets[0]['cells'][$i][5];
            $excel[$k]['id']=$datos->sheets[0]['cells'][$i][6];
            $k++;

        }
        $this->set('excels',$excel);

        //return $this->redirect(array('action' => 'revision', serialize($excel))); not found
    }
}

这是我的另一个函数,它返回数组并在我的视图中显示但未找到

public function revicionexcel($data) {
    //$data=unserialize($data);  not work
    //debug($data); not work
}

2 个答案:

答案 0 :(得分:0)

我不会通过查询字符串发送整个电子表格的数据,即使它足够小也不能这样做。我的意思是,如果有人开始手动编辑URL,会发生什么?将数据写入文件,或将其保存在会话中。

答案 1 :(得分:0)

你似乎在同一个控制器内调用了这个功能,对吧?

如果是这样,那你为什么不使用:

public function excel()
{
    //read excel into $excel variable
    $this->revicionexcel($excel);
}

所以,这里不需要重定向

虽然建议您在model layer中使用Excel阅读,因为此图层适用于所有类型的数据管理。

编辑:

然后,根据您的评论,您可以将所有读数移至模型,并从控制器中调用它:

SoyaProductorCompra 型号:

public function excel($data) {
    //your excel reading function as you have it on the controller.
    //change all "$this->request->data" references for the parameter "$data"
    //be sure to return the excel properly.
    ...
    return $excel;
}

SoyaProductorCompras 控制器:

public function revision()
{
    $excel = $this->SoyaProductorCompra->excel($this->request->data);
    $this->set('excels', $excel);
}

我们在这里做的是从动作revision()调用模型中的excel开头,并将它们发送到它的视图。你不需要在这里重定向。