Examples

Real-world examples of using WPZylos CLI Devtool.

Creating a New Plugin

# Create plugin with default namespace
vendor/bin/wpzylos make:plugin ecommerce-plugin

# Create plugin with custom namespace
vendor/bin/wpzylos make:plugin ecommerce-plugin --namespace=MyCompany\\Ecommerce

Result:

ecommerce-plugin/
+-- app/
—   +-- Core/PluginContext.php
—   +-- Http/Controllers/
—   +-- Providers/
+-- bootstrap/app.php
+-- config/app.php
+-- database/migrations/
+-- resources/views/
+-- ecommerce-plugin.php
+-- composer.json

Building a Products Feature

Step 1: Create Controller

vendor/bin/wpzylos make:controller ProductController --resource

Generated app/Http/Controllers/ProductController.php:

<?php

namespace MyPlugin\Http\Controllers;

use WPZylos\Framework\Http\Request;
use WPZylos\Framework\Http\Response;

class ProductController
{
    public function index(Request $request): Response
    {
        return Response::html(view('products.index'));
    }

    public function show(Request $request, int $id): Response
    {
        return Response::html(view('products.show', ['id' => $id]));
    }

    public function store(Request $request): Response
    {
        // Validate and create
        return Response::json(['success' => true], 201);
    }

    public function update(Request $request, int $id): Response
    {
        // Validate and update
        return Response::json(['success' => true]);
    }

    public function destroy(Request $request, int $id): Response
    {
        // Delete
        return Response::json(['success' => true]);
    }
}

Step 2: Create Form Request

vendor/bin/wpzylos make:request StoreProductRequest

Generated app/Http/Requests/StoreProductRequest.php:

<?php

namespace MyPlugin\Http\Requests;

use WPZylos\Framework\Http\FormRequest;

class StoreProductRequest extends FormRequest
{
    public function authorize(): bool
    {
        return current_user_can('manage_options');
    }

    public function rules(): array
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'price' => ['required', 'numeric', 'min:0'],
        ];
    }
}

Step 3: Create Migration

vendor/bin/wpzylos make:migration create_products_table --create=products

Generated database/migrations/2024_01_01_000000_create_products_table.php:

<?php

use WPZylos\Framework\Database\Migration;
use WPZylos\Framework\Database\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('products', function ($table) {
            $table->id();
            $table->string('name');
            $table->decimal('price', 10, 2);
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

Adding Fields to Existing Table

vendor/bin/wpzylos make:migration add_sku_to_products --table=products

Generated migration:

<?php

use WPZylos\Framework\Database\Migration;
use WPZylos\Framework\Database\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::table('products', function ($table) {
            // Add your columns here
        });
    }

    public function down(): void
    {
        Schema::table('products', function ($table) {
            // Reverse the changes
        });
    }
};

Batch Generation

Create multiple files for a feature:

# Create all files for a "Category" feature
vendor/bin/wpzylos make:controller CategoryController --resource
vendor/bin/wpzylos make:request StoreCategoryRequest
vendor/bin/wpzylos make:request UpdateCategoryRequest
vendor/bin/wpzylos make:migration create_categories_table --create=categories