PHP code example of joydeep-bhowmik / quire

1. Go to this page and download the library: Download joydeep-bhowmik/quire 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/ */

    

joydeep-bhowmik / quire example snippets


// public/index.php
\Quire();
$quire->path(__DIR__ . '/../pages');
$quire->run();


// pages/users/[id].php
use function Quire\{name, middleware, abort, e};

name('users.show');
middleware(['auth']);

$user = find_user($id) ?? abort(404);

use function Quire\{name, middleware, methods};

name('users.edit');                 // name the route for route()
middleware('auth', 'role:admin');   // page middleware
methods('GET', 'POST');             // default is GET only (HEAD is automatic)

use Quire\Blade\BladeRenderer;

$blade = new BladeRenderer(
    viewPaths: __DIR__ . '/pages',             // where @extends / @/ <x-card> → pages/_components/card.blade.php

$quire->extension('.blade.php', $blade);


use function Quire\{name, respond, redirect, route, abort};
name('team.show');

if ($member === 'old-name') {
    respond(redirect(route('team.show', ['member' => 'new-name']), 301));
}
$person = find($member) ?? abort(404);

use Quire\{Request, Response};

$quire->alias('auth', function (Request $request, Closure $next) {
    if (!$request->cookie('user')) {
        return Quire\redirect(Quire\url('/login'));   // stop here
    }

    $request->attributes['user'] = $request->cookie('user'); // pass data to the page
    return $next($request);
});

$quire->alias('role', function (Request $request, Closure $next, string ...$roles) {
    in_array($request->attributes['user'], $roles, true) || Quire\abort(403);
    return $next($request);
});

$quire->alias('timing', function (Request $request, Closure $next): Response {
    $response = $next($request);                       // run the page first...
    return $response->header('X-Powered-By', 'Quire'); // ...then change the response
});

$quire->alias('csrf', App\Middleware\VerifyCsrf::class); // class with handle()

   $quire->path(__DIR__ . '/pages')->middleware([
       '*'         => ['timing'],
       'account/*' => ['auth'],
   ]);
   

    // pages/admin/_middleware.php
   return ['auth', 'role:admin'];
   

use function Quire\{route, url};

route('users.show', ['id' => 5]);               // /users/5
route('users.show', ['id' => 5, 'tab' => 'x']); // /users/5?tab=x   (extra params → query string)
route('blog', ['slug' => ['2026', 'hello']]);    // /blog/2026/hello
route('blog');                                   // /blog            (optional catch-all can be left out)
url('/login');                                   // /login, with the base path added

$quire->path(__DIR__ . '/pages');                                          // served at /
$quire->path(__DIR__ . '/admin-pages')->uri('/admin')->middleware(['auth']);  // served at /admin/...
$quire->base('/my-app');   // app lives at example.com/my-app/

$request->method; $request->path; $request->query; $request->body; $request->cookies; $request->files;
$request->input('name', 'default');   // body, then query
$request->param('id');                // route param
$request->header('Accept');
$request->attributes['user'];         // set by middleware
$request->isMethod('POST');
$request->wantsJson();

Response::html($html, 200);
Response::json($data, 201);
Response::redirect('/x', 303)->cookie('flash', 'Saved')->header('X-Foo', 'bar');

example/
├── composer.json                 entry (@import "tailwindcss")
├── postcss.config.mjs           @tailwindcss/postcss, like Next.js
├── package.json                 npm run dev / npm run build
├── public/
│   ├── index.php                front controller (Quire + BladeRenderer)
│   └── css/app.css              built CSS
├── helpers.php                  global helpers: asset(), users(), user(), initials(), is_current()
├── data/users.php               fake data, outside pages/
└── pages/
    ├── _layouts/app.blade.php   layout with nav
    ├── _components/             <x-avatar>, <x-error-page>, <x-error-action>
    ├── _errors/                 400, 401, 403, 404, 405, 419, 429, 500, 503 + error.blade.php
    ├── index.blade.php          /
    ├── about.blade.php          /about
    └── users/
        ├── index.blade.php      /users
        └── [id].blade.php       /users/{id}

pages/_errors/
├── 404.blade.php   ← not found
├── 403.blade.php   ← forbidden
└── error.php       ← everything else (405, 500...)
 echo number_format($e, 2);