CodeIgniter — куда ставить функции/классы?

У меня проблемы с пониманием того, где классы должны храниться в CI. Я создаю приложение, которое описывает/продает мобильные телефоны.

Я хотел бы, чтобы все мои функции (например, getphone, getdetails и т. д.) находились в одном классе с именем Mobile. Я понимаю, что этот файл должен называться Mobile.php и находиться в папке контроллеров.

Могу ли я иметь несколько функций внутри Mobile.php? Например.

public function getphone() {
   xxx
   xx
   xx
}

public function getdetails() {
   xxx
   xx
   xx
}

Или мне нужно поместить каждую функцию в свой класс?

Я был бы очень признателен за пример кода, который работает. Я просматривал документацию и Google в течение нескольких часов и пробовал всевозможные варианты URL-адреса, чтобы найти тестовый класс, но без особого успеха! Я даже возился с маршрутами и .htaccess...

Все, что я пытаюсь достичь, это следующее:

http:///model/HTC-Desire/ для перенаправления на функцию, которая принимает HTC-Desire в качестве параметра (поскольку мне это нужно для поиска в БД). Контроллер по умолчанию работает нормально, но после этого ничего не может работать.

Любые идеи?

Спасибо


person AvgJoe007    schedule 31.01.2012    source источник


Ответы (4)


На самом деле это работает так:

Контроллеры и модели переходят в свои папки перспективы, как вы это знаете.

Если вы хотите создать функции, которые не являются методами объекта, вы должны создать вспомогательный файл. Дополнительная информация здесь: http://codeigniter.com/user_guide/general/helpers.html

Теперь, если вы хотите создать свои собственные типы данных (классы, которые не расширяют модели и контроллеры), вы добавляете их в папку библиотеки. Итак, если, допустим, вы хотите создать класс «Автомобиль», вы создаете этот файл:

class Car{

   function __construct(){}
}

и сохраните его в папке библиотек как car.php

Чтобы создать экземпляр класса Car, вы должны сделать следующее:

$this->load->library('car');
$my_car = new Car();

Подробнее о библиотеках здесь:
http://codeigniter.com/user_guide/general/creating_libraries.html

person Loupax    schedule 01.02.2012

Да, вы можете иметь столько функций в классе контроллера, сколько захотите. Они доступны по URL-адресу /class/function.

Вы можете перехватывать параметры в функциях класса, хотя это и не рекомендуется.

class Mobile extends CI_Controller{

    public function getPhone($phoneModel=''){
        echo $phoneModel;
        //echo $this->input->post('phoneModel');
    }
}

http://site.com/mobile/getPhone/HTC-Rad теоретически будет отображать "HTC-Rad". ОДНАКО специальные символы не приветствуются в URL-адресах в CI по умолчанию, поэтому в этом примере вместо этого вы можете столкнуться с ошибкой «Запрещенные символы URI». Лучше указать модель телефона ( или любые другие параметры) через $_POST на контроллер.

person stormdrain    schedule 31.01.2012

Классы могут существовать как Controllers, так и Models, поскольку CodeIgniter реализует Шаблон MVC. Я рекомендую прочитать больше об этом, чтобы понять, как ваши классы/функции/и т.д. можно лучше всего организовать.

Внезапно мне пришло в голову, что Pyro CMS — это приложение, созданное с помощью CodeIgniter, исходный код которого находится в свободном доступе. Я уверен, что есть и другие.

person Colin Brock    schedule 31.01.2012

Я думаю, что лучше всего вам справиться с этим с одной точки зрения, то есть; создайте служебный класс со всеми вашими функциями. Ответ на вопрос, куда класть/поместить файл класса - это папка "libraries". Это четко указано в документации. Поместите свой курс в папку библиотек.

Когда мы используем термин «библиотеки», мы обычно имеем в виду классы, расположенные в каталоге библиотек и описанные в справочнике по классам данного руководства пользователя.

Подробнее о создании и использовании библиотек можно прочитать Создание библиотек — документация CodeIgniter 3.1.10

После помещения вновь созданного класса в папку библиотек, чтобы использовать его, просто загрузите библиотеку в свой контроллер, как показано ниже:

$this->load->library('yourphpclassname');

Если вы хотите получить несколько аргументов в своем конструкторе, вы должны изменить его, чтобы получить аргумент, который будет массивом, и тогда ваша загрузка/инициализация будет немного отличаться, как показано ниже:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('yourphpclassname', $params);

Затем, чтобы получить доступ к любой из функций в классе, просто сделайте это, как показано ниже:

$this->yourphpclassname->some_method();

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

person Enrico    schedule 30.08.2019