Инструменты разработчика Phalcon

Эти инструменты представляют собой набор полезных скриптов для генерации основы приложения. Основные компоненты приложения могут быть созданы простыми командами, позволяющими легко разрабатывать приложения с использованием Phalcon.

Скачать

Вы можете скачать кроссплатформенный пакет инструментов разработчиков используя публичный репозиторий на GitHub.

Установка

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

Linux : macOS : Windows

Доступные команды

Для получения списка имеющихся команд введите: phalcon commands

$ phalcon commands

Phalcon DevTools (3.4.0)

Available commands:
  info             (alias of: i)
  commands         (alias of: list, enumerate)
  controller       (alias of: create-controller)
  module           (alias of: create-module)
  model            (alias of: create-model)
  all-models       (alias of: create-all-models)
  project          (alias of: create-project)
  scaffold         (alias of: create-scaffold)
  migration        (alias of: create-migration)
  webtools         (alias of: create-webtools)
  serve            (alias of: server)
  console          (alias of: shell, psysh)

Создание скелета проекта

Вы можете использовать инструменты для создания скелета проекта на Phalcon. По умолчанию созданный проект будет использовать mod_rewrite для Apache. Введите следующие команды в корне сайта вашего веб-сервера:

$ pwd

/Applications/MAMP/htdocs

$ phalcon create-project store

Проект создастся с полной рекомендованной структурой:

Для получения подробной информации по командам стоит использовать параметр --help:

$ phalcon project --help

Phalcon DevTools (3.0.0)

Help:
  Creates a project

Usage:
  project [name] [type] [directory] [enable-webtools]

Arguments:
  help    Shows this help text

Example
  phalcon project store simple

Options:
 --name               Название нового проекта
 --enable-webtools    Определяет, нужно ли включать webtools [необязательно]
 --directory=s        Базовый путь, по которому будет создан проект [необязательно]
 --type=s             Тип создаваемого приложения (cli, micro, simple, modules)
 --template-path=s    Укажите путь к шаблону [необязательно]
 --use-config-ini     Использовать ini-файл в качестве файла конфигурации [необязательно]
 --trace              Показывает трассировку платформы в случае исключения. [Факультативный]
 --help               Показывает эту справку

Созданный проект можно сразу запустить в браузере:

Создание контроллеров

Команда create-controller генерирует структуры скелета контроллера. Важно вызвать эту команду в каталоге, который уже имеет проект Phalcon.

$ phalcon create-controller --name test

Команда выше сформирует следующий код:

<?php

use Phalcon\Mvc\Controller;

class TestController extends Controller
{
    public function indexAction()
    {

    }
}

Настройка базы данных

В проектах, созданных с использованием инструментов разработчика A configuration file can be found in app/config/config.php. Для генерации моделей, вам потребуется изменить настройки, используемые для подключения к вашей базе данных.

Измените раздел базы данных в файле config.php:

<?php
defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..'));
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');

return new \Phalcon\Config([
    'database' => [
        'adapter'     => 'Mysql',
        'host'        => 'localhost',
        'username'    => 'root',
        'password'    => 'secret',
        'dbname'      => 'test',
        'charset'     => 'utf8',
    ],
    'application' => [
        'appDir'         => APP_PATH . '/',
        'controllersDir' => APP_PATH . '/controllers/',
        'modelsDir'      => APP_PATH . '/models/',
        'migrationsDir'  => APP_PATH . '/migrations/',
        'viewsDir'       => APP_PATH . '/views/',
        'pluginsDir'     => APP_PATH . '/plugins/',
        'libraryDir'     => APP_PATH . '/library/',
        'cacheDir'       => BASE_PATH . '/cache/',

        // Это позволяет baseUri понимать пути проекта, которые не находятся в корневом каталоге веб-пространства.  
        // Это сломается, если точка входа public/index.php будет перемещена или, возможно,
        // при изменении правил перезаписи веб-сервера. Это также можно установить на статический путь.
        'baseUri'        => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),
    ]
]);

Создание моделей

Существует несколько способов генерации моделей. Вы можете создать все модели по таблицам текущей базы данных или для любой таблицы выборочно. Модели может содержать публичные атрибуты или работу через сеттеры и геттеры.

