2013-03-03 5 views
2

простой вопрос я предполагаю.codeigniter передать переменную от контроллера к модели

Мой контроллер получает, если отображать с URL-адреса, используя $this->uri->segment(3). Это всегда будет одно значение. Я кладу это в массиве, чтобы перейти к модели с:

$customerid = array(
    'id' => $this->uri->segment(3) 
); 

Синтаксис контроллера ниже:

function confirm_delete_customer() 
{ 
      $data['title']="Confirm Customer Deletion"; 

      $customerid=array(
       'id'=>$this->uri->segment(3) 
       ); 

      //query model to get data results for form 
      $data=array(); 

      if($query=$this->model_master_data->get_customer_records_to_delete()){ 
       $data['records']=$query; 


      $this->load->view("master_data/view_master_data_header",$data); 
      $this->load->view("master_data/view_master_data_nav"); 
      $this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data); 
      $this->load->view("master_data/view_master_data_footer"); 



} 

Я затем пытается получить это значение массива и передать его в мой модель для обработки. Если я жесткий код массив в модели он работает в соответствии с ниже синтаксис:

модели - Ручной синтаксис:

function get_customer_records_to_delete() 
{ 
    $query = $this->db->get_where('customers', array('id'=>43)); 
    return $query->result(); 
} 

если я пытаюсь заменить это массив из моего контроллера он терпит неудачу с ошибкой : Undefined variable: customerid

идея модели, которую я хочу, чтобы получить рабочий:

function get_customer_records_to_delete() 
{ 
    $query = $this->db->get_where('customers', $customerid); 
    return $query->result(); 
} 

У меня такое ощущение, что это что-то маленькое. однако это лучший способ получить одну запись из базы данных для вывода на просмотр?

Заранее благодарим за помощь.

ответ

4

Лучший способ сделать это:

function confirm_delete_customer() 
{ 
    $data=array(); 

    $data['title']="Confirm Customer Deletion"; 

    $customerId = $this->uri->segment(3); 

    //Prevent SQL injections 
    if(!is_numeric($customerId) || empty($customerId)) { 
     show_error("Bad Request"); 
    } 

    $query = $this->model_master_data->get_customer_records_to_delete($customerId); 

    if ($query){ 
     $data['records']=$query; 


     $this->load->view("master_data/view_master_data_header",$data); 
     $this->load->view("master_data/view_master_data_nav"); 
     $this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data); 
     $this->load->view("master_data/view_master_data_footer"); 

    } 
} 

, а затем вы можете просто позвонить:

function get_customer_records_to_delete($customerId) 
{ 
    $query = $this->db->get_where('customers', array('id'=>$customerId)); 
    return $query->result(); 
} 

в вашей модели.

+0

Спасибо, Джон. Это работает, но это лучшая практика?Я думал, что контроллер должен получить значение и передать его модели, а не модели, получающей значение напрямую? – Smudger

+0

Во-вторых, это лучший фрагмент кода, который можно использовать для возврата одной записи? Еще раз спасибо. – Smudger

+0

Ответ: нет, это не лучшая практика. Я обновляю ответ с помощью передовой методики. –

2

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

Ex:

get_customer_records_to_delete($customerid) 
{ 
    // now $customerid is accessible 
    $query = ....; 
    return $……; 
} 
2

Вы должны в значительной степени зависят от параметров функции. Возьмите идентификатор клиента с контроллера и отправьте его в модель. Кроме того, вы можете использовать row(), чтобы получить единственный результат из базы данных.

Контроллер:

function confirm_delete_customer(){ 
    $data['title']="Confirm Customer Deletion"; 

    $customerid=$this->uri->segment(3); 


    //query model to get data results for form 
    $data=array(); 

    if($query=$this->model_master_data->get_customer_records_to_delete($customerid)) //you are sending customer id as a parameter here 
    $data['records']=$query; 


    $this->load->view("master_data/view_master_data_header",$data); 
    $this->load->view("master_data/view_master_data_nav"); 
    $this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data); 
    $this->load->view("master_data/view_master_data_footer"); 



}} 

Модель

function get_customer_records_to_delete($customerid) 
{ 
    $query = $this->db->get_where('customers', array("id"=>$customerid)); //you are using the customer id sent from the controller here 
    return $query->row(); //this will return a single row 
} 
+0

@Smudger Я знаю, что мне потребовалось немного ответа: D ... но приветствую в любом случае :) – deadlock

0

Старый нить но ответ объявить переменную как "общественность" в контроллере (т.е. public $customerid;), в этом случае он будет доступен вашей модели. В некоторых случаях, вероятно, безопаснее явно передавать аргумент. Однако, когда у вас есть несколько переменных, полезно иметь возможность объявить их вместо этого.

Смежные вопросы