Можем ли мы передать несколько параметров функции в контроллер?

Я использую codeigniter. У меня есть файл вида, в котором я выбираю сотрудника и отправляю идентификатор с помощью действия формы и выбираю услуги, которые сотрудник может выполнять и хранить в таблице. Я вставил идентификатор сотрудника и идентификатор службы. Теперь мне нужно вставить имя сотрудника.
Мой файл контроллера

 class admin_service_limitation extends CI_Controller{
    public function services()
        {
    $id = $this->session->userdata('employee');
    $id_array = $this->input->post("services");
//I need to get the employee name here and store them in a table along with employee id and service id
    for ($i = 0; $i < count($id_array); $i++) {
        if(isset($id_array[$i])&& $id_array[$i]!=""){
        $data_to_store = array('employee_id' => $id, 'service_id' => $id_array[$i]);
        $this->add_service_model->save($data_to_store);
       }
    }
    $data['addservice'] = $this->add_service_model->get_addservices();
    $data['main_content'] = 'admin/service_limitation/newview';
    $this->load->view('includes/template', $data);

    }

Здесь я получаю идентификатор сотрудника и идентификатор службы и сохраняю их в таблице. В этой таблице содержатся такие поля, как employee_id, employee_name и service_id.
Мой файл модели:

class sample_model extends CI_Model{

 function store_service($data)
    {
        $insert = $this->db->insert('service', $data);
        return $insert;
}
}

Здесь я написал функцию, которую я использую для вставки в таблицу addservice. Я получаю все данные для хранения в виде массива и сохраняю их в таблице addservice.
Мой файл просмотра, где я выбираю сотрудника. select.php

 <?php          
      echo form_open('admin/service_limitation/service_view/'.$this->uri->segment(4).'', $attributes);
      ?>

     <table class="table table-striped table-bordered table-condensed">
            <thead>
              <tr>
                <th class="header">Employee id</th>
                <th class="yellow header headerSortDown">First name</th>
                <th class="green header">Last name</th>
                <th class="red header">Email</th>
                <th class="red header">Chair renter</th>

                <th class="red header">Actions</th>
              </tr>
            </thead>
            <tbody>
              <?php
              foreach($employee as $row)
              {
                echo '<tr>';
                echo '<td>'.$row['id'].'</td>';
                echo '<td>'.$row['emp_first_name'].'</td>';
                echo '<td>'.$row['emp_last_name'].'</td>';
                echo '<td>'.$row['emp_email_id'].'</td>';
                                echo '<td>'.$row['chair_renter'].'</td>';



                echo '<td class="crud-actions">
                  <a href="'.site_url("admin").'/service_limitation/service_view/'.$row['id'].'" class="btn btn-info">Select employee</a>  

                </td>';
                echo '</tr>';
              }
              ?>      
            </tbody>
          </table> 
<?php echo form_close(); ?>

В этом представлении у меня есть форма после того, как я отправлю форму, идентификатор сотрудника будет отправлен в функцию контроллера. Здесь мне нужно отправить имя сотрудника сейчас. Может ли кто-нибудь помочь мне создать код?
Еще один вид, где я выбираю услуги:
service_view.php

            <?php

            $attributes = array('class' => 'form-inline reset-margin', 'id' => '');
 echo form_open('admin/service_limitation/newview', $attributes);

            ?>             
          <table class="table table-striped table-bordered table-condensed">
            <thead>
              <tr>
                <th class="header">Service id</th>
                <th class="yellow header headerSortDown">Service name </th>
                <th class="green header">Service catogary</th>
                <th class="red header">Service tax</th>
                <th class="red header">Service length</th>
                <th class="red header">Service price</th>
                <th class="red header">Actions</th>
              </tr>
            </thead>
            <tbody>
              <?php
              foreach($service as $row)
              {
                echo '<tr>';
                echo '<td>'.$row['id'].'</td>';
                echo '<td>'.$row['service_name'].'</td>';
                echo '<td>'.$row['category'].'</td>';
                echo '<td>'.$row['service_tax'].'</td>';
                echo '<td>'.$row['service_length'].'</td>';
                echo '<td>'.$row['service_price'].'</td>';
                echo '<td class="crud-actions">
                 <input type="checkbox" value="'.$row['id'].'" name="services[]"/>

                </td>';
                echo '</tr>';
              }
              ?>      
            </tbody>
          </table>
    <button class="btn btn-primary" type="submit">Save changes</button>
            <button class="btn" type="reset">Cancel</button>
    </div>
      <?php echo form_close(); ?>  

Вышеупомянутый вид вызывает функцию services в моем файле контроллера, с помощью которого я могу сохранять данные, такие как идентификатор сотрудника, из первого представления и идентификатор служб со второго представления.

Изменить 01

public function select_service($id)
    {
        $this->load->library('session');
         $this->session->set_userdata('employee', $id);

    $data['service'] =   $this->add_service_model->get_services();  
            $data['main_content'] = 'admin/service_limitation/service_view';
        $this->load->view('includes/template', $data);  

    }

Это функция, в которой я получаю идентификатор employee как переменную сеанса и использую их в функции выбора, которую я выше. возможно ли получить имя сотрудника, как я получил employee_id.

Ответы

Ответ 1

Несколько параметров могут быть переданы в функцию контроллера путем добавления дополнительных сегментов URL. Возможно, вам потребуется настроить маршрут для этого в приложении /config/routes.php.

документация CodeIgniter упоминает, как это сделать, и как все это работает.

Если это не соответствует тому, что вы конкретно, а параметры не всегда совпадают по длине, тогда вам понадобится использовать форму для отправки данных и использовать $this->input... для получения данные, которые вы хотите использовать в функции

Ответ 2

Как упоминалось в NetVicious, вы можете передавать атрибуты в самом URL-адресе, как показано ниже:

<a href="<?php echo site_url('member/addcard/'.$member->customer_id.'/'.$member->customer_mobile); ?>" class="btn-danger glyphicon glyphicon-plus"><strong style="color: #dddddd;">Add Card</strong></a>

И в контроллере вы можете назвать его как -

function addcard($id,$phone) {
//Your Code
}

Это сработало для меня.

ИЛИ вы можете добавить data-pricetag="<?= $treatments->treatment_price?>" data-customer="<?= $member->customer_type?>" что-то подобное в вашем теге ввода и вызвать функцию onlick. Тогда

function update_price(e) {  
//  $('#treatment').on('change',function () {

  var price = 0;

    $(#yourid, $(e)).click(function(){
     //console.log($(this).data('pricetag'));
     //You get the values here
     price += $(this).data('pricetag');
     //price += parseInt( $(this).next().text())  
     var cust_type =  $(this).data('customer'); 

jQuery.ajax({
           type: 'POST',
          // dataType: 'html',
          //dataType: "json",
          data: your parameters,
           async:true,
        url: "<?php echo base_url() . 'member/memberPack/'; ?>",

       success: function(data)
       {
           console.log(data);
            //$("#price").html("");

        $("#price").val(data.package_price);
        $("#session").val(data.package_session);

       }
    });

}); }

