Веб-разработка на PHP: как создать полноценный сайт
Основные способы создания веб-сайта на PHP
Как создать веб-сайт с использованием современных фреймворков (Laravel)?
Современная разработка веб-сайтов на PHP предполагает использование фреймворков, обеспечивающих структурированность, безопасность и удобство поддержки. Наиболее популярным является Laravel. Он предоставляет встроенную маршрутизацию, ORM, шаблонизатор Blade и множество других инструментов.
Пример простейшего маршрута в Laravel:
// routes/web.php
Route::get('/', function () {
return view('welcome');
});Php веб сервисы (php веб-сервисы)
Этот код определяет маршрут для главной страницы, возвращающий вид welcome.blade.php.
Создание нового проекта выполняется командой:
composer create-project laravel/laravel my-sitePhp веб страница (веб-страница на php)
Затем запуск встроенного сервера:
php artisan serve
Config app php (конфигурация php приложения)
Типичные ошибки: Не установлен Composer - ошибка "composer not found". Решение - установить Composer глобально. Проблемы с правами на папки storage и bootstrap/cache - решение выполнить chmod. Ошибка подключения к базе данных - проверить настройки в .env.
Как реализовать простую маршрутизацию без фреймворка?
Для небольших проектов или обучения можно написать собственный роутер. Основная идея - разобрать URL и вызвать соответствующий файл или функцию.
Пример минимального роутера в index.php:
// index.php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($uri === '/') {
require 'views/home.php';
} elseif ($uri === '/about') {
require 'views/about.php';
} else {
http_response_code(404);
require 'views/404.php';
}App php route (маршрутизация в php приложении)
Этот код определяет три маршрута: главная, about и 404. Для каждого маршрута подключается соответствующий вид.
Проблемы: При росте числа маршрутов код становится громоздким. Нет обработки параметров (например, /user/123). Решение - реализация регулярных выражений или использование готовых компонентов.
Как использовать микрофреймворк Slim для быстрой разработки?
Slim - легкий микрофреймворк для создания API и небольших сайтов. Он предоставляет маршрутизацию, middleware и контейнер зависимостей.
Пример приложения на Slim:
// index.php
use Slim\Factory\AppFactory;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$app->get('/', function ($request, $response) {
$response->getBody()->write("Привет, мир!");
return $response;
});
$app->run();Default php app (настройки по умолчанию в php приложении)
Установка через Composer:
composer require slim/slim:^4.0Затем достаточно запустить встроенный сервер PHP.
Сложности: Slim не включает ORM и шаблонизатор по умолчанию - их нужно подключать отдельно. Для сложных проектов может потребоваться больше настроек.
Расширенные примеры с пошаговым кодом
Пример 1: Laravel - форма обратной связи с сохранением в базу данных
Создается контроллер для обработки формы, маршрут и вид. Используется миграция для таблицы feedback.
// routes/web.php
Route::get('/feedback', [FeedbackController::class, 'create']);
Route::post('/feedback', [FeedbackController::class, 'store']);// app/Http/Controllers/FeedbackController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Feedback;
class FeedbackController extends Controller
{
public function create()
{
return view('feedback.form');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|max:255',
'message' => 'required'
]);
Feedback::create($validated);
return redirect('/feedback')->with('success', 'Сообщение отправлено!');
}
}// resources/views/feedback/form.blade.php
@if(session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
<form method="POST" action="/feedback">
@csrf
<input type="text" name="name" placeholder="Ваше имя">
<textarea name="message" placeholder="Сообщение"></textarea>
<button type="submit">Отправить</button>
</form>// database/migrations/xxxx_create_feedback_table.php
Schema::create('feedback', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('message');
$table->timestamps();
});Результат: отображается форма, после отправки - сообщение об успехе и запись в таблицу feedback.
[HTML формы с полями и кнопкой, после отправки - зеленый alert "Сообщение отправлено!"]
Пример 2: Самописный роутер с поддержкой параметров (регулярные выражения)
Создается класс Router, который сопоставляет URL с регулярными выражениями и вызывает колбэк с параметрами.
// Router.php
class Router
{
private array $routes = [];
public function add(string $pattern, callable $handler): void
{
$this->routes[$pattern] = $handler;
}
public function dispatch(string $uri): void
{
foreach ($this->routes as $pattern => $handler) {
$regex = '/^' . str_replace('/', '\/', $pattern) . '$/';
if (preg_match($regex, $uri, $matches)) {
array_shift($matches);
call_user_func_array($handler, $matches);
return;
}
}
http_response_code(404);
echo "404 Not Found";
}
}// index.php
require 'Router.php';
$router = new Router();
$router->add('/user/(\d+)', function($id) {
echo "Пользователь с ID: $id";
});
$router->add('/page/([a-z]+)', function($slug) {
echo "Страница: $slug";
});
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$router->dispatch($uri);Результат: при переходе на /user/42 выводится "Пользователь с ID: 42", на /page/about - "Страница: about".
Пользователь с ID: 42
Пример 3: Slim - REST API с возвратом JSON и middleware
Создается приложение Slim с маршрутами GET и POST, middleware для проверки API-ключа, возврат JSON.
// index.php
use Slim\Factory\AppFactory;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
// Middleware для проверки API-ключа
$apiKeyCheck = function (Request $request, $handler) {
$apiKey = $request->getHeaderLine('X-API-Key');
if ($apiKey !== 'secret123') {
$response = new \Slim\Psr7\Response();
$response->getBody()->write(json_encode(['error' => 'Unauthorized']));
return $response->withStatus(401)->withHeader('Content-Type', 'application/json');
}
return $handler->handle($request);
};
$app->get('/api/users', function (Request $request, Response $response) {
$users = ['Alice', 'Bob', 'Charlie'];
$payload = json_encode($users);
$response->getBody()->write($payload);
return $response->withHeader('Content-Type', 'application/json');
})->add($apiKeyCheck);
$app->post('/api/users', function (Request $request, Response $response) {
$data = $request->getParsedBody();
// Здесь можно сохранить пользователя
$result = ['status' => 'created', 'name' => $data['name'] ?? 'unknown'];
$payload = json_encode($result);
$response->getBody()->write($payload);
return $response->withStatus(201)->withHeader('Content-Type', 'application/json');
})->add($apiKeyCheck);
$app->run();Результат: отправка GET запроса с заголовком X-API-Key: secret123 вернет JSON список пользователей. Без ключа - 401 ошибка.
["Alice","Bob","Charlie"]