codesaur/http-application

PHP 8.2+ · PSR-7 & PSR-15 нийцсэн хөнгөн, уян хатан HTTP Application цөм

Installs: 315

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/codesaur/http-application


README

CI PHP Version License

PHP 8.2+ · PSR-7 & PSR-15 нийцсэн хөнгөн, уян хатан HTTP Application цөм

codesaur/http-application нь PSR-7 (HTTP Message) ба PSR-15 (HTTP Server RequestHandler/Middleware) стандартууд дээр суурилсан минималист, өндөр уян хатан, middleware суурьтай Application цөм юм.

Та хүсвэл:

  • Router нэмэх
  • Middleware удирдах
  • Controller/action ашиглах
  • Closure route ашиглах
  • Exception handler бүртгэх
  • Custom request attributes ашиглах

гэ мэтээр өөрийн хүссэн бүтэцтэй web application-ийг хэдхэн мөр кодоор босгох боломжтой.

🚀 Гол боломжууд

✔ PSR-7 стандартын ServerRequest + Response

Request болон Response объектууд бүгд immutable, бүрэн стандартын дагуу.

✔ PSR-15 Middleware & RequestHandler гинжин бүтэц

Middleware-үүд өөр хоорондоо сонгино шиг (before → action → after) ажиллана.

✔ Уян хатан Router интеграци

Багц нь codesaur/router-ийг шууд дэмждэг.

Dynamic, typed, multi-method маршрутуудыг амархан зарлана.

✔ Controller суурь класс

PHP MVC хэв маягтай хөгжүүлэхэд тохиромжтой.

✔ Exception Handler

Алдааны боловсруулалт. Development mode дээр trace харуулдаг. Хөгжүүлэгч өөрийн хүссэнээр сайжруулж болно.

✔ Хэт хөнгөн, хурдан

Ямар ч framework-ийн суурь болгон ашиглах боломжтой.

📦 Суулгах

composer require codesaur/http-application

🧱 Архитектур

Application
 ├── Middleware stack (PSR-15 + Closure)
 ├── Router (codesaur/router)
 ├── ExceptionHandler
 └── Controller / Closure route executor

Application → Middleware-үүд → Match route → Controller/action/Closure → Response

📁 Төслийн файл бүтэц

HTTP-Application/
 ├── .github/
 │   └── workflows/
 │       └── ci.yml              # GitHub Actions CI/CD workflow
 ├── example/                     # Жишээ код
 │   ├── index.php               # Application boot script
 │   ├── ExampleRouter.php       # Router жишээ
 │   ├── ExampleController.php   # Controller жишээ
 │   ├── BeforeMiddleware.php    # Before middleware жишээ
 │   ├── AfterMiddleware.php     # After middleware жишээ
 │   ├── OnionMiddleware.php     # Onion middleware жишээ
 │   └── .htaccess               # Apache rewrite тохиргоо
 ├── src/                         # Эх код
 │   ├── Application.php         # Application цөм класс
 │   ├── Controller.php          # Controller суурь класс
 │   ├── ExceptionHandler.php   # Exception handler
 │   └── ExceptionHandlerInterface.php  # Exception handler интерфэйс
 ├── tests/                       # Тестүүд
 │   ├── ApplicationTest.php     # Application тестүүд
 │   ├── ControllerTest.php      # Controller тестүүд
 │   ├── ExceptionHandlerTest.php # ExceptionHandler тестүүд
 │   ├── EdgeCaseTest.php        # Edge case тестүүд
 │   ├── PerformanceTest.php     # Performance тестүүд
 │   ├── TestHelper.php          # Тест helper функцүүд
 │   └── Integration/
 │       └── ApplicationIntegrationTest.php  # Integration тестүүд
├── .gitignore                   # Git ignore файл
├── [API.md](API.md)             # API документаци
├── composer.json                # Composer тохиргоо
├── LICENSE                      # MIT лиценз
├── phpunit.xml                  # PHPUnit тохиргоо
├── README.md                    # Энэ файл
└── [REVIEW.md](REVIEW.md)       # Code review баримт бичиг

📝 Хэрэглээний жишээ

🔹 Application boot script (index.php)

$application = new class extends Application {
    public function __construct() {
        parent::__construct();

        $this->use(new ExceptionHandler());
        $this->use(new BeforeMiddleware());
        $this->use(new AfterMiddleware());
        $this->use(new OnionMiddleware());
        $this->use(new ExampleRouter());

        $this->GET('/', [ExampleController::class, 'index']);
    }
};

$application->handle((new ServerRequest())->initFromGlobal());

🔗 Router жишээ

$this->GET('/hello/{firstname}', [ExampleController::class, 'hello'])->name('hi');

$this->POST_PUT('/post-or-put', [ExampleController::class, 'post_put']);

$this->GET('/float/{float:number}', [ExampleController::class, 'float']);

$this->GET('/sum/{int:a}/{uint:b}', function ($req) {
    $a = $req->getAttribute('params')['a'];
    $b = $req->getAttribute('params')['b'];
    echo "$a + $b = " . ($a + $b);
});

🧭 Controller жишээ

class ExampleController extends Controller
{
    public function hello(string $firstname)
    {
        $user = $firstname;

        $params = $this->getQueryParams();
        if (!empty($params['lastname'])) {
            $user .= " {$params['lastname']}";
        }

        echo "Hello $user!";
    }
}

