بناء موقع Laravel بكلود AI — من التثبيت للنشر
لماذا Laravel 11 هو إطار PHP الأول في 2026؟
منذ إطلاقه عام 2011، لم يتوقف Laravel عن التطور. ما بدأ كطبقة بسيطة فوق PHP تحوّل إلى منظومة متكاملة تُدار بها ملايين المواقع والتطبيقات حول العالم — من المتاجر الإلكترونية الصغيرة إلى منصات المؤسسات الكبرى. Laravel 11 يأتي بمفهوم "Slim Application" الذي يُبسّط بنية المشروع الافتراضية دون التضحية بأي من قوة الإطار.
ما يميز Laravel عن بقية أطر PHP هو فلسفته: المطور أولاً. Eloquent ORM يجعل التعامل مع قواعد البيانات يشبه كتابة جمل إنجليزية بسيطة. Blade يجعل القوالب نظيفة وقابلة للقراءة. Artisan CLI يُنجز في ثانية ما كان يستغرق ساعات من الكتابة اليدوية. ومع كلود AI، أصبح كل هذا أسرع وأكثر دقة من أي وقت مضى.
- أكثر من 400 ألف تنزيل أسبوعياً على Packagist
- بنية Slim افتراضية: عدد الملفات الأولية انخفض بنسبة 40% مقارنة بـ Laravel 10
- Pest v3 افتراضياً — كتابة اختبارات أسرع وأوضح من PHPUnit التقليدي
- Reverb: خادم WebSocket مدمج لأول مرة بدون Pusher خارجي
- Filament v3 يبني CRUD Panel كامل في أقل من 5 دقائق
مع كلود AI وClaude Code، تختلف تجربة Laravel تماماً. كلود يقرأ ملفات مشروعك كلها — من models وcontrollers ومigrations — ويكتب كوداً متسقاً يتبع Laravel conventions بالحرف. لن تحتاج لحفظ كل helper وكل method — اطلب ما تريده بالعربية وكلود يترجمه لـ Laravel نظيف ومختبر.
| المعيار | Laravel 11 | Symfony 7 | CodeIgniter 4 |
|---|---|---|---|
| سهولة البدء | ممتازة — artisan يولّد كل شيء | صعبة — إعداد مطوّل | سهلة لكن محدودة |
| ORM | Eloquent — الأفضل في PHP | Doctrine — قوي لكن معقد | Active Record بسيط |
| Admin Panel | Filament مجاني ومتكامل | EasyAdmin — جيد لكن منفصل | لا يوجد رسمي |
| Ecosystem | الأوسع — Sanctum، Horizon، Echo | واسع لكن مبعثر | محدود |
| مجتمع عربي | الأكبر والأكثر نشاطاً | متوسط | صغير |
تثبيت Laravel 11 وإعداد البيئة مع كلود AI
قبل البدء تحتاج إلى PHP 8.2 أو أحدث، وComposer، وقاعدة بيانات (MySQL أو PostgreSQL أو SQLite للتطوير المحلي). Claude Code يكون جاهزاً داخل مجلد المشروع لمساعدتك منذ اللحظة الأولى.
إنشاء مشروع Laravel جديد
شغّل أمر الإنشاء عبر Composer. Laravel Installer هو الخيار الأسرع إذا كنت تبني مشاريع متعددة.
# الطريقة الأولى: عبر Composer مباشرة
composer create-project laravel/laravel my-laravel-app
cd my-laravel-app
# الطريقة الثانية: عبر Laravel Installer (أسرع)
composer global require laravel/installer
laravel new my-laravel-app
# تشغيل خادم التطوير
php artisan serve
إعداد ملف .env
انسخ ملف .env.example وعدّل بيانات قاعدة البيانات. اطلب من كلود: "أعدّ ملف .env لمشروع Laravel مع MySQL وcache Redis وqueue database."
APP_NAME="موقعي بـ Laravel"
APP_ENV=local
APP_KEY=base64:...
APP_DEBUG=true
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_laravel_db
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=redis
QUEUE_CONNECTION=database
SESSION_DRIVER=database
عرّف كلود بمشروعك فوراً
افتح Claude Code داخل مجلد المشروع وقل: "هذا مشروع Laravel 11 لبناء متجر إلكتروني يبيع منتجات رقمية — المستخدمون يسجلون ويشترون ويحصلون على تحميل فوري." كلود سيبني كل شيء بناءً على هذا السياق.
أنشئ ملف CLAUDE.md في جذر المشروع يشرح: نوع المشروع، قاعدة البيانات، conventions المتبعة (camelCase أم snake_case)، الـ packages المستخدمة، وأي قرارات معمارية مهمة. كلود يقرأه في كل محادثة ويكتب كوداً متسقاً من اليوم الأول حتى الأخير.
Routing وControllers — العمود الفقري لأي موقع Laravel
الـ Routing في Laravel من أكثر ما يُميّزه — نظام واضح وبليغ يعكس بنية موقعك مباشرة. Laravel 11 يبسّط الملفات الافتراضية: routes/web.php للصفحات العامة وroutes/api.php لواجهات API. مع كلود، تصف ما تريده بالعربية ويكتب Routes وControllers متكاملة في ثوانٍ.
Routes الأساسية في web.php
قل لكلود: "أنشئ Routes لموقع متجر: صفحة رئيسية، قائمة منتجات، تفاصيل منتج، سلة تسوق، وصفحة checkout." كلود يكتب Routes منظمة مع Resource Controllers مناسبة.
// routes/web.php — مثال لمتجر إلكتروني
use App\Http\Controllers\ProductController;
use App\Http\Controllers\CartController;
use App\Http\Controllers\CheckoutController;
// صفحة رئيسية
Route::get('/', [ProductController::class, 'index'])->name('home');
// منتجات — Resource Route يولّد 7 routes تلقائياً
Route::resource('products', ProductController::class)->only([
'index', 'show'
]);
// سلة التسوق — تتطلب تسجيل دخول
Route::middleware('auth')->group(function () {
Route::get('/cart', [CartController::class, 'index'])->name('cart.index');
Route::post('/cart/add/{product}', [CartController::class, 'add'])->name('cart.add');
Route::delete('/cart/{item}', [CartController::class, 'remove'])->name('cart.remove');
Route::get('/checkout', [CheckoutController::class, 'index'])->name('checkout');
Route::post('/checkout', [CheckoutController::class, 'process'])->name('checkout.process');
});
إنشاء Controller بـ Artisan
اطلب من كلود: "أنشئ ProductController بـ Artisan مع methods كاملة — index تجلب المنتجات مع pagination، وshow تجلب منتج واحد بـ slug." كلود يشغّل الأوامر ويملأ المنطق.
# إنشاء Controller فارغ
php artisan make:controller ProductController
# إنشاء Resource Controller (7 methods جاهزة)
php artisan make:controller ProductController --resource
# إنشاء Controller مع Model في خطوة واحدة
php artisan make:controller ProductController --model=Product
// app/Http/Controllers/ProductController.php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
// جلب المنتجات مع pagination وCache لمدة 5 دقائق
$products = cache()->remember('products.index', 300, function () {
return Product::with('category')
->active()
->latest()
->paginate(12);
});
return view('products.index', compact('products'));
}
public function show(Product $product)
{
// Route Model Binding — Laravel يجلب المنتج تلقائياً بالـ ID أو الـ slug
$relatedProducts = Product::where('category_id', $product->category_id)
->where('id', '!=', $product->id)
->active()
->limit(4)
->get();
return view('products.show', compact('product', 'relatedProducts'));
}
}
Eloquent ORM والـ Migrations — قاعدة البيانات بأسلوب Laravel
Eloquent هو قلب Laravel — ORM أنيق يجعل كل جدول في قاعدة البيانات يمثله Model بخاصيته وعلاقاته وscopes ومعالجاته. بدلاً من كتابة SQL يدوياً، تكتب PHP واضحة تصف ما تريده. مع كلود، تصف هيكل بياناتك بالعربية وكلود يترجمها لـ Migrations وModels محكمة.
إنشاء Migration وModel معاً
قل لكلود: "أنشئ Model لمنتج متجر رقمي: اسم، وصف، سعر، صورة، slug، category_id، is_active، وعدد التحميلات." كلود ينشئ Migration وModel في أمر واحد.
# إنشاء Model مع Migration في خطوة واحدة
php artisan make:model Product -m
# إنشاء Model مع Migration وFactory وSeeder وController دفعة واحدة
php artisan make:model Product -mfsc
// database/migrations/xxxx_create_products_table.php
return new class extends Migration
{
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('slug')->unique();
$table->text('description')->nullable();
$table->decimal('price', 10, 2);
$table->string('image')->nullable();
$table->foreignId('category_id')->constrained()->cascadeOnDelete();
$table->boolean('is_active')->default(true);
$table->unsignedInteger('download_count')->default(0);
$table->timestamps();
$table->softDeletes();
// indexes للبحث السريع
$table->index(['is_active', 'created_at']);
$table->index('slug');
});
}
};
Eloquent Model مع Relations وScopes
اطلب من كلود: "أكمل Product Model: علاقة مع Category، Scope للمنتجات النشطة، Accessor لتنسيق السعر، وMutator لتوليد الـ slug تلقائياً من الاسم."
// app/Models/Product.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Support\Str;
class Product extends Model
{
use SoftDeletes;
protected $fillable = [
'name', 'slug', 'description', 'price',
'image', 'category_id', 'is_active'
];
protected $casts = [
'is_active' => 'boolean',
'price' => 'decimal:2',
];
// علاقة مع الفئة
public function category()
{
return $this->belongsTo(Category::class);
}
// علاقة مع الطلبات
public function orders()
{
return $this->belongsToMany(Order::class)->withTimestamps();
}
// Scope للمنتجات النشطة فقط
public function scopeActive($query)
{
return $query->where('is_active', true);
}
// Accessor: تنسيق السعر بالعملة
protected function formattedPrice(): Attribute
{
return Attribute::make(
get: fn () => number_format($this->price, 2) . ' ج.م'
);
}
// توليد slug تلقائياً قبل الحفظ
protected static function boot()
{
parent::boot();
static::creating(function ($product) {
$product->slug ??= Str::slug($product->name);
});
}
}
تشغيل Migrations وبيانات تجريبية
بعد كتابة Migrations، شغّلها وأنشئ Seeders للبيانات التجريبية. كلود يكتب Factory واقعية بـ Faker باللغة العربية.
# تشغيل كل Migrations
php artisan migrate
# تشغيل مع بيانات تجريبية
php artisan migrate --seed
# إعادة البناء من الصفر (في التطوير فقط)
php artisan migrate:fresh --seed
Blade Templates — قوالب Laravel الأنيقة
Blade هو محرك القوالب في Laravel — يجمع بين مرونة PHP الكاملة وصياغة نظيفة لا تُشوّه
HTML. بدلاً من كتابة <?php echo ?> في كل مكان، تكتب
{{ }} للمتغيرات و@foreach للحلقات و@if
للشروط. مع كلود، تصف واجهتك بالعربية ويكتب Blade Templates جاهزة للاستخدام.
Layout رئيسي وComponents
قل لكلود: "أنشئ Layout رئيسي لموقع متجر: header بالـ nav وlogo، footer بالروابط، وslot للمحتوى. استخدم Blade Components للـ header والـ footer." كلود ينشئ بنية layouts احترافية.
{{-- resources/views/layouts/app.blade.php --}}
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@yield('title', config('app.name'))</title>
@vite(['resources/css/app.css', 'resources/js/app.js'])
@stack('styles')
</head>
<body class="bg-gray-50">
<x-header />
<main class="container mx-auto px-4 py-8">
@if(session('success'))
<x-alert type="success" :message="session('success')" />
@endif
@yield('content')
</main>
<x-footer />
@stack('scripts')
</body>
</html>
صفحة قائمة المنتجات
اطلب: "أنشئ صفحة products/index.blade.php تعرض المنتجات في grid مع صورة واسم وسعر وزر إضافة للسلة، مع pagination في الأسفل." كلود يكتب Blade مع Tailwind CSS جاهز.
{{-- resources/views/products/index.blade.php --}}
@extends('layouts.app')
@section('title', 'جميع المنتجات')
@section('content')
<div class="mb-6">
<h1 class="text-3xl font-bold text-gray-900">المنتجات</h1>
<p class="text-gray-500 mt-1">{{ $products->total() }} منتج متاح</p>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
@forelse($products as $product)
<x-product-card :product="$product" />
@empty
<div class="col-span-full text-center py-16 text-gray-400">
لا توجد منتجات حالياً
</div>
@endforelse
</div>
<div class="mt-8">
{{ $products->links() }}
</div>
@endsection
Blade Component لبطاقة المنتج
قل لكلود: "أنشئ Blade Component اسمه product-card يستقبل منتجاً ويعرضه بتصميم احترافي مع صورة وسعر وزر إضافة للسلة."
{{-- resources/views/components/product-card.blade.php --}}
@props(['product'])
<div class="bg-white rounded-xl shadow-sm hover:shadow-md transition-shadow overflow-hidden">
<a href="{{ route('products.show', $product->slug) }}">
<img
src="{{ asset('storage/' . $product->image) }}"
alt="{{ $product->name }}"
class="w-full h-48 object-cover"
loading="lazy"
>
</a>
<div class="p-4">
<h3 class="font-semibold text-gray-900 truncate">
<a href="{{ route('products.show', $product->slug) }}">
{{ $product->name }}
</a>
</h3>
<div class="flex items-center justify-between mt-3">
<span class="text-xl font-bold text-indigo-600">
{{ $product->formatted_price }}
</span>
<form action="{{ route('cart.add', $product) }}" method="POST">
@csrf
<button type="submit" class="bg-indigo-600 text-white px-4 py-2 rounded-lg text-sm hover:bg-indigo-700 transition">
أضف للسلة
</button>
</form>
</div>
</div>
</div>
Filament Admin Panel — لوحة تحكم احترافية في دقائق
Filament v3 يُعدّ من أفضل ما حدث لـ Laravel في السنوات الأخيرة. لوحة تحكم كاملة بتصميم أنيق، CRUD تلقائي، بحث وفلترة وtable actions — كل هذا بضع أوامر Artisan. مع كلود، تصف واجهتك بالعربية وكلود يكتب Filament Resources جاهزة للعمل فوراً.
تثبيت Filament وإعداده
اطلب من كلود: "ثبّت Filament v3 وأنشئ لوحة تحكم admin." كلود يشغّل الأوامر الصحيحة ويضبط الـ user model.
# تثبيت Filament
composer require filament/filament:"^3.0"
# نشر وتثبيت Filament
php artisan filament:install --panels
# إنشاء مستخدم admin أول
php artisan make:filament-user
# نشر Assets
php artisan filament:assets
إنشاء Resource للمنتجات
قل لكلود: "أنشئ Filament Resource لـ Product Model مع table يعرض الاسم والسعر والفئة والحالة، وform لإضافة وتعديل المنتجات بحقول كاملة مع image upload."
# إنشاء Filament Resource
php artisan make:filament-resource Product --generate
// app/Filament/Resources/ProductResource.php
namespace App\Filament\Resources;
use Filament\Forms;
use Filament\Tables;
use Filament\Resources\Resource;
use App\Models\Product;
class ProductResource extends Resource
{
protected static ?string $model = Product::class;
protected static ?string $navigationIcon = 'heroicon-o-shopping-bag';
protected static ?string $navigationLabel = 'المنتجات';
protected static ?string $pluralLabel = 'المنتجات';
public static function form(Forms\Form $form): Forms\Form
{
return $form->schema([
Forms\Components\Section::make('معلومات المنتج')->schema([
Forms\Components\TextInput::make('name')
->label('اسم المنتج')
->required()
->maxLength(255)
->live(onBlur: true)
->afterStateUpdated(fn ($state, $set) =>
$set('slug', \Illuminate\Support\Str::slug($state))),
Forms\Components\TextInput::make('slug')
->label('الرابط المختصر')
->unique(ignoreRecord: true)
->required(),
Forms\Components\Textarea::make('description')
->label('الوصف')
->rows(4)
->columnSpanFull(),
Forms\Components\TextInput::make('price')
->label('السعر')
->numeric()
->prefix('ج.م')
->required(),
Forms\Components\Select::make('category_id')
->label('الفئة')
->relationship('category', 'name')
->searchable()
->preload()
->required(),
Forms\Components\FileUpload::make('image')
->label('صورة المنتج')
->image()
->directory('products')
->columnSpanFull(),
Forms\Components\Toggle::make('is_active')
->label('منتج نشط')
->default(true),
])->columns(2),
]);
}
public static function table(Tables\Table $table): Tables\Table
{
return $table
->columns([
Tables\Columns\ImageColumn::make('image')->label('صورة')->circular(),
Tables\Columns\TextColumn::make('name')->label('الاسم')->searchable()->sortable(),
Tables\Columns\TextColumn::make('category.name')->label('الفئة')->badge(),
Tables\Columns\TextColumn::make('price')->label('السعر')->money('EGP')->sortable(),
Tables\Columns\ToggleColumn::make('is_active')->label('نشط'),
Tables\Columns\TextColumn::make('created_at')->label('تاريخ الإضافة')->dateTime('d/m/Y')->sortable(),
])
->filters([
Tables\Filters\SelectFilter::make('category')->label('الفئة')->relationship('category', 'name'),
Tables\Filters\TernaryFilter::make('is_active')->label('الحالة'),
])
->actions([
Tables\Actions\EditAction::make()->label('تعديل'),
Tables\Actions\DeleteAction::make()->label('حذف'),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make()->label('حذف المحدد'),
]),
]);
}
}
API Resources — Laravel كـ Backend لأي Frontend
Laravel يتألق كـ API Backend سواء لـ React وNext.js أو Flutter أو تطبيقات الجوال. API Resources تتيح التحكم الكامل فيما يُرسَل للعميل — بيانات منظمة ومتسقة دون تسريب حقول حساسة. مع Sanctum أو Passport، تضيف مصادقة Token آمنة في دقائق.
إعداد API Routes والـ Authentication
قل لكلود: "أعدّ Laravel Sanctum للمصادقة بـ API Token وأنشئ Routes لـ register وlogin وlogout في routes/api.php." كلود يثبت Sanctum ويكتب AuthController كاملاً.
# تثبيت Laravel Sanctum
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
// routes/api.php — API Routes منظمة
use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\ProductController;
Route::prefix('v1')->group(function () {
// Authentication Routes — متاحة بدون Token
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
// Protected Routes — تتطلب Token صالح
Route::middleware('auth:sanctum')->group(function () {
Route::post('/logout', [AuthController::class, 'logout']);
Route::get('/me', [AuthController::class, 'me']);
Route::apiResource('products', ProductController::class);
});
});
إنشاء API Resource لتنسيق الاستجابة
اطلب من كلود: "أنشئ ProductResource يُرجع بيانات المنتج منظمة: id، name، slug، price، category name، image URL كامل، وعدد التحميلات. أخفِ حقل category_id الخام."
# إنشاء API Resource
php artisan make:resource ProductResource
php artisan make:resource ProductCollection
// app/Http/Resources/ProductResource.php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ProductResource extends JsonResource
{
public function toArray($request): array
{
return [
'id' => $this->id,
'name' => $this->name,
'slug' => $this->slug,
'description' => $this->description,
'price' => (float) $this->price,
'formatted_price' => $this->formatted_price,
'image_url' => $this->image
? asset('storage/' . $this->image)
: null,
'category' => [
'id' => $this->category->id,
'name' => $this->category->name,
],
'download_count' => $this->download_count,
'is_active' => $this->is_active,
'created_at' => $this->created_at->toISOString(),
];
}
}
API Controller منظم مع استجابات موحدة
اطلب: "أكمل Api/ProductController مع استجابات JSON موحدة — نجاح وخطأ بنفس البنية — وvalidation كاملاً لـ store وupdate." كلود يكتب Controller احترافي مع Error Handling.
// app/Http/Controllers/Api/ProductController.php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\ProductResource;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
$products = Product::with('category')
->active()
->paginate(15);
return ProductResource::collection($products)
->additional(['status' => 'success']);
}
public function show(Product $product)
{
return response()->json([
'status' => 'success',
'data' => new ProductResource($product->load('category')),
]);
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'description' => 'nullable|string',
'price' => 'required|numeric|min:0',
'category_id' => 'required|exists:categories,id',
'image' => 'nullable|image|max:2048',
]);
if ($request->hasFile('image')) {
$validated['image'] = $request->file('image')->store('products', 'public');
}
$product = Product::create($validated);
return response()->json([
'status' => 'success',
'message' => 'تمت إضافة المنتج بنجاح',
'data' => new ProductResource($product),
], 201);
}
}
النشر على الخادم — من التطوير للإنتاج
Laravel يعمل على أي خادم يدعم PHP 8.2+ سواء كان VPS أو Shared Hosting أو Cloud. للمشاريع الجادة، VPS مع Ubuntu وNginx هو الخيار الأمثل — أداء أفضل وتحكم كامل. كلود يساعدك في كتابة script النشر الكامل وإعداد Supervisor لـ Queue Workers.
إعداد الخادم — Ubuntu 22.04
قل لكلود: "اكتب لي script bash كامل لإعداد VPS Ubuntu 22.04 لاستضافة Laravel: PHP 8.3، Nginx، MySQL 8، Composer، وتأمين الخادم بـ UFW." كلود يكتب script جاهز للتنفيذ.
# تثبيت PHP 8.3 وExtensions المطلوبة
sudo apt update && sudo apt upgrade -y
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt install -y php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring \
php8.3-xml php8.3-curl php8.3-zip php8.3-bcmath php8.3-gd php8.3-redis
# تثبيت Nginx وMySQL
sudo apt install -y nginx mysql-server
# تثبيت Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
إعداد Nginx للمشروع
اطلب من كلود: "اكتب ملف nginx.conf لمشروع Laravel على domain example.com مع SSL وgzip compression وcaching للـ static files." كلود يكتب config محسّن للأداء.
# /etc/nginx/sites-available/my-laravel-app
server {
listen 80;
server_name example.com www.example.com;
root /var/www/my-laravel-app/public;
index index.php;
# تمرير PHP Requests لـ PHP-FPM
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
# إعادة توجيه كل الطلبات لـ index.php (Laravel Routing)
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Cache للـ Static Files
location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# أمان: منع الوصول لملفات حساسة
location ~ /\.(env|git) {
deny all;
}
}
سكريبت النشر التلقائي
اطلب: "اكتب deploy.sh يسحب آخر تغييرات git ويشغّل composer install والـ migrations وclear cache وrestart queue workers." كلود يكتب script deployment كامل.
#!/bin/bash
# deploy.sh — سكريبت نشر Laravel
cd /var/www/my-laravel-app
# سحب آخر الكود
git pull origin main
# تثبيت dependencies (بدون dev packages)
composer install --no-dev --optimize-autoloader
# تشغيل Migrations الجديدة
php artisan migrate --force
# تحسين الأداء في الإنتاج
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
# إعادة تشغيل Queue Workers
php artisan queue:restart
# الصلاحيات الصحيحة
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
echo "✅ النشر اكتمل بنجاح!"
Tips & Tricks: 8 نصائح لبناء Laravel بكلود بشكل أسرع
ابدأ بـ CLAUDE.md في جذر المشروع
أنشئ ملف CLAUDE.md يشرح: نوع المشروع، قاعدة البيانات، الـ packages المستخدمة، اتفاقيات التسمية، والمتغيرات في .env. كلود يقرأه في كل محادثة ويكتب كوداً متسقاً من اليوم الأول.
استخدم Strict Mode في Eloquent
فعّل Model::shouldBeStrict() في AppServiceProvider. سيمنع الوصول للخصائص غير المُعرَّفة وتحذيرك من N+1 queries — كلود يضيفه تلقائياً عند إنشاء المشاريع الجديدة.
Form Requests لـ Validation المركزي
بدل كتابة validate() داخل كل controller method، اطلب: "أنشئ Form Request لكل عملية CRUD." كلود ينشئ Request classes منظمة تفصل validation عن business logic تماماً.
Service Classes للمنطق المعقد
قل لكلود: "انقل منطق الدفع والـ orders لـ OrderService class." Controllers تبقى رفيعة (thin) والمنطق يُختبر بسهولة بشكل مستقل — معمارية أنظف بكثير.
Cache للـ Queries المتكررة
اطلب: "أضف Cache::remember لكل query تُستدعى أكثر من مرة في الصفحة نفسها مثل قائمة الفئات والإعدادات." تحسين ملحوظ في الأداء خصوصاً مع حركة مرور عالية.
Observers لـ Events التلقائية
قل لكلود: "أنشئ ProductObserver ينفذ: إرسال notification عند إضافة منتج، وحذف الصورة من Storage عند حذف المنتج." Observers تفصل side effects عن الكود الرئيسي بأناقة.
Pest لاختبارات أسرع وأوضح
اطلب: "اكتب Feature Tests بـ Pest لكل API endpoint — بيانات صالحة وغير صالحة ومصادقة." Pest يجعل كتابة الاختبارات ممتعة وكلود يكتبها بسرعة مع dataset متنوعة.
Horizon لمتابعة Queue Workers
قل: "ثبّت Laravel Horizon وأعدّه لمتابعة jobs قاعدة البيانات." Horizon يعطيك dashboard رائع لمتابعة Jobs في الوقت الفعلي وإحصاءات الـ Queue بالكامل.
Hidden Gems: 5 استخدامات خفية ستغيّر طريقة كتابتك لـ Laravel
Pipeline Pattern لـ Business Logic المعقد
اطلب من كلود: "استخدم Laravel Pipeline لمعالجة طلب الشراء — التحقق من المخزون، تطبيق الخصم، معالجة الدفع، إنشاء الطلب — كل خطوة في class منفصلة." Pipeline يجعل العملية قابلة للاختبار والتعديل بدون لمس الكود الأصلي.
Spatie Query Builder للـ API Filtering
قل: "استخدم spatie/laravel-query-builder لـ API Products endpoint — filtering بالفئة والسعر، sorting بأي حقل، والـ include للـ relations." بسطر واحد تحل ما يحتاج عادةً 50 سطراً من الكود.
Scheduled Commands لمهام دورية
اطلب: "أنشئ Artisan command يرسل تقريراً أسبوعياً للمبيعات عبر البريد الإلكتروني ويشغّل كل جمعة الساعة 8 صباحاً." كلود يكتب Command وينظم جدول routes/console.php بشكل صحيح.
Route Model Binding بالـ Slug
قل: "استخدم Route Model Binding بالـ slug بدل الـ ID للمنتجات." أضف getRouteKeyName() في Model وكلود يعدّل Routes تلقائياً — URLs أجمل وSEO أفضل.
Macro لـ Response الموحّد
اطلب: "أضف Response Macro اسمه success وerror يُعيدان JSON بنفس البنية دائماً." بدل كتابة response()->json(['status' => 'success'...]) في كل مكان، تكتب response()->success($data) — أنظف وأسرع.
الأسئلة الشائعة حول Laravel وكلود AI
Laravel مناسب للمبتدئين في PHP الذين يعرفون أساسيات اللغة (المتغيرات، الدوال، الكائنات). الإطار مُصمَّم ليكون واضحاً ومقروءاً منذ البداية. مع كلود AI يمكنك تجاوز منحنى التعلم بشكل كبير — كلود يشرح Eloquent وRouting وBlade بأمثلة مرتبطة بمشروعك الفعلي، وكثير من المطورين بنوا مشاريع إنتاجية كاملة في أسابيع قليلة انطلاقاً من الصفر.
Laravel مبني فوق مكونات Symfony لكنه مُحسَّن للسرعة في التطوير — Eloquent ORM وArtisan CLI وFilament وBlade وSanctum جميعها متكاملة بلا إعداد مطوّل. Symfony أقوى للتطبيقات المؤسسية الضخمة التي تحتاج لمرونة معمارية قصوى. للمواقع التجارية والـ APIs والمتاجر الإلكترونية والـ SaaS، Laravel هو الأذكى — سرعة تطوير أعلى وmaintainability أفضل.
Filament v3 مجاني بالكامل ومفتوح المصدر، وفي معظم الحالات هو أفضل من Nova المدفوع (99 دولار). Filament يوفر: CRUD panels، custom pages، widgets، charts، notifications، multi-tenancy، وأكثر. Nova أكثر نضجاً لبعض السيناريوهات المتقدمة لكن Filament يلحق به بسرعة. للمشاريع الجديدة، ابدأ بـ Filament دائماً.
على Shared Hosting بـ cPanel: ارفع ملفات المشروع (ليس مجلد public فقط) خارج public_html، ثم ارفع محتوى مجلد public داخل public_html، وعدّل index.php ليشير للمسار الصحيح. القيود الرئيسية: لا Queue Workers مستمرة، لا WebSockets، وأداء أقل من VPS. كلود يكتب لك ملف index.php المعدّل وconfigurations التي تناسب Shared Hosting.
نعم، كلود يكتب Pest Tests متكاملة لـ Laravel — Feature Tests تغطي كل API endpoints مع سيناريوهات النجاح والفشل والمصادقة، وUnit Tests للـ Service Classes وModels. كلود يكتب أيضاً Factories واقعية بـ Faker لبيانات تجريبية متنوعة، وينظم TestCases بـ datasets لاختبار حالات متعددة بكود مختصر. ستحصل على test suite يغطي 80%+ من الكود بسرعة.
جاهز تبني موقع Laravel لمشروعك؟
فريق A Plan يبني لك موقعك بـ Laravel 11 وكلود AI — من التصميم وكتابة الكود حتى النشر على الخادم والـ SEO الكامل. أداء استثنائي وكود نظيف قابل للتوسع.
تحدث مع خبير الآن🧭 اكتشف المزيد
مواضيع مرتبطة من أقسام أخرى تُكمّل ما تعلمته