2016-08-10 5 views
3

Я использую REST Server в CodeIgniter, и способ использовать то, что тогда в моем приложении во всех моих контроллерах я должен написать эту линию на старте:Codeigniter 3 автозагрузки контроллер

require APPPATH . '/libraries/REST_Controller.php'; 

Кто-нибудь знает, как автозагрузка этого REST_Controller и избежать этой строки во всех моих контроллерах? Я не хочу использовать require.

Спасибо заранее

ответ

2

Вы можете добиться этого с помощью конфигурации автозагрузки Codeigniter «s.

Редактировать ваш проект autoload.php, который находится в каталоге YourProject/application/config/

$autoload['libraries'] = array('REST_Controller'); 

И в контроллерах этого класса библиотеки через $this->rest_controller.

BTW: Rest_Controllers - это файл библиотеки, поэтому я не думаю, что имя, добавленное с Controller, является хорошим именем для него.

Редактировать

Через свой комментарий я получил вы на самом деле означает все контроллеры протяженных от REST_Controller, и вы не хотите требовать его в верхней части каждого файла контроллера.

Решение:

  1. Переместить в папку REST_Controller.phpYourProject/application/core/.
  2. В YourProject/application/config/config.php линии 119 Изменение $config['subclass_prefix'] = 'MY_'; к $config['subclass_prefix'] = 'REST_';

затем Codeigniter будет загружать REST_Controller автоматически.

Но subclass_prefix конфигурация имеет глобальный эффект, и вы должны изменить расположение REST_Conttoller.php, так, чтобы минимальное изменение, которое я считаю, что лучший способ создать MY_Controller класс в директории ./application/core/ и требуют REST_Controller в нижней части этого нового файла. Когда CI загрузится MY_controller автоматически REST_Controller также потребуется.

Примечание:MY_Controller необходимости расширения от CI_Controller

+0

Все мои контроллеры расширяют REST_Controller. Поэтому, если я вставляю autoload в пакеты REST_Controller, я не могу использовать $ this-> rest_controller, потому что я должен использовать до начала класса: class Users extends REST_Controller {} – Sasa

+0

Хорошо, я знаю, я отредактирую свой ответ и предоставил решение для этого. @ Sasa –

+0

См. мой Edit @Sasa –

1

Пут файла включает в конструкторе MY_Controller класса, а затем распространить его на любой контроллер, который должен использовать REST_Controller. Если вы не имеете MY_Controller.php файл в APPPATH.'core/' месте, сделать один и использовать его, как представлено здесь:

<?php defined('BASEPATH') OR exit('See you next time.'); 

//APPPATH.'core/' location 
class MY_Controller extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 

     require APPPATH . 'libraries/REST_Controller.php';//this constant ends with slash already 
    } 
} 

Теперь в каждом контроллере вы хотите использовать REST_Controller есть такой код:

<?php defined('BASEPATH') OR exit('See you next time.'); 

//example controller 
class Api extends MY_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    //bare example method 
    public function some_get() 
    { 
     echo '<pre>', var_dump('Some REST_Controller code logic here'), '</pre>'; 
    } 
} 
+0

Я не мог справиться с этим решением, получил ошибку 404 не найден. – Sasa

+0

Я написал, что это пример контроллера с примером метода. Обновите свой вопрос, как вы его использовали, чтобы я мог больше помочь. – Tpojka