Options:
 --name=s             Имя таблицы
 --schema=s           Имя схемы. [необязательно]
 --namespace=s        Пространство имен модели [необязательно]
 --get-set            Атрибуты будут защищены и иметь сеттеры/геттеры. [необязательно]
 --extends=s          Модель расширяет предоставленное имя класса [необязательно]
 --excludefields=l    Исключает поля, определенные в списке через запятую [необязательно]
 --doc                Помогает улучшить автозавершение кода в IDE [необязательно]
 --directory=s        Базовый путь, по которому будет создан проект [необязательно]
 --force              Переписать модель. [необязательно]
 --trace              Показывает трассировку платформы в случае исключения. [необязательно]
 --mapcolumn          Получите код для карты столбцов . [необязательно]
 --abstract           абстрактная модель [необязательно]

Самый простой способ для создания модели:

$ phalcon model products
$ phalcon model --name tablename

Созданная модель содержит публичные атрибуты для прямого доступа.

<?php

use Phalcon\Mvc\Model;

class Products extends Model
{
    /**
     * @var integer
     */
    public $id;

    /**
     * @var integer
     */
    public $typesId;

    /**
     * @var string
     */
    public $name;

    /**
     * @var string
     */
    public $price;

    /**
     * @var integer
     */
    public $quantity;

    /**
     * @var string
     */
    public $status;
}

При использовании --get-set атрибуты модели будут закрыты для прямого изменения, работа с ними будет только через соответствующие сеттеры и геттеры. Такое поведение позволит изменить бизнес-логику работы модели внутри соответствующих методов.

<?php

use Phalcon\Mvc\Model;

class Products extends Model
{
    /**
     * @var integer
     */
    protected $id;

    /**
     * @var integer
     */
    protected $typesId;

    /**
     * @var string
     */
    protected $name;

    /**
     * @var string
     */
    protected $price;

    /**
     * @var integer
     */
    protected $quantity;

    /**
     * @var string
     */
    protected $status;

    /**
     * Метод установки значения для поля id
     *
     * @param integer $id
     */
    public function setId($id)
    {
        $this->id = $id;
    }

    /**
     * Метод установки значения для поля typesId
     *
     * @param integer $typesId
     */
    public function setTypesId($typesId)
    {
        $this->typesId = $typesId;
    }

    // ...

    /**
     * Возвращает значение статуса поля
     *
     * @return string
     */
    public function getStatus()
    {
        return $this->status;
    }
}

Приятной особенностью генератора моделей является то, что он сохраняет изменения, сделанные разработчиком. Это позволяет добавлять или удалять поля и свойства, не беспокоясь о потере изменений, внесенных в модель вручную. Следующий демо-ролик показывает как это работает:

Автоматическая генерация CRUD

Скаффолдинг (scaffolding; в переводе с англ. "строительные леса") — метод метапрограммирования для создания веб-приложений, взаимодействующих с БД. Это достаточны быстрый способ для получения основных элементов приложения. Если вы хотите быстро создать модели, представления, и контроллеры для нового ресурса приложения — использование автоматической генерации кода является отличным инструментом для этих задач.

После того, как код сгенерирован, его можно настроить под себя. Многие разработчики не используют scaffolding, предпочитая писать весь код самостоятельно. Сгенерированный код может служить в качестве руководства, чтобы лучше понять основы работы или разработки прототипов. Пример ниже показывает генерацию интерфейса для таблицы products:

$ phalcon scaffold --table-name products

Генератор эшафотов будет создавать несколько файлов в вашем приложении вместе с некоторыми папками. Вот краткий обзор того, что будет создано:

ФайлПредназначение
app/controllers/ProductsController.php Контроллер продуктов
app/models/Products.php Модель продуктов
app/views/layout/products.phtml Макет для контроллера продуктов
app/views/products/new.phtml Представление для действия new
app/views/products/edit.phtml Представление для действия edit
app/views/products/search.phtml Представление для действия search

На главной странице созданного таким образом контроллер вы увидите форму поиска, и ссылку на создание нового продукта:

Страница создания продукта позволяет добавить в таблицу products новую запись, при этом будут использованы проверки по правилам модели Products. Phalcon будет автоматически проверять not null поля и выдавать требования о их заполнении.

После выполнения поиска доступен компонент пейджера для отображения выведенных результатов. Используйте ссылки «Изменить» или «Удалить» перед каждым результатом для выполнения таких действий.

После выполнения поиска пейджер компонент для отображения результатов. Используйте ссылки" изменить "или" удалить " перед каждым результатом для выполнения таких действий.

Веб интерфейс инструментов

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

Интеграция в PhpStorm IDE

Скринкаст показывает, как интегрировать инструменты для разработчиков с PhpStorm IDE. Аналогично можно интегрировать дополнения в любой другой PHP редактор или IDE.

Заключение

Инструменты разработчика Phalcon предоставляют простой способ генерации кода для ваших приложений, тем самым сокращая время разработки и количества потенциальных ошибок в коде.