【问题标题】:Codeigniter | repeated code in controller代码点火器 |控制器中的重复代码
【发布时间】:2016-11-18 21:34:37
【问题描述】:

我正在使用 Codeigniter,问题是我的控制器中有很多重复的特定代码,我需要将此代码放在一个地方,然后在控制器中调用它。

示例:

 public function A()
    {
        something 1
        something 2
        something 3
        something 4

        $data = bla bla bla;
    }

    public function B()
    {
        something 1
        something 2
        something 3
        something 4

        for ($i=0; $i < ; $i++) { 
            # code...
        }
    }
    public function C()
    {
        something 1
        something 2
        something 3
        something 4

        if (condition) {
            # code...
        } else {
            # code...
        }

    }

每次我需要(东西 1 东西 2 东西 3 东西 4) 我怎样才能停止重复呢?

编辑: 这是我的“东西”代码:

$all_menus = $this->menu_model->get_all($this->getLanguage());
        foreach ($all_menus as $row) {
                $children = $this->menu_model->get_children($row->id_menu,$this->getLanguage());
                $row->children = $children;
                $data[] = $row;

【问题讨论】:

  • somethings 会是静态的吗?
  • @Kisaragi 我编辑了我的问题,谢谢。
  • 把它放在你的构造函数中
  • 哦,现在您添加了额外的代码 :-) 我的示例,并在 application/config/autoload 中自动加载菜单模型,因此您不必在构造函数中调用它
  • 但实际上如果这是用于导航菜单?然后在某个时候你会想要一个视图模板,你可以在那里做。真的,这是您根本不希望在控制器中出现的那种东西。

标签: php codeigniter


【解决方案1】:

你可以这样做:

class Something{

  public function A(){
   self::myFunction();
  }

  public function B(){
   self::myFunction();
  }

  private function myFunction(){
      $all_menus = $this->menu_model->get_all($this->getLanguage());
      foreach ($all_menus as $row) {
         $children = $this->menu_model->get_children($row>id_menu,$this->getLanguage());
         $row->children = $children;
         $data[] = $row;
      }
   }

}

通过这种方式,您可以访问每个使用 self 调用 myFunction 的函数中的数据

【讨论】:

  • 正如我所说,如果他需要在使用这些值之前对它们做一些事情,他可以在 __construct() 中完成工作。所以不,如果值也是动态的,这也有效......但是,在他问的情况下,您可以在每个函数中看到“something = 1”,例如具有相同的确切值,因此问题中的值是静态的,这就是我以这种方式写答案的原因。
  • 然后很容易,使用该代码创建一个函数,并在您需要的每个函数中调用它。检查新代码。如果您需要“全局”访问(在您的类中)“$data[]”,您可以在“class Something{”之后添加 var“$data = array()”,这样您就可以调用函数 myFunction在其中,您可以在 var $data 中赋值,例如 $this->data[] = $row;例如,您将可以访问 A() 和 B() 中的该 var。
【解决方案2】:

一个模型:

    class Something extends CI_Model
    {

        function __construct()
        {

            parent::__construct();
        }

        public function returnCommon()
        {
            $common = array('hello'=>'world','codeigniter'=>'awesome','chocolate'=>'yes please');

            return $common; 

        }


    }

任何控制器:

function __construct()
{

    parent::__construct();

    $this->load->model('something');

   $this->common = $this->something->returnCommon() ; 

}


public function A()
{

    foreach($this->common as $key=>$value)
    {
        // etc etc 
    }

}

public function B()
{
    $worldAwesome = $this->common['hello'] . '  ' . $this->common['codeigniter'] ; 


}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2011-06-04
  • 2016-01-28
  • 2012-06-30
相关资源
最近更新 更多