Triangle Web Framework
triangle/web — это полнофункциональный HTTP-фреймворк на основе Triangle Engine, предоставляющий MVC-архитектуру для разработки веб-приложений.
Установка
composer create-project triangle/web my-app
cd my-app
Структура проекта
my-app/
├── app/
│ ├── controller/ # Контроллеры
│ ├── middleware/ # Middleware
│ ├── model/ # Модели
│ └── view/ # Представления
├── config/ # Конфигурация
│ ├── app.php # Настройки приложения (return array)
│ ├── route.php # Маршруты (выполняемый PHP код)
│ ├── middleware.php # Middleware (return array)
│ ├── database.php # База данных (return array)
│ └── ...
├── public/ # Публичная директория
├── runtime/ # Временные файлы
└── master # Скрипт запуска
Запуск
# Разработка
php master start
# Production (в фоне)
php master start -d
# Остановка
php master stop
# Перезапуск
php master restart
# Статус
php master status
По умолчанию приложение запускается на порту 88 и доступно по адресу http://localhost:88.
Конфигурация
Настройки приложения (config/app.php)
Это конфигурационный файл с массивом настроек:
<?php
// config/app.php
return [
'debug' => true,
'name' => env('APP_NAME', 'Triangle App'),
'plugin_alias' => env('APP_PLUGIN_ALIAS', 'plugin'),
'plugin_uri' => env('APP_PLUGIN_URI', 'app'),
'controller_suffix' => env('CONTROLLER_SUFFIX', ''),
'controller_reuse' => env('CONTROLLER_REUSE', true),
'http_always_200' => false,
'http_headers' => [
'Content-Language' => 'ru',
'Access-Control-Allow-Origin' => '*',
],
];
Маршруты (config/route.php)
Важно: Это НЕ конфигурационный файл, а выполняемый PHP-код:
<?php
// config/route.php
use Triangle\Request;
use Triangle\Response;
use Triangle\Router;
// Простые маршруты
Router::get('/', [\App\Controller\IndexController::class, 'index']);
Router::get('/about', function (Request $request): Response {
return response('About page');
});
// Маршруты с параметрами
Router::get('/user/{id}', [\App\Controller\UserController::class, 'show']);
// API маршруты
Router::group('/api', function () {
Router::get('/users', [\App\Controller\Api\UserController::class, 'index']);
Router::post('/users', [\App\Controller\Api\UserController::class, 'store']);
})->middleware(\App\Middleware\ApiAuthMiddleware::class);
Middleware (config/middleware.php)
Это конфигурационный файл с массивом middleware:
<?php
// config/middleware.php
return [
// Глобальное middleware
'' => [
\App\Middleware\CorsMiddleware::class,
\App\Middleware\LoggingMiddleware::class,
],
// Middleware для приложения
'api' => [
\App\Middleware\ApiAuthMiddleware::class,
],
];
База данных (config/database.php)
Это конфигурационный файл:
<?php
// config/database.php
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'myapp',
'username' => 'root',
'password' => '',
],
],
];
Создание контроллера
<?php
// app/controller/Index.php
namespace App\Controller;
use Triangle\Engine\Request;
use Triangle\View\View;
class Index
{
public function index(Request $request)
{
return View::render('index', [
'title' => 'Home Page',
]);
}
}
Контроллер автоматически будет доступен по маршруту /index/index (автоматическая маршрутизация).
Работа с базой данных
<?php
namespace App\Controller;
use Triangle\Database\DB;
class UserController
{
public function index()
{
$users = DB::table('users')->get();
return response()->json($users);
}
}
Примеры использования
Простое API
<?php
// config/route.php
use Triangle\Request;
use Triangle\Response;
use Triangle\Router;
Router::get('/api/users', function (Request $request): Response {
$users = DB::table('users')->get();
return response()->json($users);
});
Router::post('/api/users', function (Request $request): Response {
$user = DB::table('users')->insert([
'name' => $request->input('name'),
'email' => $request->input('email'),
]);
return response()->json($user, 201);
});
С контроллерами
<?php
// config/route.php
use Triangle\Router;
Router::get('/', [\App\Controller\IndexController::class, 'index']);
Router::get('/users', [\App\Controller\UserController::class, 'index']);
Router::get('/users/{id}', [\App\Controller\UserController::class, 'show']);
С middleware
<?php
// config/route.php
use Triangle\Router;
Router::group('/admin', function () {
Router::get('/dashboard', [\App\Controller\Admin\DashboardController::class, 'index']);
})->middleware(\App\Middleware\AuthMiddleware::class);
API-ответы
use Triangle\Engine\Response;
// JSON-ответ
return response()->json(['users' => $users]);
// Текст
return response('Hello, World!');
// HTML
return response('<h1>Hello</h1>')->header('Content-Type', 'text/html');
// С кодом статуса
return response('Not Found', 404);
// Редирект
return redirect('/login');
Статические файлы
Настройка в config/static.php:
<?php
return [
'enable' => true,
'path' => public_path(),
];
Статические файлы автоматически отдаются из папки public/.
Развертывание
Production
- Установите зависимости:
composer install --no-dev --optimize-autoloader
- Настройте конфигурацию:
// config/app.php
'debug' => false,
- Запустите в фоновом режиме:
php master start -d
Docker
Используйте docker-compose.yml из проекта:
docker-compose up -d