Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/exfriend/laravel-recipe
Generator framework for Laravel. Built on Laravel.
https://github.com/exfriend/laravel-recipe
generator laravel laravel-5-package laravel-framework laravel5 php php-framework php-library
Last synced: 3 months ago
JSON representation
Generator framework for Laravel. Built on Laravel.
- Host: GitHub
- URL: https://github.com/exfriend/laravel-recipe
- Owner: exfriend
- Created: 2017-08-14T18:32:37.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-08-31T10:48:34.000Z (over 7 years ago)
- Last Synced: 2024-10-09T16:24:20.647Z (3 months ago)
- Topics: generator, laravel, laravel-5-package, laravel-framework, laravel5, php, php-framework, php-library
- Language: PHP
- Size: 16.6 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Laravel Recipe
Generator framework for Laravel built on Laravel.## Installation
On Laravel 5.5:
```bash
composer require exfriend/laravel-recipe
```## Basic Usage
In order to generate any entity you basically need two things: a template and the actual data.
Recipe uses Laravel's Blade as a template engine for stubs, so
the basic usage is very similar to how you return views from controllers.Let's write our first recipe that would generate any class.
1. Create a new view inside `resources/views/recipe` folder:resources/views/recipe/class.blade.php
```blade{!! '<'.'?php' !!}
@unless(empty( $namespace ))
namespace {{ $namespace }};
@endunless@unless(empty( $imports ))
@foreach( $imports as $import)
import {{ $import }};
@endforeach
@endunlessclass {{ $class }} {{ isset($extends) ? 'extends '. $extends : '' }} {{ !empty($implements) ? 'implements '. collect($implements)->implode(', ') : '' }}
{
@unless(empty($traits))
use {{ collect($traits)->implode(', ') }};
@endunless@isset($content)
{!! $content !!}
@endisset
}```
Then anywhere in your code you can run:
```blade
$recipe = recipe()->usingView( 'recipes.class' )->with( [
'namespace' => 'App',
'class' => 'User',
'extends' => 'Authenticatable','imports' => [
'Illuminate\Foundation\Auth\User as Authenticatable',
'Illuminate\Notifications\Notifiable',
'Laravel\Passport\HasApiTokens',
],'traits' => [
'HasApiTokens',
'Notifiable',
],
// 'implements' => [ 'SomeInterface', 'OtherInterface' ],
] );
```Get the compiled code:
```php
dd( $recipe->build() )
```Save to file:
```php
$recipe->build( app_path('User.php') );
```Now let's create a dedicated class for this recipe to make it easier.
app/Recipes/ClassRecipe.php
```php
[
'rules' => 'required',
],
'content' => [ 'default' => '', ],
'imports' => [ 'default' => [], ],
];
protected $view_name = 'recipes.class';
}
```Here you can notice that we're hardcoding the template name and defining a new `$props` variable which is somewhat similar to what Vue uses in it's components.
Two important things happen here:
First, we added some validation telling Recipe that `class` property is mandatory in this recipe. You can set the rules property just like you normally would in your Laravel application - that's the same thing.
Second, we're setting default values for `content` and `import`. Those defaults will be applied if the user does not provide anything as the input.
So, our resulting usage will now look like this:
```php
$recipe = ( \App\Recipes\ClassRecipe::class )->with( [
'namespace' => 'App',
'class' => 'User',
'extends' => 'Illuminate\Foundation\Auth\User',
] )
->build( app_path('User.php') );
```An important note:
Because of props, the actual data passed to a template will be slightly different from what we passed in. For example, it will have `content` and `imports`.
Sometimes you would like to just get the transformed data withour compiling the whole template (e.g. for nested recipes, see below).
To only get the compiled data, run:```php
$recipe = ( \App\Recipes\ClassRecipe::class )->with( [
...
] )
->buildData();
```Since we are generating a model here and model is something we'd like to generate often, it makes sense to create a dedicated Model recipe based on a general class recipe we already have.
Let's make a simple Model recipe:app/Recipes/ModelRecipe.php
```php```
## Advanced Usage
Coming soon.