PHP code example of codemystify / laravel-types-generator
1. Go to this page and download the library: Download codemystify/laravel-types-generator library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
codemystify / laravel-types-generator example snippets
use Codemystify\TypesGenerator\Attributes\GenerateTypes;
class UserResource extends JsonResource
{
#[GenerateTypes(
name: 'User',
structure: [
'id' => 'number',
'name' => 'string',
'email' => 'string',
'avatar' => ['type' => 'string', 'optional' => true],
'created_at' => 'string',
]
)]
public function toArray($request): array
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'avatar' => $this->avatar,
'created_at' => $this->created_at->toISOString(),
];
}
}
[
'title' => 'string',
'count' => 'number',
'active' => 'boolean',
'data' => 'any', // Use sparingly
]
[
'bio' => ['type' => 'string', 'optional' => true], // bio?: string
]
[
'deleted_at' => ['type' => 'string', 'nullable' => true], // deleted_at: string | null
]
[
'tags' => 'string[]', // Array of strings
'users' => 'User[]', // Array of User interfaces
]
[
'status' => 'string|null', // status: string | null
]
class PostResource extends JsonResource
{
#[GenerateTypes(
name: 'Post',
structure: [
'id' => 'number',
'title' => 'string',
'slug' => 'string',
'content' => 'string',
'excerpt' => ['type' => 'string', 'nullable' => true],
'published' => 'boolean',
'author' => 'Author',
'tags' => 'string[]',
'created_at' => 'string',
'updated_at' => 'string',
],
types: [
'Author' => [
'id' => 'number',
'name' => 'string',
'email' => 'string',
'avatar' => ['type' => 'string', 'optional' => true],
]
]
)]
public function toArray($request): array
{
return [
'id' => $this->id,
'title' => $this->title,
'slug' => $this->slug,
'content' => $this->content,
'excerpt' => $this->excerpt,
'published' => $this->published,
'author' => [
'id' => $this->user->id,
'name' => $this->user->name,
'email' => $this->user->email,
'avatar' => $this->user->avatar,
],
'tags' => $this->tags->pluck('name')->toArray(),
'created_at' => $this->created_at->toISOString(),
'updated_at' => $this->updated_at->toISOString(),
];
}
}
#[GenerateTypes(
name: 'AdminUser',
structure: [...],
group: 'admin'
)]
#[GenerateTypes(
name: 'PublicPost',
structure: [...],
group: 'public'
)]
// config/types-generator.php
return [
'sources' => [
'app/Http/Resources',
'app/Http/Controllers',
'app/Models',
],
'output' => [
'base_path' => 'resources/js/types/generated',
],
'files' => [
'extension' => 'ts',
'naming_pattern' => 'kebab-case',
'add_header_comment' => true,
],
];
#[GenerateTypes(
name: 'PaginatedPosts',
structure: [
'data' => 'Post[]',
'meta' => 'PaginationMeta',
],
types: [
'PaginationMeta' => [
'current_page' => 'number',
'last_page' => 'number',
'per_page' => 'number',
'total' => 'number',
]
]
)]
// In a base resource or dedicated class
'address' => 'Address',
types: [
'Address' => [
'street' => 'string',
'city' => 'string',
'country' => 'string',
'postal_code' => 'string',
]
]
bash
php artisan vendor:publish --tag=types-generator-config
bash
php artisan types:generate
bash
php artisan types:generate
bash
php artisan types:generate --dry-run
bash
php artisan types:generate --group=api
bash
php artisan types:generate --group=admin
typescript
export * from './user';
export * from './post';
export * from './admin-user';
bash
php artisan types:cleanup --remove-attributes