是否可以在代码点火器中将数据从一种方法传递到另一种方法?



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

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');
}

在类中创建一些"属性"。 使用$this关键字访问它。

<?php
class RandomClass
{
protected $sharedVar;
public function methodOne()
{
$this->sharedVar = 5;
}
public function methodTwo()
{
$this->sharedVar ++;
}
}

你想要的很简单。您需要做的就是can_add()返回一些东西。此代码表示您希望它这样做。

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

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

目前尚不清楚您需要从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']);

很难确定,但我的预感是,可以设计一种模型方法,该方法将返回相同的结果,而无需使用两个模型或在循环中诉诸数据库调用。两个(或多个(表之间似乎存在关系,设计良好的查询可以轻松处理这些关系。但这最好在另一个问题中探讨。

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

function useDefinedVariable(){
return $this->definedVar * 100;
}
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');
}

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

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

这仅在两个方法在同一类中时才有效

相关内容

  • 没有找到相关文章

最新更新