🧅 Middleware жишээ (Onion модель)

BeforeMiddleware → request шинээр attribute нэмэх

AfterMiddleware → request-ийн хугацааг хэвлэх

OnionMiddleware → before/after лог хэвлэх

class OnionMiddleware implements MiddlewareInterface
{
    public function process($req, $handler): ResponseInterface
    {
        var_dump("i'm onion before");
        $res = $handler->handle($req);
        var_dump("i'm onion after");
        return $res;
    }
}

⚠ Алдааны боловсруулалт (ExceptionHandler)

$this->use(new ExceptionHandler());
  • Алдааны код байвал HTTP статус автоматаар тохируулна
  • Алдааг error_log руу бичнэ
  • HTML error page буцаана
  • Development mode дээр trace харагдана
define('CODESAUR_DEVELOPMENT', true);

🔍 Request боловсруулах дараалал

  1. Middleware stack эхнээс нь дуудна
  2. Router → Match → Callback/Controller action
  3. Middleware stack буцаад дуусгана
  4. Response-г хэрэглэгч рүү дамжуулна

🔧 Custom ExceptionHandler ашиглах

class MyHandler implements ExceptionHandlerInterface {
    public function exception(Throwable $e) {
        http_response_code(500);
        echo "Custom error: " . $e->getMessage();
    }
}

$app->use(new MyHandler());

📘 Хөгжүүлэлтийн зөвлөмж

  • PHP 8.2+ орчин
  • Apache + .htaccess rewrite тохиргоотой
  • Төсөлдөө MVC хэв маяг авахад маш тохиромжтой

🧪 Тест ажиллуулах

Багц нь PHPUnit тестүүдтэй ирдэг. Доорх зааварчилгааны дагуу тестүүдийг ажиллуулж болно.

Windows дээр тест ажиллуулах

Шаардлага:

  • PHP 8.2+ суулгасан байх
  • Composer суулгасан байх
  • PowerShell эсвэл Command Prompt

Алхам:

  1. Dependencies суулгах:

    composer install
  2. PHPUnit ажиллуулах:

    vendor\bin\phpunit

    Эсвэл coverage-тэй:

    vendor\bin\phpunit --coverage-html coverage/html
  3. Тодорхой тест файл ажиллуулах:

    vendor\bin\phpunit tests/ApplicationTest.php

Linux дээр тест ажиллуулах

Шаардлага:

  • PHP 8.2+ суулгасан байх
  • Composer суулгасан байх
  • PHP-XML, PHP-MBSTRING extensions идэвхжсэн байх

Алхам:

  1. Dependencies суулгах:

    composer install
  2. PHPUnit ажиллуулах:

    vendor/bin/phpunit

    Эсвэл coverage-тэй:

    vendor/bin/phpunit --coverage-html coverage/html
  3. Тодорхой тест файл ажиллуулах:

    vendor/bin/phpunit tests/ApplicationTest.php

macOS дээр тест ажиллуулах

Шаардлага:

  • PHP 8.2+ суулгасан байх (Homebrew ашиглан: brew install php@8.3)
  • Composer суулгасан байх
  • Terminal

Алхам:

  1. Dependencies суулгах:

    composer install
  2. PHPUnit ажиллуулах:

    vendor/bin/phpunit

    Эсвэл coverage-тэй:

    vendor/bin/phpunit --coverage-html coverage/html
  3. Тодорхой тест файл ажиллуулах:

    vendor/bin/phpunit tests/ApplicationTest.php

Тестүүдийн бүтэц

tests/
 ├── ApplicationTest.php      # Application классын тестүүд
 ├── ControllerTest.php       # Controller суурь классын тестүүд
 └── ExceptionHandlerTest.php # ExceptionHandler классын тестүүд

GitHub Actions CI/CD

Төсөл нь GitHub Actions CI/CD workflow-тэй ирдэг. Push эсвэл Pull Request хийхэд автоматаар тестүүд ажиллана:

  • PHP хувилбарууд: 8.2, 8.3, 8.4
  • Үйлдлийн системүүд: Ubuntu, Windows, macOS
  • Coverage report: Codecov руу автоматаар илгээгдэнэ

📄 Лиценз

Энэ төсөл MIT лицензтэй.

📚 Нэмэлт Документаци

  • 📘 API.md - Бүрэн API удирдлага, бүх класс болон method-үүдийн дэлгэрэнгүй тайлбар (PHPDoc комментоос Cursor AI үүсгэв)
  • 🔍 REVIEW.md - Код шалгалтын тайлан, код чанар, архитектур, PSR стандартууд (Cursor AI шинжилсэн)

👨‍💻 Хөгжүүлэгч

Narankhuu
📧 codesaur@gmail.com
📱 +976 99000287
🌐 https://github.com/codesaur

🎯 Дүгнэлт

codesaur/http-application бол:

  • Хөнгөн
  • Уян хатан
  • Стандарт мөрдсөн
  • Энгийн
  • Хурдан

PHP дээр PSR стандарт нийцсэн өөрийн аппликейшн бүтэцтэй болохыг хүсвэл хамгийн тохиромжтой сонголт юм!