absszero / phead
A PHP code generator to generate code via your LAYOUT file.
0.2.1
2024-06-22 01:55 UTC
Requires
- php: ^7.4 || ^8.0
- symfony/console: ^5.4 || ^7.0
- symfony/yaml: ^5.4 || ^7.0
Requires (Dev)
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^8.0 || ^9.0 || ^10.0
- vimeo/psalm: ^4.0 || ^5.0
This package is auto-updated.
Last update: 2024-11-11 14:38:31 UTC
README
A PHP code generator to generate code via your LAYOUT file.
Installation
-
Install the package:
composer global require absszero/phead
-
Set up Composer bin path:
Linux / macOS
# Bash shell echo 'export PATH="$PATH:~/.composer/vendor/bin"' >> ~/.bashrc source ~/.bashrc # Z shell echo 'export PATH="$PATH:~/.composer/vendor/bin"' >> ~/.zshrc source ~/.zshrc # Fish shell fish_add_path ~/.composer/vendor/bin
Windows
- Right click on Start up -> System -> Advance system settings -> Environment variables -> System variables[below box] -> Select Path and click Edit.
- Click New and add this value
%USERPROFILE%\AppData\Roaming\Composer\vendor\bin
.
Usage
From Sample
# Get a sample layout file. $ phead --sample my-layout.yaml my-layout.yaml is generated. # Generate code via your layout file. $ phead my-layout.yaml Generating files... Hello/MyController.php Hello/MyModel.php
Dry run
$ phead my-layout.yaml --dry Generating files... (dry run) Hello/MyController.php (skip) Hello/MyModel.php (skip)
Overwrite files
Existing files will not be regenerated, you can overwrite with --force
.
$ phead my-layout.yaml --force Generating files... (force) Hello/MyController.php (overwrite) Hello/MyModel.php (overwrite)
Only those files
Only those file keys will be generated.
$ phead my-layout.yaml --only=model1,model2 Generating files... Hello/MyModel1.php Hello/MyModel2.php
Layout
Layout file has two main parts:
$globals
: The global variables.$files
: The files for auto generation.
$globals: dir: Hello # Define a variable via environment variable user: '{{ $env.USER }}' $files: # The file key model: # The file variables. # 'namespace', 'class' variables will be auto generated via 'to' path vars: foo: bar # Overwrite default namespace namespace: App\Hello # 'from', 'to' are required # 'from' can also be a stub file path, # EX. from: /my/stub/file.stub from: | <?php namespace {{ namespace }}; class {{ class }} { public $foo = '{{ foo }}'; } to: "{{ $globals.dir }}/MyModel.php" controller: from: | <?php namespace {{ namespace }}; class {{ class }} { public index() { // {{ $files.model }} will be replaced with \App\Hello\MyModel $model = new {{ $files.model }}; } } to: "{{ $globals.dir }}/MyController.php" # Append new methods to the class file methods: - | public function get() { return 'something'; } test: # Skip the file skip: true from: | <?php namespace {{ namespace }}; class {{ class }} { public testSomething() { } } to: "{{ $globals.dir }}/MyTest.php"