2015-02-24 2 views
1

У меня есть имя класса Deal и имеют функцию внутри которой имя добавки из растиCI: Лучшая практика для использования той же функции в контроллере

class Deal extends CI_Controller { 
    public function addit() { 
     //my function 
    } 
} 

И у меня есть другое имя контроллера Public и я хочу использовать функцию addit, которые относятся к классу Deal, расширьте его.

class Public extends Deal { 
     public function addit() { 
      //my function 
     } 
} 

Я совершенно новое в Codeigniter и просто прочитать несколько ссылок, глядя на другой вопрос, на этом сайте, и уже некоторые ответы, но я не знаю, какой из них является лучшая практика для этого, здесь какое-то решение Я нашел:

1.Создать Сделка файл и сохранить в приложении/библиотеке функцию, чтобы другой контроллер мог использовать ее функцию.

2.Создать addit Функция на приложении/помощник, чтобы мы могли использовать ее функцию в любом месте.

3.Create Сделка файл в приложении/ядро, поэтому другой контроллер может использовать его функцию.

Мой вопрос в том, что является наилучшей практикой для решения моей проблемы, и есть ли другое решение?

ответ

3

Это зависит от того, какую функцию мы говорим здесь. Если речь идет о действительно простой функции, которые не делают никакого доступа к БД или иметь взаимодействие с компонентами CI, вы можете создать помощник:

Цитату из документации CodeIgniter:

Помощники не написаны в объектно-ориентированный формат. Они простые, процедурные функции. Каждая вспомогательная функция выполняет одну конкретную задачу: без зависимости от других функций.

http://www.codeigniter.com/user_guide/general/helpers.html


Однако, если это относительно сложный код, то вам следует рассмотреть вопрос о написании библиотеки:

В приложении/библиотеки создают Tools.php (или что вы хотите)

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Tools 
{ 
    protected $ci; 

    public function __construct() 
    { 
     $this->ci =& get_instance(); 
     //Allows you to access CI components 
    } 

    public function myfunction($data) 
    { 
     //If you want to use codeigniter's functionalities : 
     //use $this->ci->function() 
    } 

} 

А затем в ваших контроллерах:

$this->load->library("tools"); 
$this->tools->myfunction($data); 

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

$autoload['libraries'] = array('database', 'tools', '...'); 

CI документ о библиотеках: http://www.codeigniter.com/user_guide/general/creating_libraries.html


Вариант 3 не подходит вашей проблемы, поскольку вы не распространяющие сам CI.

Из комментариев: Как следует из названия, «ядро» предназначено для улучшения ядра CI. Если вам не нравится, например, когда CI обрабатывает сеансы, то вы можете написать новый базовый класс, однако, если речь идет о вашей системе управления пользователями, то это касается вашего приложения, а не рамки и должно быть сделано в lib.

+0

ok sir, я получил вашу точку зрения за библиотеку и помощник, но я не получаю ее, когда вы сказали, что опция 3 не подходит, плохо ли, если я создам класс «Сделка внутри приложения/ядро» и другой контроллер использует класс «Сделка»? – Melvin

+1

Как следует из названия, «ядро» предназначено для улучшения ядра CI. Если вам не нравится, например, когда CI обрабатывает сеансы, то вы можете написать новый базовый класс, однако, если речь идет о вашей системе управления пользователями, то это касается вашего приложения, а не рамки и должно быть сделано в lib. – AdrienXL

+0

Удивительный сэр, спасибо, теперь я получаю это – Melvin

Смежные вопросы