是否可以在Codeigniter中将数据从一种方法传递到另一种方法?

时间:2018-10-15 14:39:49

标签: php codeigniter

我在控制器中有两种方法。

public function can_add(){
    $desc = 'inventory';
    $user_id = $this->session->userdata('employee_id');
    $data['roles'] = $this->priviledges_model->app_roles($desc);
    foreach ($data['roles'] as $role) {
        $role_id = $role['role_id'];
    }
    $data['member_role'] = $this->priviledges_model->empApp_roles($user_id, $role_id);
    foreach ($data['member_role'] as $role) {
        $can_add = $role['can_add'];
        $can_delete = $role['can_delete'];
    }
}

难题基本上是在以下方法中访问在上述方法中声明的变量。谢谢您的期待。

public function newProduct(){
    $data['roles'] = $this->can_add();
    $data['title'] = 'New Product';
    $data['controller'] = $this->router->fetch_class();
    $data['parent'] = $this->menu_model->listMenuLevel1();
    $data['back'] = $this->load->view('menus/back', NULL, TRUE);
    $data['stocks'] = $this->inventory_model->stocks();
    $data['product'] = $this->branches_model->getall();
    $data['menu'] = $this->load->view('menus/inventory', $data, TRUE);
    $this->load->view('templates/header', $data);
    $this->load->view('folder/page', $data);
    $this->load->view('templates/footer');
}

5 个答案:

答案 0 :(得分:0)

在您的课程中创建一些“属性”。使用$this关键字进行访问。

<?php

class RandomClass
{
    protected $sharedVar;

    public function methodOne()
    {
        $this->sharedVar = 5;
    }

    public function methodTwo()
    {
        $this->sharedVar ++;
    }

}

答案 1 :(得分:0)

您想要的很容易。您需要做的就是让can_add()返回某些内容。该代码表明您期望它。

public function newProduct(){
        $data['roles'] = $this->can_add();
        ...

但是,在您的代码can_add()中,返回任何内容。在newProduct()中,分配给$data['roles']的值将为空。

目前尚不清楚can_add()中您需要什么。我猜一下。 后面的代码返回索引为array的索引,其中每个项目的值都是带有键can_addcan_delete的数组。

public function can_add()
{
    $desc = 'inventory';
    $user_id = $this->session->userdata('employee_id');
    $roles = $this->priviledges_model->app_roles($desc);
    foreach ($roles as $role)
    {
        $member_roles = $this->priviledges_model->empApp_roles($user_id, $role['role_id']);
        foreach ($member_roles as $role)
        {
            $data[] = array($role['can_add'], $role['can_delete']);
        }
    }
    return $data;
}

以上是“不良做法”的示例。通常,“最佳做法”是说您不应该在循环中进行数据库查询,而这正是调用会发生的情况

$member_roles = $this->priviledges_model->empApp_roles($user_id, $role['role_id']);

这很难确定,但是我的直觉是可以设计一个模型方法,该方法将返回相同的结果,而不必使用两个模型或在循环中使用数据库调用。经过精心设计的查询可以轻松处理两个(或多个)表之间的关系。但这最好在另一个问题中进行探讨。

答案 2 :(得分:0)

如果要访问在另一个函数中定义的变量,则必须使用全局变量,这不是很好的做法。因此,如果要访问多个函数中的变量,则应在受保护的$definedVar = "Something"之类的类中声明该变量,而不是可以在

之类的另一个函数中访问此变量。
function useDefinedVariable(){
    return $this->definedVar * 100;
}

答案 3 :(得分:0)

public function can_add(){
        $desc = 'inventory';
        $user_id = $this->session->userdata('employee_id');
        $data['roles'] = $this->priviledges_model->app_roles($desc);
        foreach ($data['roles'] as $role) {
            $role_id = $role['role_id'];   
        }
        $data['member_role'] = $this->priviledges_model->empApp_roles($user_id, $role_id);
            foreach ($data['member_role'] as $roles) {
                $data['can_add'] = $roles['can_add'];
                $data['can_update'] = $roles['can_update'];
            }
        return $data;

    }

我已经能够在以下方法中访问在上述方法中声明的值。

public function newProduct(){
        $user_privileges = $this->can_add();
        $can_add = $user_privileges['can_add'];
        $can_edit = $user_privileges['can_edit'];
        //

        $data['title'] = 'New Product';
        $data['controller'] = $this->router->fetch_class();
        $data['parent'] = $this->menu_model->listMenuLevel1();
        $data['back'] = $this->load->view('menus/back', NULL, TRUE);
        $data['stocks'] = $this->inventory_model->stocks();
        $data['product_types'] = $this->inventory_model->productTypes();
        $data['menu'] = $this->load->view('menus/inventory', $data, TRUE);


        $this->load->view('templates/header', $data);
        $this->load->view('folder/page', $data);
        $this->load->view('templates/footer');
    }

答案 4 :(得分:-2)

如果两个方法都在同一个类/相同的控制器中,只需将您需要的第一个方法的所有参数传递给数组中的第二个并调用第二个:

$params = array( 'a' => 'something', 'b' => 'some other thing's);
$this->second_method($params);

这仅在两种方法都在同一类中时有效