【问题标题】:turn array into object active record can use将数组转换为对象活动记录可以使用
【发布时间】:2011-03-01 17:32:05
【问题描述】:

我正在运行一个查询,然后在控制器中对其进行解密。解密后,我将结果放入数组并将其发送到视图。问题在于这个解决方案我需要重写我的所有视图来解析发送的数组而不是之前发送的活动记录对象。

有没有办法将解密后的数组转回一个可以与视图中现有的活动记录代码一起使用的对象?

之前

控制器:

$name = $this->Clients_model->getNameData('*','client_id='.$clid,'');
$data['name'] = $name;
$this->load->view('names/name_view',$data);

查看:

if($name->num_rows()) > 0){
    foreach($name->result() as $row){
        echo $row->data;
[...]

现在

控制器:

$name = $this->Clients_model->getNameData('*','client_id='.$clid,'');
$nameArray= array();
foreach ($name->result() as $row){
    $x = $row;
    $keys = array('id','client_id');
    $unenc = array();
    foreach ($x as $key=>$value){
        if(! in_array($key, $keys)){
            $unenc[$key]=$this->encrypt->decode($value,$this->e_key);
        }else{
            $unenc[$key]=$value;
        }
    }
    array_push($nameArray,$unenc);
}

//Creates an object with the data, but doesn't work with CI active record
//foreach ($nameArray as $akey  => $aval) {
//    $namea -> {$akey} = $aval;
//}

//return $data;
$data['name'] = $nameArray;
$this->load->view('names/name_view',$data);

查看:

if(count($name) > 0){
    foreach($name as $key=>$row){
        echo $row['data'];
[...]

在第二个(现在)控制器中,有一些注释掉的代码将创建一个对象,但它的行为与活动记录的预期不同。有没有办法获取$nameArray() 数组并将其更改为可以与现有视图代码一起使用的对象(例如上面'before:view' 中的代码)?

谢谢!

【问题讨论】:

    标签: php activerecord codeigniter object


    【解决方案1】:

    我在 CI 论坛上问过这个问题,并从用户 mddd 那里得到了一些出色的帮助:http://codeigniter.com/forums/viewthread/157516/#760320

    解决方案最终是在控制器中处理 mysql 结果对象:

        $name = $this->Clients_model->getNameData('*','client_id='.$clid,'');
        $dummy = $name->result();
        $ignore_keys = array('id', 'client_id');
        // watch! we're getting the row as a reference so we're really changing it; not working on a copy
        foreach ($name->result_object as &$row) {  
             foreach (get_object_vars($row) as $key=>$value){
                if(!in_array($key, $ignore_keys)){
                    $row->$key = $this->encrypt->decode($value,$this->e_key);
                }
            }
        }
        $data['name']=$name;
        $this->load->view('names/name_view',$data);
    

    这允许我只修改控制器中的查询而不是查询和所有视图。

    【讨论】:

    • 我推荐 pyro cms curl 库用于此功能,因为它可以更快地将变量传递给 ajax 模型,然后使用正则表达式来使用 couch db 推特引导模式我建议您尝试或简单的 mootool 插件使用 smarty 独立解析器进行输出直接到浏览器或在登录时给用户选择框架我认为它对你更好,因为你可以获得 coposer 的 symfony 路由器包,以便为禁用广告的用户生成 vanilla java 脚本中的文件,或者盲人会给你更好的 seo 跨度>
    猜你喜欢
    • 2020-07-13
    • 2020-04-04
    • 1970-01-01
    • 2017-12-10
    • 2018-04-28
    • 2011-06-24
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多