Commands

Valravn arrives with a set of commands that makes generating files and classes easier. all commands accept two parameter. first one is namespace and second one is name. in addition, sometimes for versioning we have a v parameter as well. namespace parameter determine the group of the entity. for instance, we could have a Blog namespace and create entities like Post or Comment in it. the v parameter determines the version of entity. we can create a Blog namespace with several entities in it but in different versions.

Controller

this command helps to generate controller classes.

1valravn:controller namespace name --v=1 --relations --actions --requests --resources

the generated classes structure should be like:

 1app/
 2└── Http/
 3    ├── V1/
 4    │   └── Namespace/
 5    │       └── Name/
 6    │           ├── NameController
 7    │           ├── NameRelationsController
 8    │           └── NameActionsController
 9    ├── Resources/
10    │   └── V1/
11    │       └── Namespace/
12    │           └── Name/
13    │               ├── NameResource
14    │               └── NameCollection
15    └── Requests/
16        └── V1/
17            └── Namespace/
18                └── Name/
19                    ├── NameStoreRequest
20                    └── NameUpdateRequest

Controllers

Controllers command is a shorthand for valravn:controller command that generates controllers and other related classes at once.

1valravn:controllers namespace name --v=1 --requests --resources

Requests

to generate only request classes, use this command.

1valravn:requests namespace name --v=1

This command generates store and update requests by default. if you defined your entity with a batch update route, you can create a batch update request using --batch-update flag.

1valravn:requests namespace name --v=1 --batch-update

Relation

Using relations command, you can generate your requests for handling relationships.

1valravn:relation namespace name related-namespace related-name --v=1

It's the basic form of relation command.

By default, --v parameter is 1 and it's not necessary to pass each time.

After passing needed parameters, you should determine the relation type between two entities. for instance, assume there is a BelongsToMany relationship between posts entity from blog namespace and categories entity from core namespace.

1valravn:relation blog posts core categories --belongs-to-many

This will create a request file in app/Http/Requests/V1/Blog/Post/PostCategoriesRequest.php path, and you can set up your request then. if there are some pivot columns, you can define them in pivots method.

 1use App\Models\Blog\Post;
 2use Hans\Valravn\Http\Requests\Contracts\Relations\BelongsToManyRequest;
 3
 4class PostCategoriesWithPivotRequest extends BelongsToManyRequest {
 5
 6    protected function model(): string {
 7        return Post::class;
 8    }
 9
10    protected function pivots(): array {
11        return [
12            'order' => [ 'numeric', 'min:1', 'max:99' ],
13            'info'  => [ 'string', 'max:128' ],
14        ];
15    }
16
17}

Available relation flags are: --belongs-to-many, --has-many, --morphed-by-many, --morph-to-many, --morph-to.

The usage of --morph-to flag is a bit different. so let's go for having an example.

1valravn:relation core likes likable --morph-to

As we know, the morphTo relationship is between one model and many other models, and there is not a target model to refer to. so as third parameter, just pass the morphable relation name. then in the created request file, you can limit the related entities.

There is a --with-pivot flag that allows you to create a pivot migration file for your many-to-many relationship.

1valravn:relation blog posts core categories --belongs-to-many --with-pivot
If you want more information about this command, see this

Resources

This command generates only resource and resource collection classes.

1valravn:requests namespace name --v=1

Exceptions

this command generates Exception and ErrorCode classes.

1valravn:exception namespace name

The generated exception classes go there:

1app/
2└── Exceptions/
3    └── Namespace/
4        └── Name/
5            ├── NameException
6            └── NameErrorCode

for more information see this.

Migration

you can generate migration file using this command.

1valravn:migration namespace name

it will generate the migration file in database/migrations/Namespace/date_create_samples_table.php path.

Valravn will register your migration files in sub folders. so, you can create and organize you migrations in namespaces.

Pivot

To create pivot migration file, just enter the base entity and the related one's names and namespaces.

1valravn:pivot namespace name related-namespace related-name

Model

it generates model and related classes for you.

1valravn:model namespace name --factory --seeder --migration

it will generate the migration file in database/migrations/Namespace/date_create_samples_table.php path.

Policy

Policy command generates a policy class.

1valravn:policy namespace name

the policy class will locate here

1app/
2└── Policies/
3    └── Namespace/
4        └── NamePolicy

Repository

This command generates repository and repository contract.

Reminder: bind the contract to the repository class in RepositoryServiceProvider
1valravn:policy namespace name

generated files should be there

1app/
2└── Repositories/
3    ├── Contracts/
4    │   └── Namespace/
5    │       └── INameRepository
6    └── Namespace/
7        └── NameRepository

Service

Service command generates your service classes such as relation and action services.

1valravn:service namespace name --relations --actions

generated files would be like:

1app/
2└── Services/
3    └── Namespace/
4        └── Name/
5            ├── NameCrudService
6            ├── NameRelationsService
7            └── NameActionsService

Entity

And in the end, we have this command to create all classes and files at once.

1valravn:entity namespace name --v=1