bmnd/core

There is no license information available for the latest version (v0.0.3) of this package.

Maintainers

Details

github.com/Lumetas/bmnd

Source

Issues

Installs: 7

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/bmnd/core

v0.0.3 2025-12-17 10:56 UTC

This package is not auto-updated.

Last update: 2025-12-17 20:34:17 UTC


README

Быстрый старт

<?php
require __DIR__ . '/vendor/autoload.php';

\BMND\Router\Router::setup('app/Controllers', 'App\\Controllers\\', 'path/to/cacheDir')->run();

Установка

Composer

composer require bmnd/core

Контроллеры

Базовый контроллер

<?php
namespace App\Controllers;

use BMND\Router\Route;

class TestController
{
#[Route('/test/{id}', 'GET', 'test.show')]
	public function show(int $id)
	{
		return "ID: {$id}";
	}
}

Маршрутизация

Атрибут Route

#[Route('/path/{param}', ['METHODS'], 'route.name', middlewares: [Middleware::class])]

Параметры пути

/user/{id}

Dependency Injection

Автоматическая инъекция

public function index(UserService $service, int $id)
{
	// $service автоматически создастся
	return $service->find($id);
}

Middleware

Создание middleware

<?php
namespace App\Middleware;

use BMND\Http\MiddlewareInterface;
use BMND\Http\RequestInterface;
use BMND\Http\ResponseInterface;
use BMND\Http\RequestHandlerInterface;

class AuthMiddleware implements MiddlewareInterface
{
	public function process(RequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
	{
		if (!auth_check()) {
			return new Response('Unauthorized', 401);
		}
		return $handler->handle($request);
	}
}

Использование

#[Route('/admin', 'GET', 'admin', middlewares: [AuthMiddleware::class, AdminMiddleware::class])]

Request & Response

Request методы

	$request->getMethod()
	$request->getUri()
	$request->getQueryParams()  // ?a=b
	$request->getParsedBody()   // POST данные
	$request->getAttributes()   // параметры пути
	$request->getCookieParams()
$request->getServerParams()

Создание Response

return new Response('Content', 200, ['Content-Type' => 'text/html']);

Исключения

Исключения в контроллерах

    use BMND\Router\Error;
    class ErrorController
{
#[Error("App\\Exception\\TestException")] // отлов TestException
    public function TestException(TestException $exception)
    {
        echo "TestException: " . $exception->getMessage();
    }

#[Error(404)] // Вызывается когда не найден маршрут
    public function notFound()
    {
        return "Page not found";
    }

#[Error(500)] // Любые ошибки не отловленные отдельно
    public function internalError(\Throwable $exception)
    {
        echo $exception->getMessage();
    }
}

Расширенные примеры

API контроллер

#[Route('api', name: 'api.')]
class ApiController
{
#[Route('/users', 'GET', 'users.index')]
	public function index(UserService $service)
	{
		return new Response($service->all());
	}

#[Route('/users/{id}', 'GET', 'users.show')]
	public function show(int $id, UserService $service)
	{
		return new Response($service->find($id));
	}
}

Middleware цепочка

#[Route('/dashboard', 'GET', 'dashboard', 
		middlewares: [CorsMiddleware::class, AuthMiddleware::class, LogMiddleware::class]
		)]

Пример проекта

composer create-project bmnd/skeleton example

Это создаст проект практически с полноцееным фреймворком, используя данный проект.

Лицензия

MIT License.