Консоль для CodeIgniter

Добрый день Хабрасообщество.

Выношу на ваш справедливый суд консоль для PHP фреймворка CodeIgniter.

Перед этим небольшое пояснение — я не являюсь фанатом CI, но, так как приходится работать в команде пополняющейся новобранцами, выбирается наиболее легкодоступный для освоения инструмент. Это же и касается ОС на которой ведется разработка Windows, хотя инструмент тестировался и прекрасно себя чувствует в Linux-based системах, по крайней мере в Ubuntu. Это является прототипом, поэтому код можно критиковать бесконечно.

Небольшое иллюстрирующее видео:


Команды CI console


[] — обязательно, {} — не обязательно, можно в именах использовать пути к субдиректориям, к примеру для вьювсов layouts/header — создаст директорию и в ней вьювс из шаблона.

Генерация файлов из шаблона

php ci.php create application {applicationName}
php ci.php create controller [controllerName] {actionName1} {actionName2}…
php ci.php create model [controllerName] {functionName1} {functionName2}…
php ci.php create view [viewName1] {viewName2} {viewName3}
php ci.php create helper [helperName]

Удаление файлов

php ci.php remove controller [controllerName]
php ci.php remove model [controllerName]
php ci.php remove view [viewName]
php ci.php remove helper [helperName]

Установка бандлов

php ci.php install tankauth-1.0.9
php ci.php install zend-1.11.10
php ci.php bundle install hmvc

Удаление бандлов

php ci.php uninstall tankauth-1.0.9
php ci.php uninstall zend-1.11.10
php ci.php bundle uninstall hmvc

Список доступных бандлов

php ci.php list
php ci.php bundle list

Дополнительно

php ci.php help / php ci.php? (читать документацию по использованию)
php readme hmvc (читать readme по бандлу)
php bundle readme hmvc (читать readme по бандлу)

В ближайших планах хочется сделать возможность миграций для БД. Используя папку из структуры фреймворка /application/migration/ и добавить описания для бандлов (на сайте и list для общего просмотра).

Пояснения


0. Корректная работа как в Windows XP (cmd.exe), так и Linux (bash).

1. Создание приложения на самом деле является установка bundle в текущую директорию где вы находитесь, фактически ci create application example == ci install codeigniter-2.0.2

2. Думаю с созданием контроллеров, моделей и хелперов все ясно, обычное создание из шаблонов с корректным именованием и размещением в структуре файлов фреймворка.

3. Удаление — обычное стирание.

4. Собственно главное — это bundles. Установка являет собой скачивание zip архива и его распаковка в корень. И последующее скачивание установочного скрипта и его выполнение. На примере tankauth-1.0.9 — занесение необходимых данных в БД:

$sql = <<<SQL

SQL;

include BASEPATH . DS . 'application' . DS . 'config' . DS . 'database.php';

$dbdriver = $db['default']['dbdriver'];
$hostname = $db['default']['hostname'];
$database = $db['default']['database'];
$username = $db['default']['username'];
$password = $db['default']['password'];

try {
    $dbh = new PDO("$dbdriver:host=$hostname;dbname=$database", $username, $password);
    $dbh->exec($sql);
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}


При распаковке перечень всех установленных файлов сохраняется в /application/logs/tankauth-1.0.9.log по крайней мере удалить bundle без интернета можно будет, кроме скрипта удаления конечно.

5. Удаление bundle противоположно установке, из /application/logs/tankauth-1.0.9.log удаляются все файлы и пустые директории, после чего скачивается и запускается скрипт удаления, если такой есть.

6. Вы можете добавлять свои bundles в config/bundles.json

7. Bunlde сейчас сам собираю, список не густой:
  • codeigniter-2.0.2
  • codeigniter-2.0.3 (последний релиз фреймворка)
  • zend-1.11.10 (Zend c классом библиотеки для CI)
  • tankauth-1.0.9 (с установкой в текущую БД из application/config/database.php)
  • hmvc (паттерн HMVC)
  • partial (хелпер для включения вьювса во вьювс)
  • sitemap
  • anchor_img (хелпер ссылка-картинка)
  • langiden-0.29 (расширение, для мультиязычности)
  • doctrine-1.2.4 (экспериментальный)
  • doctrine-2.0.7 (экспериментальный)
  • ci_sessions (добавление таблицы сессий из оф. документации в вашу БД)

Ссылка на скачивание: bitbucket.org/anatooly/ciconsole/downloads/20111014-ciconsole.zip
Ссылка проекта: bitbucket.org/anatooly/ciconsole

