| کانال توسعه‌دهندگان PHP |
1.66K subscribers
48 photos
1 video
60 links
⭕️ کانال توسعه‌دهندگان پی‌اچ‌پی (PHP) دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
اگه تا حالا خواستی یه لاگین سبک برای SPA، موبایل یا حتی فرم ساده خودت بسازی، یه API لاگین کوچیک با PHP خالص می‌تونه عالی باشه؛ مخصوصاً وقتی با سبک مدرن و OOP نوشته بشه 😊

ایده این پست بر اساس ترکیبی از مستند رسمی PHP و چند نمونه‌کار تمیز روی GitHub هست (مثل ریپوهای سبک login API با PDO). تمرکز روی اینه که یه ساختار تمیز، قابل‌گسترش و امن‌تر نسبت به کدهای قدیمی و procedural داشته باشیم.

سناریو 🔎
می‌خوای یه endpoint مثل /api/login.php داشته باشی که:

• JSON از کلاینت بگیره (email و password)
• یوزر رو توی دیتابیس MySQL چک کنه
• پسورد رو با password_hash و password_verify هندل کنه
• در جواب، JSON تمیز برگردونه

چند نکته مهم قبل از کد 🧠
• حتماً PDO با prepared statement استفاده کن، نه query خام.
• همیشه Content-Type: application/json رو ست کن.
• خطاها رو JSON برگردون، نه echo ساده.

نمونه ساختار ساده API لاگین 🧩
این یه مثال مینیمال و قابل‌اجراست (فرض بر اینه که جدول users با ستون‌های id، email، password داری و پسوردها با password_hash ذخیره شدن):

<?php
// api/login.php

declare(strict_types=1);

header('Content-Type: application/json; charset=utf-8');

class DB
{
private \PDO $pdo;

public function __construct()
{
$dsn = 'mysql:host=localhost;dbname=myapp;charset=utf8mb4';
$user = 'db_user';
$pass = 'db_pass';

$this->pdo = new \PDO($dsn, $user, $pass, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
]);
}

public function findUserByEmail(string $email): ?array
{
$stmt = $this->pdo->prepare('SELECT * FROM users WHERE email = :email LIMIT 1');
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();
return $user ?: null;
}
}

class LoginController
{
public function __construct(private DB $db) {}

public function handle(): void
{
$input = json_decode(file_get_contents('php://input'), true);

if (!isset($input['email'], $input['password'])) {
http_response_code(400);
echo json_encode(['error' => 'invalid_payload']);
return;
}

$user = $this->db->findUserByEmail($input['email']);
if (!$user || !password_verify($input['password'], $user['password'])) {
http_response_code(401);
echo json_encode(['error' => 'invalid_credentials']);
return;
}

echo json_encode([
'id' => (int) $user['id'],
'email' => $user['email'],
]);
}
}

$db = new DB();
$controller = new LoginController($db);
$controller->handle();


چرا این سبک خوبه؟ ⚙️
• کلاس DB جداست، بعداً راحت می‌تونی لاگ، کش یا تست واحد براش بنویسی.
• LoginController فقط روی لاجیک لاگین تمرکز داره، نه اتصال به دیتابیس.
• از strict_types و type hint استفاده شده که با PHP مدرن هماهنگه.

برای عمیق‌تر شدن توی این سبک، مستند رسمی PHP درباره PDO و همچنین بخش password hash و password_verify خیلی کمک‌کننده است.

این ساختار کوچیک رو بردار، توی پروژه‌هات امتحانش کن و با اضافه کردن token (مثلاً JWT) یا session، تبدیلش کن به یه auth کامل‌تر. تجربه‌هات رو هم با بقیه توسعه‌دهنده‌های PHP به اشتراک بذار 🔧💬

🔖 #PHP #پی_اچ_پی #PHP #Login_API #PDO #OOP #Authentication #Backend

👤 Developix

💎 Channel: @DevelopixPHP
👍3❤1