phalcon / crest
Command line application for Phalcon
Requires
- php: ^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- infection/infection: ^0.29
- pds/composer-script-names: ^1
- pds/skeleton: ^1
- phalcon/phalcon: v6.0.x-dev
- phalcon/talon: ^0.9
- phpstan/phpstan: ^2
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3 || ^4
Suggests
- ext-phalcon: Phalcon C extension (^5) - alternative to the phalcon/phalcon package
This package is auto-updated.
Last update: 2026-07-31 02:09:45 UTC
README
Command line application for Phalcon - generators, introspection and project tooling.
Requirements
- PHP
^8.1 - Phalcon, either the
ext-phalconC extension (^5) or thephalcon/phalconPHP implementation (^6) - crest itself needs neither to run
Install
composer require --dev phalcon/crest
Usage
vendor/bin/crest list available commands
vendor/bin/crest about environment and version report
vendor/bin/crest make:action GET /company/all
Global options
| Option | Purpose |
|---|---|
--config=<file> |
explicit path to crest.php |
--directory=<dir> |
project root override |
--trace |
full exception trace |
--help, -h |
usage for the current command |
--quiet, -q |
suppress non-essential output |
--version |
crest version |
Configuration
crest.php at the project root is optional. Without it, crest reads composer.json's
psr-4 map and defaults paths.action to src/Action.
return [ 'flavor' => 'adr', 'namespace' => 'App', 'paths' => ['action' => 'src/Action'], ];
Namespaces are resolved from your psr-4 map, so a path must be covered by an autoload rule -
src/Action under App\ => src/ becomes App\Action. If you write to a directory your
autoloader does not cover, declare the namespace outright:
return [ 'paths' => ['action' => 'app/Handlers'], 'namespaces' => ['action' => 'Shop\Handlers'], ];
Booting the project
container:list and event:list report services and listeners, which exist only once the
application has registered them, so those two start your front controller. Name it in
crest.php:
return [ 'bootstrap' => App\Front\ApiFront::class, ];
The class is constructed with the project root and has to declare boot(). There is no
base class and no interface - boot() is the whole contract, and what it returns has to
implement Phalcon\Contracts\Container\Service\Collection, which
Phalcon\Container\Container does. See docs/index.md for the rest.
Every other command - the generators, about, config:show and route:list - reads the
filesystem and keeps working on a project that does not currently run.
Custom stubs
Copy a stub into resources/stubs/<flavor>/ in your project and crest uses yours instead
of the packaged one.
Development
docker compose up -d
docker exec crest-app composer install
docker exec crest-app composer test
docker exec crest-app composer cs
docker exec crest-app composer analyze
Set PHALCON_VARIANT=v6 in .env and rebuild to test against phalcon/phalcon instead
of the C extension.
License
BSD-3-Clause. See LICENSE.