Как вызвать функцию внутри другого файла контроллера в PHP?

У меня есть одна функция, которую мне нужно вызвать из другого файла с помощью 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' ); ?>

но я не могу сделать это в середине функции.

Оба они являются файлами контроллера. Любая помощь будет оценена по достоинству.

Если вам нужно вызвать метод контроллера из другого контроллера, вам, вероятно, следует абстрагировать этот код в помощник или библиотеку и вызвать его из обоих контроллеров.

Aakash Martand 21.05.2019 14:35

$this->load->library('controllers/jobassignment'); работает? Я имею в виду, что $this->jobassignment является экземпляром jobassignment?

Claudio 21.05.2019 14:35

@claudio, я получаю следующую ошибку: «Невозможно загрузить запрошенный класс: назначение работы»

PortyR 21.05.2019 14:36

@RivaPortman, как называется класс внутри файла контроллера задания?

Claudio 21.05.2019 14:37
class Jobassignment extends MY_Controller {
PortyR 21.05.2019 14:38

Что значит "не работает"? Нет никаких причин, по которым вы не можете вызывать другой контроллер как <form action=...

DFriend 21.05.2019 15:07

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

M.Hemant 21.05.2019 15:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
384
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это не имеет ничего общего с Codeigniter. Если Jobassignment.php является классом PHP, вы можете создать его экземпляр, а затем вызвать эту функцию:

user namespace/Jobassignment

$jobassignment = new Jobassignment();

$jobassignment->createassignments();

но если этот метод, который вы создаете, будет вызывать другие классы, вы должны создать класс в каталоге Helpers, а затем вызвать метод так, как я объяснил.

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

Спасибо, я попробую это.

PortyR 21.05.2019 14:37

Я не знаю, как это сделать. Я посмотрю. Спасибо вам за помощь.

PortyR 21.05.2019 14:43

@RivaPortman создайте каталог с именем Helpers. добавьте в него класс PHP с именем Jobassignment.php и поместите этот метод (функцию) createassignments() в этот класс. после этого все, что вам нужно сделать, это создать экземпляр класса и вызывать этот метод везде, где вы хотите

Salar Bahador 21.05.2019 15:03

@RivaPortman Если вам нужен ответ, не забудьте сделать его лучшим ответом и проголосовать за него. Спасибо

Salar Bahador 21.05.2019 15:03

Ответ не является хорошим решением при использовании CodeIgniter (CI). Во-первых, CodeIgniter < v4 ​​не использует пространство имен. Во-вторых, и это более важно, CI не может успешно создавать экземпляры двух контроллеров одновременно. Технически это возможно, но, скорее всего, это приведет к большому количеству ошибок.

DFriend 21.05.2019 15:04

@DFriend Возможно, ты прав, мой друг. тогда он должен требовать файл по старинке

Salar Bahador 21.05.2019 15:08

Или, как вы предлагаете, в хелпер. Пользовательский класс в /application/libraries также может быть хорошим решением. Это может быть успешно загружено и использовано любым количеством контроллеров.

DFriend 21.05.2019 15:10

Если цель состоит в том, чтобы сделать действие формы методом в другом контроллере, тогда ваш код

<form action = "<?php echo base_url( 'jobassignment/createassignments' ); ?>

это прекрасно. Вам просто нужно понимать, что вы делаете редирект и выполнение кода в текущем контроллере выполнено. Поймите, что <form action...> — это всегда перенаправление, при котором значения входных элементов формы отправляются на сервер.

Поскольку это перенаправление, нет причин звонить $this->load->library('controllers/jobassignment');

Другие вопросы по теме