Значение GET или POST от контроллера к модели в codeigniter

Есть ли способ передать значение от одного контроллера к модели как GET или POST

У меня есть 1 контроллер V1 и 1 модель Vmodel.

class V1 extends CI_Controller {        
    function __construct()
    {
        parent::__construct();
        $this->load->model('Vmodel','',TRUE);
    }
    /* index action */
    public function index()
    {
      $user='abcd';
      $details  = $this->Vmodel->login();
    }       
}       

модель

class V1Modelnew extends CI_Model{
public function __construct() {

    }

          public function login()
          {
            //here, I need to get the user variable as post
            echo $_POST['user'];
          }
}

Мне нужно получить значение «abcd» как POST в модели. Любой способ сделать это?


person Shameem    schedule 22.02.2016    source источник
comment
$_POST['user'] ='abcd'; используйте это в контроллере   -  person devpro    schedule 22.02.2016


Ответы (4)


Ошибки в вашем коде

  1. Вы загружаете модель как $this->load->model('Vmodel', но вы определяете, что она имеет V1Modelnew
  2. Вы не передаете значение $user в свою модельную функцию
  3. Нет значения, связанного с $_POST['user']

В контроллере

class V1 extends CI_Controller {        
    function __construct()
    {
        parent::__construct();
        $this->load->model('V1Modelnew'); # Changed
    }

    public function index()
    {
      $user='abcd';
      $details  = $this->V1Modelnew->login($user); # Changed
    }       
}

В модели

class V1Modelnew extends CI_Model{

    public function __construct() 
    {

    }

    public function login($user) # Changed
    {
        echo $user; # Changed
    }
}
person Abdulla Nilam    schedule 22.02.2016
comment
О, здорово, я не видел название модели ... Хороший улов - person devpro; 24.02.2016

Здесь есть архитектурная проблема. Вы не хотите, чтобы ваша модель обращалась к значениям в $_POST или $_GET. Это связывает уровень вашей модели с уровнем HTTP вашего приложения.

Вместо этого вы хотите передать необходимые значения в свою модель в качестве аргументов функции.

Ваш контроллер:

$details = $this->Vmodel->login('abcd', $_POST['password']);

И ваша модель:

public function login($username, $password) {
    // return $details
}
person Greg Burghardt    schedule 22.02.2016

Контроллер

class V1 extends CI_Controller {        
    function __construct()
    {
        parent::__construct();
        $this->load->model('Vmodel','',TRUE);
    }
    /* index action */
    public function index()
    {
      $user='abcd';
      $details  = $this->Vmodel->login($_POST);
    }       
}       

Модель

class V1Modelnew extends CI_Model{
public function __construct() {

    }

          public function login($data='')
          {
            //here, I need to get the user variable as post
            echo $_POST['user'];
          }
}
person safin chacko    schedule 22.02.2016

Попробуйте таким образом

class V1 extends CI_Controller {        
    function __construct()
    {
        parent::__construct();
        $this->load->model('Vmodel','',TRUE);
    }
    /* index action */
    public function index()
    {
      $user=$this->input->post('user');
      $details  = $this->Vmodel->login($user);
    }       
}

Модель:

class Vmodel extends CI_Model{ //use Vmodel NOT V1Modelnew 
public function __construct() {

    }

          public function login($user)
          {

            echo $user;
          }
}

Если вы хотите использовать пользователей post и get, вам нужно сделать это в контроллере следующим образом:

$value = $this->input->post('value_name'); // for Post
$value = $this->input->get('value_name'); // for GET

Дополнительную информацию см. в документации.

person Erman Belegu    schedule 22.02.2016