У меня есть одна функция, которую мне нужно вызвать из другого файла с помощью Codeigniter, и я не знаю, как это сделать.
Один файл находится в файле controllers/Jobassignment.php, который содержит функцию createassignments(), которую мне нужно вызвать из controllers/Reporting.php. Я новичок в Codeigniter, так как мне вызвать функцию createassignments из Reporting.php?
Я старался
$this->load->library('controllers/jobassignment');
$this->jobassignment->createassignments();
Но это не работает.
Он был вызван в теге формы:
<form action = "<?php echo base_url( 'jobassignment/createassignments' ); ?>
но я не могу сделать это в середине функции.
Оба они являются файлами контроллера. Любая помощь будет оценена по достоинству.
$this->load->library('controllers/jobassignment');
работает? Я имею в виду, что $this->jobassignment
является экземпляром jobassignment
?
@claudio, я получаю следующую ошибку: «Невозможно загрузить запрошенный класс: назначение работы»
@RivaPortman, как называется класс внутри файла контроллера задания?
class Jobassignment extends MY_Controller {
Что значит "не работает"? Нет никаких причин, по которым вы не можете вызывать другой контроллер как <form action=...
если вы хотите, чтобы два контроллера могли получить доступ к одной и той же функции, вам нужно поместить эту функцию в помощник, что является лучшим вариантом, если вы хотите, чтобы мы это сделали, поделитесь этой функцией здесь или прочитайте документацию CI для вспомогательной функции, вы обязательно это сделаете
Это не имеет ничего общего с Codeigniter. Если Jobassignment.php является классом PHP, вы можете создать его экземпляр, а затем вызвать эту функцию:
user namespace/Jobassignment
$jobassignment = new Jobassignment();
$jobassignment->createassignments();
но если этот метод, который вы создаете, будет вызывать другие классы, вы должны создать класс в каталоге Helpers, а затем вызвать метод так, как я объяснил.
Не делайте экземпляр класса запроса. вы должны создать вспомогательный класс, чтобы справиться с этим.
Спасибо, я попробую это.
Я не знаю, как это сделать. Я посмотрю. Спасибо вам за помощь.
@RivaPortman создайте каталог с именем Helpers. добавьте в него класс PHP с именем Jobassignment.php и поместите этот метод (функцию) createassignments() в этот класс. после этого все, что вам нужно сделать, это создать экземпляр класса и вызывать этот метод везде, где вы хотите
@RivaPortman Если вам нужен ответ, не забудьте сделать его лучшим ответом и проголосовать за него. Спасибо
Ответ не является хорошим решением при использовании CodeIgniter (CI). Во-первых, CodeIgniter < v4 не использует пространство имен. Во-вторых, и это более важно, CI не может успешно создавать экземпляры двух контроллеров одновременно. Технически это возможно, но, скорее всего, это приведет к большому количеству ошибок.
@DFriend Возможно, ты прав, мой друг. тогда он должен требовать файл по старинке
Или, как вы предлагаете, в хелпер. Пользовательский класс в /application/libraries также может быть хорошим решением. Это может быть успешно загружено и использовано любым количеством контроллеров.
Если цель состоит в том, чтобы сделать действие формы методом в другом контроллере, тогда ваш код
<form action = "<?php echo base_url( 'jobassignment/createassignments' ); ?>
это прекрасно. Вам просто нужно понимать, что вы делаете редирект и выполнение кода в текущем контроллере выполнено. Поймите, что <form action...>
— это всегда перенаправление, при котором значения входных элементов формы отправляются на сервер.
Поскольку это перенаправление, нет причин звонить $this->load->library('controllers/jobassignment');
Если вам нужно вызвать метод контроллера из другого контроллера, вам, вероятно, следует абстрагировать этот код в помощник или библиотеку и вызвать его из обоих контроллеров.