Можем ли мы передать несколько параметров функции в контроллер?
Я использую 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
- Вы можете отправить свою форму через
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;
и т.д.:)