Codeigniter: Как я могу проверить, существует ли библиотечный метод без загрузки библиотеки? - PullRequest
0 голосов
/ 29 декабря 2010

Я хочу разделить определенные функции из методов контроллера в библиотеки, чтобы сделать их модульными.Основываясь на URI, я пытаюсь направить на метод библиотеки, если он существует.Но мне нужно было загрузить библиотеку для проверки метода с помощью функции php method_exists .Единственный другой способ проверить это - поместить все библиотечные методы в массив конфигурации и проверить там имя метода.Например:

<?php
/**
 * Application_config.php
 */

$config['extensions'] = array(
 'News' => array(
  'library' => 'articles_library',
  'methods' => array(
   'articles',
   'article',
   'edit_article',
   'add_article',
   'delete_article'
  )
 )
);

и

<?php
/**
 * admin_controller.php
 *
 * all admin routes go to index
 */
class C3_base_controller extends Controller {
 public function index() {
  $lib_chk = 0;
  $ext = $this->config->item('extensions');
  foreach($ext as $item) {
   foreach ($item['methods'] as $meth) {
    if ($this->uri->segment(2) == $meth) {
     $lib = $item['library'];
     echo $this->$lib->$meth();
     $lib_chk = 1;
    }
   }
  }
  if ($lib_chk == 0) {
   // rest of controller...
  }
 }
}

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

Ответы [ 2 ]

1 голос
/ 21 апреля 2013

Вы можете использовать

method_exists

Например, если вы проверяете объект базы данных, существует ли он

if(method_exists($this->CI->db, 'set')){
// code ...
}
0 голосов
/ 29 декабря 2010

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

Мне трудно представить, что ваше базовое приложение имеет жестко запрограммированные URL, которые ведут к библиотеке, которая может не существовать. Вы можете проверить библиотеку, а не метод? Это может быть проще проверить каталог и загрузить имена файлов в массив, а затем посмотреть, есть ли в этом массиве библиотека, необходимая для url или uri.

Но если вам нужно придерживаться своего массива существующих имен методов, не могли бы вы просто пересмотреть имена методов, которые появляются после "function (space)" и сопровождаются круглыми скобками?

...