Skip to content

Repository files navigation

Phalcon Crest

Latest Version PHP Version Total Downloads License

Crest CI Quality Gate Status Coverage PDS Skeleton

Discord Contributors OpenCollective Backers OpenCollective Sponsors

Command line application for Phalcon - generators, introspection and project tooling.

Requirements

  • PHP ^8.1
  • Phalcon, either the ext-phalcon C extension (^5) or the phalcon/phalcon PHP 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.

About

No description, website, or topics provided.

Resources

Security policy

Stars

Watchers

Forks

Releases

Contributors

Languages