Memio
Memio is a library, it allows you to describe PHP code by building "Model" classes
(e.g. new Method('__construct')
) and then to generate it using a PrettyPrinter
!
Note: The actual generation logic is held in Twig templates. If the coding style provided doesn't appeal to you, you can overwrite those templates easily.
Installation
Install using Composer:
composer require memio/memio:^2.0@alpha
Full example
We're going to generate a class with a constructor and two attributes:
<?php
require __DIR__.'/vendor/autoload.php';
use Memio\Memio\Config\Build;
use Memio\Model\File;
use Memio\Model\Object;
use Memio\Model\Property;
use Memio\Model\Method;
use Memio\Model\Argument;
// Describe the code you want to generate using "Models"
$file = (new File('src/Vendor/Project/MyService.php'))
->setStructure(
(new Object('Vendor\Project\MyService'))
->addProperty(new Property('createdAt'))
->addProperty(new Property('filename'))
->addMethod(
(new Method('__construct'))
->addArgument(new Argument('DateTime', 'createdAt'))
->addArgument(new Argument('string', 'filename'))
)
)
;
// Generate the code and display in the console
$prettyPrinter = Build::prettyPrinter();
$generatedCode = $prettyPrinter->generateCode($file);
echo $generatedCode;
// Or display it in a browser
// echo '<pre>'.htmlspecialchars($prettyPrinter->generateCode($file)).'</pre>';
With this simple example, we get the following output:
<?php
namespace Vendor\Project;
class MyService
{
private $createdAt;
private $filename;
public function __construct(DateTime $createdAt, string $filename)
{
}
}
Want to know more?
Memio can be quite powerful, discover how by reading the docs:
You can see the current and past versions using one of the following:
- the
git tag
command - the releases page on Github
- the file listing the changes between versions
And finally some meta documentation:
Roadmap
- commands (e.g. add use statement, add PHPdoc, injecting dependency, etc)
- parsing existing code (using nikic's PHP-Parser)