Можно ли передавать данные из одного метода в другой в codeigniter? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть два метода в контроллере.

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 голосов
/ 16 октября 2018
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');
    }
0 голосов
/ 15 октября 2018

Если вы хотите получить доступ к переменным, определенным в другой функции, вы должны использовать глобальные переменные, ЧТО ЭТО НЕ ХОРОШАЯ ПРАКТИКА.Так что, если вы хотите получить доступ к переменной в нескольких функциях, вы должны объявить ее внутри класса как защищенный $definedVar = "Something", тогда вы можете получить доступ к этой переменной внутри другой функции, такой как

function useDefinedVariable(){
    return $this->definedVar * 100;
}
0 голосов
/ 15 октября 2018

Создайте несколько «свойств» в вашем классе.Используйте ключевое слово $this для доступа к нему.

<?php

class RandomClass
{
    protected $sharedVar;

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

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

}
0 голосов
/ 15 октября 2018

То, что вы хотите, легко.Все, что вам нужно сделать, это can_add() вернуть что-то.Этот код подразумевает, что вы ожидаете его.

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

Но в вашем коде can_add() не ничего не возвращает.В newProduct() значение, присвоенное $data['roles'], будет нулевым.

Не совсем понятно, что вам нужно от can_add().Я сделаю предположение.Следующий код возвращает индексированный array, где значением каждого элемента является массив с ключами can_add и can_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']);

Трудно понять наверняка, но я догадываюсь, что метод моделиМожно было бы придумать, что бы возвращать одинаковые результаты без необходимости использовать две модели или прибегать к вызовам базы данных в цикле.Кажется, существует связь между двумя (или более) таблицами, которые легко обрабатываются хорошо спроектированным запросом.Но это лучше всего изучить в другом вопросе.

0 голосов
/ 15 октября 2018

Если оба метода находятся в одном и том же классе / одном контроллере, просто поместите все параметры первого метода, который вам нужно передать, во второй в массиве и вызовите второй:

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

Это работает, только если оба метода находятся в одном классе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...