Phalcon Devtools


Ці інструменти допомагають генерувати скелетний код, підтримувати структуру бази даних та сприяють пришвидшенню розробки. Основні компоненти вашого додатка можна створити за допомогою простої команди, що дозволяє легко розробляти програми за допомогою Phalcon.

Управляти Phalcon Devtool можна за допомогою командного рядка (cmd) або веб-інтерфейсу.


Phalcon Devtools можна встановити за допомогою . Переконайтесь, що ви встановили composer.

Установка Phalcon Devtools глобально

composer global require phalcon/devtools

Або лише всередині вашого проекту

composer require phalcon/devtools

Перевірте свою установку, набравши: phalcon

$ phalcon

Phalcon DevTools (4.0.0)

Доступні команди:
  info             (синонім: i)
  commands         (синоніми: list, enumerate)
  controller       (синонім: create-controller)
  module           (синонім: create-module)
  model            (синонім: create-model)
  all-models       (синонім: create-all-models)
  project          (синонім: create-project)
  scaffold         (синонім: create-scaffold)
  migration        (синонім: create-migration)
  webtools         (синонім: create-webtools)
  serve            (синонім: server)
  console          (синоніми: shell, psysh)

Інструменти devtools також доступні у форматі phar для завантаження у нашому репозиторії github.


Available Commands

You can get a list of available commands in Phalcon tools by typing: phalcon commands

$ phalcon commands

Phalcon DevTools (4.0.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)

Generating a Project Skeleton

You can use Phalcon tools to generate pre-defined project skeletons for your applications with Phalcon framework. By default the project skeleton generator will use mod_rewrite for Apache. Type the following command on your web server document root:

$ phalcon create-project store

The above recommended project structure was generated:

You could add the parameter --help to get help on the usage of a certain script:

$ phalcon project --help

Phalcon DevTools (4.0.0)

  Creates a project

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

  help  Shows this help text

  phalcon project store simple

 --name=s               Name of the new project
 --enable-webtools      Determines if webtools should be enabled [optional]
 --directory=s          Base path on which project will be created [optional]
 --type=s               Type of the application to be generated (cli, micro, simple, modules)
 --template-path=s      Specify a template path [optional]
 --template-engine=s    Define the template engine, default phtml (phtml, volt) [optional]
 --use-config-ini       Use a ini file as configuration file [optional]
 --trace                Shows the trace of the framework in case of exception [optional]
 --help                 Shows this help [optional]

Accessing the project from the web server will show you:

Generating Controllers

The command create-controller generates controller skeleton structures. It’s important to invoke this command inside a directory that already has a Phalcon project.

$ phalcon create-controller --name test

The following code is generated by the script:


class TestController extends \Phalcon\Mvc\Controller

    public function indexAction()



Preparing Database Settings

When a project is generated using developer tools. A configuration file can be found in app/config/config.php. To generate models or scaffold, you will need to change the settings used to connect to your database.

Change the database section in your config.php file:


 * Modified: prepend directory path of current file, because of this file own different ENV under between Apache and command line.
 * NOTE: please remove this comment.
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'    => '',
        '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'        => '/',

Generating Models

There are several ways to create models. You can create all models from the default database connection or some selectively. Models can have public attributes for the field representations or setters/getters can be used.

 --name=s             Table name
 --schema=s           Name of the schema [optional]
 --config=s           Configuration file [optional]
 --namespace=s        Model's namespace [optional]
 --get-set            Attributes will be protected and have setters/getters [optional]
 --extends=s          Model extends the class name supplied [optional]
 --excludefields=l    Excludes fields defined in a comma separated list [optional]
 --doc                Helps to improve code completion on IDEs [optional]
 --directory=s        Base path on which project is located [optional]
 --output=s           Folder where models are located [optional]
 --force              Rewrite the model [optional]
 --camelize           Properties is in camelCase [optional]
 --trace              Shows the trace of the framework in case of exception [optional]
 --mapcolumn          Get some code for map columns [optional]
 --abstract           Abstract Model [optional]
 --annotate           Annotate Attributes [optional]
 --help               Shows this help [optional]

The simplest way to generate a model for a table called users is:

$ phalcon model users

If your database looks like this:

CREATE TABLE `users` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` char(60) NOT NULL,
  `active` tinyint(1) NOT NULL

  ADD KEY `email` (`email`);


It will result in


use Phalcon\Validation;
use Phalcon\Validation\Validator\Email as EmailValidator;

class Users extends \Phalcon\Mvc\Model


     * @var integer
    public $id;


     * @var string
    public $name;


     * @var string
    public $email;


     * @var string
    public $password;


     * @var string
    public $active;

     * Validations and business logic
     * @return boolean
    public function validation()
        $validator = new Validation();

            new EmailValidator(
                    'model'   => $this,
                    'message' => 'Please enter a correct email address',

        return $this->validate($validator);

     * Initialize method for model.
    public function initialize()

     * Allows to query a set of records that match the specified conditions
     * @param mixed $parameters
     * @return Users[]|Users|\Phalcon\Mvc\Model\ResultSetInterface
    public static function find($parameters = null): \Phalcon\Mvc\Model\ResultsetInterface
        return parent::find($parameters);

     * Allows to query the first record that match the specified conditions
     * @param mixed $parameters
     * @return Users|\Phalcon\Mvc\Model\ResultInterface
    public static function findFirst($parameters = null)
        return parent::findFirst($parameters);


Options for generating different type of model blueprints can be found using

phalcon model --help

Scaffold a CRUD

Scaffolding is a quick way to generate some of the major pieces of an application. If you want to create the models, views, and controllers for a new resource in a single operation, scaffolding is the tool for the job.

Once the code is generated, it will have to be customized to meet your needs. Many developers avoid scaffolding entirely, opting to write all or most of their source code from scratch. The generated code can serve as a guide to better understand of how the framework works or develop prototypes. The code below shows a scaffold based on the table users:

$ phalcon scaffold --table-name users

The scaffold generator will build several files in your application, along with some folders. Here’s a quick overview of what will be generated:

File Purpose
app/controllers/UsersController.php The Products controller
app/models/Users.php The Products model
app/views/layout/users.phtml Controller layout for Users
app/views/products/search.phtml View for the action search
app/views/products/new.phtml View for the action new
app/views/products/edit.phtml View for the action edit

When browsing the recently generated controller, you will see a search form and a link to create a new Product:

The create page allows you to create products applying validations on the Products model. Phalcon will automatically validate not null fields producing warnings if any of them is required.

After performing a search, a pager component is available to show paged results. Use the “Edit” or “Delete” links in front of each result to perform such actions.

Web Interface to Tools

Also, if you prefer, it’s possible to use Phalcon Developer Tools from a web interface. Check out the following screencast to figure out how it works:

Integrating Tools with PhpStorm IDE

The screencast below shows how to integrate developer tools with the PhpStorm IDE. The configuration steps could be easily adapted to other IDEs for PHP.