Буду рад услышать конструктивную критику.

Udp.: добавил несколько бандлов, вывод их списка и readme по каждому. Ссылка на Вики: bitbucket.org/anatooly/ciconsole/wiki/Home
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 24

    0
    Довольно аккуратно и удобно.

    Из критики наверное лишь мелочи:
    1.Действия в контроллере создаются сразу в public (Иногда приходится делать скрытые).
    2.При создании директории автоматически нужно помещать index.html как во всём фрейморке для безопастности.
      0
      Я вообще не знаю CI, но…
      1. Как могут действия быть не public? Звучит как бред.
      2. .htaccess Options -Indexes?
        0
        Есть функции внутри контроллера которые используются только внутри контроллера и их нельзя вызвать извне. Их конструкция такова:
        private function _validation()
        {
        // some code
        }


        Я например использую такие функции при проверке авторизации.
          0
          Извне т.е: example.com/index.php/controller/_validation/ работать не будет.
          0
          А при чем тут собственно экшены? И вообще, если в контроллере потребовался private метод, значит что-то не так. Вот в случае проверки авторизации что, в каждом экшене фильтр вызывается? типа:

             public function index() {
               $this->checkAuth();
               ...
            }
          
             public function show() {
               $this->checkAuth();
               ...
            }
          
             public function edit() {
               $this->checkAuth();
               ...
            }
          
           ...
          


          Это же ерунда получается, все нормальные люди делают так:

          class MyController {
            public function preDispatch() {
              if (!$everithingOk) {
                $this->error();
              }
            }
          
             public function index() {
               ...
            }
          
             public function show() {
               ...
            }
          
             public function edit() {
              ...
            }
          }
          
          class FrontController() {
            public function dispatch() {
              $contoller->preDispatch();
              $contoller->$action();
            }
          }
          


          Грубо говоря как-то так. Все фреймворки, с которыми я работал, поддерживают такую фигу «из коробки», даже если в CI этого не (в чем я сомневаюсь), то накодить самому не проблема.
            +3
            s/фигу/фичу/ лол :)
              0
              Не на случай если нужно проверять $this->checkAuth(); не обязательно писать его в каждом методе. Достаточно написать в конструкторе класса:
              function __construct()
              {
              parent::__construct();
              $this->checkAuth();
              }
              0
              Из коробки это и не нужно, ибо приватные методы в контроллере — зачастую всегда на совести разработчика.

              В некотором смысле — это плохой тон.

              Бывает надо, бывает — нет. Но, раз уж MVC — можно и в модель положить или в хелпер на крайняк.
                0
                Упс, выше было написано — не заметил.
          +6
          Из критики только CI устаревший фреймворк… конечно меня сейчас заминусуют, но это правда.
            0
            Это уже не критика, а холивар)) да и автор в посте указал почему использует CI
              0
              Не думаю, что для новичков CI является идеальным вариантом. Ладно, не буду тролить… я просто фанат Yii :)
                0
                давайте щас все обсудим кто какой фанат, а в итоге прав будет тот, кто скажет, что все это слизано с рельсов… на этом холивар предлагаю считать законченным
                  +1
                  Правы будут фанаты Yii :) Все, закончили холивар…
                    +1
                    Ребят, я же пошутил… Кому, что удобно… то и используют.
            +2
            Удобная фишечка от Symfony теперь и в CI — здорово!
              0
              если бы потрудились комментировать действия голосом, тогда видео было бы ценнее многим людям не знающим вообще фреймворков и разработчикам других…
              было интересно просмотреть на труд…
              содержательное, но немое кино…
                0
                Благодарю. Постараюсь исправиться в будущем.
                +1
                Обилие static методов наталкивает на мысль о некоторой кривости архитектуры, может быть всетаки не

                Console::createTemplate($argv[2], 'controllers', array_slice($argv, 3));
                


                а

                $template = new ControllerTemplate($argv[2], array_slice($argv, 3));
                $template->save();
                


                Ну в таком духе что-то… А то превратится класс Console со временем в адскую километровую портянку, и будете вы думать, «а при чем тут собственно ООП?»
                  0
                  Благодарю. Оптимизировать есть куда, кривость будем выравнивать.
                • UFO just landed and posted this here
                    0
                    В конечном итоге лучше так: генератор контроллеров CRUD (сразу с вьюшками), модели, scaffold
                    И подобие rake db:migrate
                    А потом можно всем объединится и сделать легковесный аналог capistrano, и будет нам счастье)

                    В рельсах все это весьма неплохо работает.

                    Only users with full accounts can post comments. Log in, please.