Веб-разработка на PHP: как создать полноценный сайт

Раздел: PHP -> Веб-разработка на 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-site

Php веб страница (веб-страница на 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 и шаблонизатор по умолчанию - их нужно подключать отдельно. Для сложных проектов может потребоваться больше настроек.

- Login php app (реализация входа пользователя в php)
- веб сайт php (веб-сайт на php)
- App controller php (создание контроллера в php приложении)

Расширенные примеры с пошаговым кодом

Пример 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"]

Веб-сайт на PHP - comments

En
веб сайт php (php)