1. Go to this page and download the library: Download rguezque/katya-router 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/ */
rguezque / katya-router example snippets
use rguezque\{
HttpStatus,
Katya,
Request,
Response
};
use rguezque\Exceptions\{
RouteNotFoundException,
UnsupportedRequestMethodException
};
$router = new Katya;
$router->route(Katya::GET, '/', function(Request $request) {
return new Response('hola mundo!');
});
try {
$router->run(Request::fromGlobals());
} catch(RouteNotFoundException $e) {
$message = sprintf('<h1>Not Found</h1><p>%s</p>', $e->getMessage());
(new Response($message, HttpStatus::HTTP_NOT_FOUND))->send();
} catch(UnsupportedRequestMethodException $e) {
$message = sprintf('<h1>Not Allowed</h1><p>%s</p>', $e->getMessage());
(new Response($message, HttpStatus::HTTP_METHOD_NOT_ALLOWED))->send();
}
$katya = new Katya('/nombre_directorio_base');
$katya = new Katya;
$katya->get('/', function(Request $request) {
return new Response('Hello')
});
$katya->post('/', function(Request $request) {
$data = [
'name' => 'John',
'lastname' => 'Doe'
];
return new JsonResponse($data);
});
// Usando una función anónima
$katya->get('/user', function(Request $request) {
//...
});
// Usando un método estático
$katya->get('/user', ['App\Controller\GreetingController', 'showProfileAction']);
// o bien
use App\Controller\UserController;
$katya->get('/user', [UserController::class, 'showProfileAction']);
$katya->get('/user/permissions', [UserController::class, 'showPermissionsAction']);
// Usando un método de un objeto
$user = new App\Controller\UserController();
$katya->get('/user', [$user, 'showProfileAction']);
// Se generan las rutas "/foo/bar" y "/foo/baz"
$katya->group('/foo', function(Group $group) {
$group->get('/bar', function(Request $request) {
return new Response(' Hello foobar');
});
$group->get('/baz', function(Request $request, Services $service) {
// Registrado previamente como un servicio
$template = $services->view->fetch('welcome')
return new HtmlResponse($template);
});
});
$katya->get('/hola/{nombre}', function(Request $request) {
$params = $request->getParams(); // Devuelve un objeto Parameter
return new Response(sprintf('Hola %s', $params->get('nombre')));
});
use rguezque\View;
// Standalone
$view = new ViewEngine(
__DIR__.'/templates' // Directorio donde se alojan los templates
);
// Enviandolo como un servicio
$services = new Services();
$services->register('view', function() {
return new ViewEngine(__DIR__.'/templates');
});
$router->setServices($services);
use rguezque\{Group, Katya, Request, HtmlResponse, Services, ViewEngine};
$router = new Katya;
$services = new Services;
// Ejemplo de registro eficiente de un servicio
$services->register('view', static function() {
static $view = null;
if ($view === null) {
$view = new ViewEngine(
templates_dir: __DIR__.'/views',
cache_dir: __DIR__.'/views/cache'
);
}
return $view;
});
$services->register('is_pair', function(int $number) {
return $number % 2 == 0;
});
$router->setServices($services);
$router->get('/', function(Request $request, Services $service) {
$view = $service->view(); // o bien en contexto de objeto: $service->view
return new HtmlResponse($view->fetch('home.php'));
})->useServices('view'); // Solamente recibirá el servicio 'view'
use rguezque\{Katya, Request, Response, Variables};
$router = new Katya;
$vars = new Variables;
$vars->setVar('pi', 3.141592654);
$router->setVariables($vars);
$router->get('/', function(Request $request, Response $response, Variables $vars) {
$response->send($vars->getVar('pi'));
});
$vars->setVar('pi', 3.141592654);
$vars->getVar('pi'); // Devuelve la variable pi (si no existe devuelve null)
$vars->getVar('pi', 3.14) // Devuelve la variable pi (si no existe devuelve por default el valor 3.14)
$vars->hasVar('pi') // Para este ejemplo devolvería TRUE
// Se asigna al router
$router->setCors($cors_config);
// Se define directamente el ambiente de desarrollo
Environment::register('production');
// O busca automáticamente la variable de ambiente APP_ENV
Environment::register();
// Por ejemplo
Environment::setLogPath(__DIR__.'/path/to/custom/logs');