Почему портфолио на PHP — ваш золотой билет?
Мир IT меняется каждые полгода, но PHP остаётся крепким середняком: на нём работает 78% всех сайтов с известной серверной стороной (включая WordPress, Laravel и Symfony). Если вы учите PHP и хотите получить оффер, одно резюме не сработает — нужны проекты, которые можно показать и объяснить на собеседовании.
В этой статье я собрал 7 идей для портфолио на PHP — от простых скриптов до полноценных микросервисов. Каждый проект сопровождается реальным кодом и объяснением, почему именно он прокачает вашу карьеру. Погнали!
1. Мини-блог на чистом PHP (без фреймворков)
Зачем это нужно?
Показать, что вы понимаете, как работают запросы, сессии и базы данных без магии фреймворка. Это база, которую спрашивают на каждом собеседовании middle-уровня.
Что реализовать?
- Регистрация/авторизация (хэширование паролей, сессии)
- CRUD для постов (создание, редактирование, удаление)
- Простейший роутинг (один index.php как точка входа)
- Вывод списка постов с пагинацией
Пример кода: простой роутер
// index.php — точка входа
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
switch ($uri) {
case '/':
require 'controllers/home.php';
break;
case '/login':
require 'controllers/login.php';
break;
case '/register':
require 'controllers/register.php';
break;
default:
http_response_code(404);
echo '404 Not Found';
break;
}
Этот код показывает, что вы умеете работать с суперглобальными массивами и строить архитектуру руками. Для портфолио — идеальный старт.
2. REST API для заметок (Laravel или Slim)
Почему API?
Современные проекты всё чаще строятся на микросервисах и SPA. Умение писать чистый REST API — навык, который нужен в 90% вакансий PHP-разработчика.
Что должно быть в проекте?
- Маршруты: GET, POST, PUT, DELETE для ресурса "Note"
- Валидация входящих данных
- JWT-аутентификация (или API ключи)
- Документация в Swagger/OpenAPI
Пример: контроллер на Laravel
// app/Http/Controllers/NoteController.php
class NoteController extends Controller
{
public function index()
{
return Note::where('user_id', auth()->id())->get();
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
$note = auth()->user()->notes()->create($validated);
return response()->json($note, 201);
}
public function destroy($id)
{
$note = Note::findOrFail($id);
$note->delete();
return response()->json(null, 204);
}
}
Такой проект для портфолио на PHP сразу показывает, что вы умеете работать с Eloquent, middleware и REST-принципами. Плюс можно докинуть тесты на PHPUnit.
3. Telegram-бот для отслеживания курса валют
Почему бот?
Telegram-боты — это тренд. Их любят заказчики, они просты в деплое (можно запустить на бесплатном хостинге) и отлично демонстрируют работу с внешними API.
Что нужно сделать?
- Подключиться к BotFather, получить токен
- Написать обработчик команд /start, /rate USD, /rate EUR
- Парсить курс с сайта ЦБ РФ или любого открытого API
- Кешировать результат (чтобы не дёргать API каждую секунду)
Пример кода: получение курса
function getExchangeRate($currency) {
$cacheFile = __DIR__ . "/cache/{$currency}.json";
if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < 3600)) {
return json_decode(file_get_contents($cacheFile), true);
}
$url = "https://api.exchangerate-api.com/v4/latest/{$currency}";
$data = json_decode(file_get_contents($url), true);
if (!is_dir(__DIR__ . '/cache')) {
mkdir(__DIR__ . '/cache', 0777, true);
}
file_put_contents($cacheFile, json_encode($data));
return $data;
}
Этот проект показывает работу с cURL/file_get_contents, кешированием и JSON. Идеально для новичка, который хочет быстро получить результат.
4. Система управления задачами (Kanban-доска)
Зачем такой проект?
Это классика enterprise-разработки. Показывает, что вы умеете проектировать базу данных, работать с AJAX и строить сложные связи между таблицами.
Суть проекта:
- Пользователи, проекты, задачи, статусы (To Do, In Progress, Done)
- Drag & Drop на фронте (jQuery UI или Alpine.js)
- Права доступа (админ, модератор, пользователь)
- Уведомления по email при смене статуса
Пример: миграция для таблицы задач (Laravel)
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->foreignId('project_id')->constrained()->onDelete('cascade');
$table->foreignId('user_id')->constrained();
$table->string('title');
$table->text('description')->nullable();
$table->enum('status', ['todo', 'in_progress', 'done'])->default('todo');
$table->integer('priority')->default(0);
$table->timestamps();
});
Такой проект для портфолио на PHP показывает, что вы умеете проектировать не только код, но и саму систему.
5. Парсер интернет-магазина (Scraper)
Кому это нужно?
Парсинг — одна из самых востребованных задач на фрилансе. Заказчики платят за сбор данных о конкурентах, ценах, отзывах. Плюс это отличная практика работы с регулярными выражениями и DOM.
Что должно быть?
- Ввод URL товара или категории
- Извлечение названия, цены, описания, изображений
- Сохранение в CSV или базу данных
- Обработка ошибок (таймауты, капча, блокировки)
Пример: парсинг с помощью cURL и DOMDocument
$html = file_get_contents('https://example.com/product/123');
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$title = $xpath->query('//h1[@class="product-title