1. Go to this page and download the library: Download studiokaizen/framework 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/ */
studiokaizen / framework example snippets
use Zen\Http\Request;
use Zen\Http\Response;
$app->get('/', function (Request $request, Response $response) use ($app): Response {
return $app->view('home');
});
$app->post('/users', function (Request $request, Response $response) use ($app): Response {
// ...
});
$app->put('/users/:id', function (Request $request, Response $response) use ($app): Response {
$id = (int) $request->getRouteParam('id');
// ...
});
$app->patch('/users/:id', function (Request $request, Response $response) use ($app): Response { /* ... */ });
$app->delete('/users/:id', function (Request $request, Response $response) use ($app): Response { /* ... */ });
// Create a token for a user
$token = $app['tokens']->create($userId, 'api-token');
// Revoke
$app['tokens']->revoke($tokenId);
// Current token (inside a 'token' middleware route)
$app['auth']->token();
$app->registerMiddlewareAlias('custom', function ($app) {
return new \App\Middleware\CustomMiddleware();
});
->middleware('csrf', 'auth')
->middleware('throttle:60,1') // 60 requests per 1 minute
use Zen\Middleware\MiddlewareInterface;
use Zen\Http\Request;
use Zen\Http\Response;
class CustomMiddleware implements MiddlewareInterface
{
public function handle(Request $request, Response $response, callable $next): Response
{
// before
$response = $next($request, $response);
// after
return $response;
}
}
use Zen\Events\Event;
class UserRegistered extends Event
{
public function __construct(
public readonly int $userId,
public readonly string $email,
) {}
}
// Dispatch
$app['events']->dispatch(new UserRegistered($id, $email));
// Listen
$app['events']->addListener(UserRegistered::class, function (UserRegistered $event) use ($app): void {
$app['logger']->info("New user #{$event->userId}");
});
use Zen\Queue\Job;
class SendWelcomeEmail extends Job
{
public function __construct(
public readonly string $name,
public readonly string $email,
) {}
public function handle(): void
{
// send email
}
}
// Dispatch
$app['queue']->dispatch(new SendWelcomeEmail($name, $email));
// Dispatch to a named queue
$app['queue']->dispatch(new SendWelcomeEmail($name, $email), queue: 'emails');
// In AppServiceProvider::boot()
$app['scheduler']->call(function () use ($app): void {
// task logic
})->daily();
$app['scheduler']->call(fn () => /* ... */)->hourly();
$app['scheduler']->call(fn () => /* ... */)->everyFifteenMinutes();
$app['scheduler']->call(fn () => /* ... */)->cron('0 9 * * 1'); // every Monday at 9am
use Zen\Mail\Message;
$app['mailer']->send(function (Message $message): void {
$message->to('[email protected]', 'Alice')
->subject('Welcome!')
->text('Thanks for signing up.')
->html('<p>Thanks for signing up.</p>');
});
// Or pass a Message instance directly
$message = (new Message())
->to('[email protected]', 'Alice')
->subject('Welcome!')
->text('Thanks for signing up.');
$app['mailer']->send($message);
// Register a service (resolved lazily on first access)
$app['myService'] = fn ($app) => new MyService($app['db']);
// Register a raw value
$app['apiKey'] = 'abc123';
// Protect a closure so it is stored as-is, not invoked as a factory
$app['myCallback'] = $app->protect(fn ($value) => strtolower($value));
// Decorate an existing service
$app->extend('mailer', function ($mailer, $app) {
$mailer->setLogger($app['logger']);
return $mailer;
});
// Resolve
$service = $app['myService'];
// Check existence
isset($app['myService']);
// Retrieve the original factory closure (before resolution)
$factory = $app->raw('myService');
use Zen\DependencyInjection\ServiceProviderInterface;
use Zen\DependencyInjection\BootableProviderInterface;
class MyServiceProvider implements ServiceProviderInterface, BootableProviderInterface
{
public function register(Application $app): void
{
$app['myService'] = fn ($app) => new MyService();
}
public function boot(Application $app): void
{
// runs after all providers are registered
}
}
use Zen\Console\Command;
class GreetCommand extends Command
{
public function name(): string
{
return 'greet';
}
public function description(): string
{
return 'Greet someone by name.';
}
public function handle(array $args, array $options): int
{
$name = $args[0] ?? 'World';
$this->line('Hello, ' . $name . '!');
return 0;
}
}
$app['console']->add(new GreetCommand());
bash
php zen key:generate
bash
php zen migrate
bash
php zen make:migration create_posts_table
php zen migrate
php zen migrate:rollback
php zen migrate:fresh --seed
php zen migrate:status
bash
php zen queue:work
php zen queue:work --queue=emails
php zen queue:work --max-jobs=10
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.