PHP code example of nameless / laravel-api-generator
1. Go to this page and download the library: Download nameless/laravel-api-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/ */
nameless / laravel-api-generator example snippets
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Http\Requests\PostRequest;
use App\Models\Post;
use App\Http\Resources\PostResource;
use App\Services\PostService;
use App\DTO\PostDTO;
use Illuminate\Http\Response;
class PostController extends Controller
{
private PostService $service;
public function __construct(PostService $service)
{
$this->service = $service;
}
public function index()
{
$posts = $this->service->getAll();
return PostResource::collection($posts);
}
public function store(PostRequest $request)
{
$dto = PostDTO::fromRequest($request);
$post = $this->service->create($dto);
return new PostResource($post);
}
public function show(Post $post)
{
return new PostResource($post);
}
public function update(PostRequest $request, Post $post)
{
$dto = PostDTO::fromRequest($request);
$updatedPost = $this->service->update($post, $dto);
return new PostResource($updatedPost);
}
public function destroy(Post $post)
{
$this->service->delete($post);
return response(null, 204);
}
}
namespace App\Services;
use App\Models\Post;
use App\DTO\PostDTO;
class PostService
{
public function getAll()
{
return Post::all();
}
public function create(PostDTO $dto)
{
return Post::create((array) $dto);
}
public function find($id)
{
return Post::findOrFail($id);
}
public function update(Post $post, PostDTO $dto)
{
$post->update((array) $dto);
return $post;
}
public function delete(Post $post)
{
return $post->delete();
}
}
namespace App\DTO;
use App\Http\Requests\PostRequest;
readonly class PostDTO
{
public function __construct(
public ?string $title,
public ?string $content,
public ?bool $published,
) {}
public static function fromRequest(PostRequest $request): self
{
return new self(
title: $request->get('title'),
content: $request->get('content'),
published: $request->get('published'),
);
}
}
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content', 'published'];
/** @use HasFactory<\Database\Factories\PostFactory> */
use HasFactory;
}
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class PostResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'title' => $this->title,
'content' => $this->content,
'published' => $this->published,
];
}
}
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PostRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'title' => 'string|max:255',
'content' => 'string',
'published' => 'boolean',
];
}
}
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class PostFactory extends Factory
{
public function definition(): array
{
return [
'title' => fake()->word(),
'content' => fake()->sentence(),
'published' => fake()->boolean(),
];
}
}
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class PostSeeder extends Seeder
{
public function run(): void
{
\App\Models\Post::factory(10)->create();
}
}
namespace App\Policies;
use App\Models\Post;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Auth\Access\Response;
class PostPolicy
{
use HandlesAuthorization;
public function viewAny(User $user): Response|bool
{
return true;
}
public function view(User $user, Post $post): Response|bool
{
return true;
}
public function create(User $user): Response|bool
{
return true;
}
public function update(User $user, Post $post): Response|bool
{
return true;
}
public function delete(User $user, Post $post): Response|bool
{
return true;
}
public function restore(User $user, Post $post): Response|bool
{
return true;
}
public function forceDelete(User $user, Post $post): Response|bool
{
return true;
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title')->nullable();
$table->text('content')->nullable();
$table->boolean('published')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
};
bash
php artisan api:install
bash
php artisan api-generator:install
bash
php artisan make:fullapi
bash
php artisan delete:fullapi
bash
php artisan delete:fullapi ModelName
bash
php artisan delete:fullapi Post
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.