Это всего лишь макет моей идеи, вам нужно попробовать. Извините, если какие-либо ошибки.

Ответ 3

Есть два способа решить ваш запрос (кроме отправки в качестве сегмента uri): -

  • Вы передаете только ID, делайте это как при вставке в свою БД: -

    INSERT INTO EMPLOYEE_TABLE(employee_id, employee_name, service_id) SELECT $employee_id,(SELECT employee_name from employee_table where employee_id=$employee_id),$service_id

    1. Вы можете отправить свою форму через AJAX: -
("#employee_form").submit(function(e) {   
                  base_url=<?php your_base_url ?>
                    e.preventDefault();
                    $.ajax({
                        type : "POST",
                        url : base_url+"controller_name/function",
                        data : $("#employee_form").serialize(),
                        success : //do anything
                    });
                });

Теперь в вашем контроллере вы можете получить свои данные по почте i.e.: -

$this->input->post('employee_name');

Ответ 4

Я предполагаю, что в вашей первой форме получите данные о сотрудниках. когда вы храните этот идентификатор сотрудника, вы также можете выбрать имя сотрудника. и сохраните его как id.

но если вы хотите это другим способом, вам нужно получить данные своего сотрудника, такие как имя, идентификатор и передать их как:

$data['employee_id'] = your employee id;
$data['employee_name'] = your employee name;

таким образом в вашем service_view.php вы получили две новые переменные.

$employee_id: это идентификатор вашего сотрудника; $ employee_name: имя вашего сотрудника.

тогда, когда вам нужно передать их любому действию, просто передайте их как любую ссылку на вашем сайте.

site_url() . 'Controller_Name/Method_name/'.$employee_id.'/'.$employee_name;

и т.д.:)