اولین پروژه با Laravel از صفر تا صد

۱۴۰۵/۰۸/۱۳ | چهارشنبه، ۱۳ آبان
دوره آموزشی ویژه 4 اپیزود اول تمام دوره های آموزشی ویدیویی رایگان میباشد دانلود رایگان

دورهٔ جامع CSS از صفر

آموزش CSS از صفر در ۲۲ ویدیو: مدل جعبه، انتخاب‌گر، فلکس‌باکس، گرید، واکنش‌گرایی، متغیرها، انیمیشن و معماری، تا پروژهٔ کامل صفحهٔ محصول؛ کد کنار خروجی ...

مدرس دوره : تیم 22 اپیزود ویدیویی 03 ساعت و 33 دقیقه و 59 ثانیه آموزش ویدیویی
متن پرونده شماره 292 - پی اچ پی
پروژه Laravel
محصول اورجینال INZIP
قالب وردپرس باریستا مخصوص کافه تم نسکافه ای روشن (دو زبانه)

قالب وردپرس باریستا مخصوص کافه تم نسکافه ای روشن (دو زبانه)

دانلود پوسته وردپرس باریستا؛ قالب کافیشاپ، رُستری قهوه و فروشگاه قهوه دوزبانه با منوی رومیزی، رزرو آنلاین میز با کد پیامکی و ووکامرس. طراحی اختصاصی inzip.ir

تحویل آنی آپدیت رایگان بدون قفل لایسنس پشتیبانی واقعی
۳,۹۹۰,۰۰۰ تومان ۲,۹۶۰,۰۰۰ تومان
بازدید و دانلود آنی
٪۲۶
تخفیف ویژه
سود شما
۱,۰۳۰,۰۰۰ تومان

اولین پروژه با Laravel: از صفر تا صد

Laravel محبوب‌ترین فریم‌ورک PHP است که توسعه وب را ساده و لذت‌بخش می‌کند. در این مقاله اولین پروژه را با هم می‌سازیم.

Laravel چیست؟

معماری Laravel Routes مسیرها Controllers کنترلرها Eloquent ORM مدل‌ها Blade قالب‌ها Migrations مهاجرت Artisan خط فرمان

پیش‌نیازها

  • PHP 8.1 یا بالاتر
  • Composer
  • MySQL یا SQLite
  • Node.js (برای frontend assets)

نصب Laravel

# نصب Laravel Installer
composer global require laravel/installer

# ایجاد پروژه جدید
laravel new my-project

# یا با Composer
composer create-project laravel/laravel my-project

# رفتن به پوشه پروژه
cd my-project

# اجرای سرور توسعه
php artisan serve
# خروجی: Server running on [http://127.0.0.1:8000]

توضیح:

  • laravel new - با installer رسمی
  • composer create-project - با Composer
  • php artisan serve - اجرای سرور داخلی برای توسعه

ساختار پوشه‌ها

my-project/
├── app/
│   ├── Http/
│   │   └── Controllers/    # کنترلرها
│   ├── Models/             # مدل‌های Eloquent
│   └── Providers/          # Service Providers
├── bootstrap/              # فایل‌های bootstrap
├── config/                 # تنظیمات
├── database/
│   ├── migrations/         # فایل‌های migration
│   ├── seeders/            # داده‌های اولیه
│   └── factories/          # Factory ها
├── public/                 # Document root
├── resources/
│   ├── views/              # قالب‌های Blade
│   ├── css/
│   └── js/
├── routes/
│   ├── web.php             # مسیرهای وب
│   ├── api.php             # مسیرهای API
│   └── console.php
├── storage/                # فایل‌های تولید شده
├── tests/                  # تست‌ها
├── vendor/                 # پکیج‌های Composer
├── .env                    # تنظیمات محیطی
└── artisan                 # ابزار خط فرمان

اولین Migration

# ساخت migration
php artisan make:migration create_posts_table

# خروجی: created Migration: 2024_01_15_120000_create_posts_table

# فایل migration ایجاد شده:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->string('slug')->unique();
            $table->foreignId('user_id')->constrained();
            $table->boolean('is_published')->default(false);
            $table->timestamps();
        });
    }
    
    public function down(): void {
        Schema::dropIfExists('posts');
    }
};

# اجرای migration
php artisan migrate

توضیح:

  • make:migration - دستور artisan برای ساخت فایل
  • up() - تغییرات برای اعمال
  • down() - تغییرات برای بازگشت
  • migrate - اجرای همه migration ها

ساخت Model

# ساخت Model
php artisan make:model Post

# یا همراه با migration
php artisan make:model Post -m

# فایل app/Models/Post.php:
<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model {
    use HasFactory;
    
    // فیلدهای قابل پر شدن
    protected $fillable = ['title', 'content', 'slug', 'user_id', 'is_published'];
    
    // نوع داده‌ها
    protected $casts = [
        'is_published' => 'boolean',
        'published_at' => 'datetime'
    ];
    
    // رابطه با User
    public function user() {
        return $this->belongsTo(User::class);
    }
}

ساخت Controller

php artisan make:controller PostController --resource

# app/Http/Controllers/PostController.php:
<?php
namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller {
    // نمایش لیست
    public function index() {
        $posts = Post::where('is_published', true)
                     ->latest()
                     ->paginate(10);
        return view('posts.index', compact('posts'));
    }
    
    // نمایش فرم ایجاد
    public function create() {
        return view('posts.create');
    }
    
    // ذخیره
    public function store(Request $request) {
        $validated = $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
            'slug' => 'required|unique:posts'
        ]);
        
        Post::create($validated);
        
        return redirect()->route('posts.index');
    }
    
    // نمایش یک پست
    public function show(Post $post) {
        return view('posts.show', compact('post'));
    }
    
    // نمایش فرم ویرایش
    public function edit(Post $post) {
        return view('posts.edit', compact('post'));
    }
    
    // به‌روزرسانی
    public function update(Request $request, Post $post) {
        $post->update($request->all());
        return redirect()->route('posts.index');
    }
    
    // حذف
    public function destroy(Post $post) {
        $post->delete();
        return redirect()->route('posts.index');
    }
}

تعریف Routes

// routes/web.php
use App\Http\Controllers\PostController;

Route::get('/', function () {
    return view('welcome');
});

// Resource Route - همه متدهای CRUD
Route::resource('posts', PostController::class);

// یا تک‌تک
Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/create', [PostController::class, 'create']);
Route::post('/posts', [PostController::class, 'store']);
Route::get('/posts/{post}', [PostController::class, 'show']);
Route::get('/posts/{post}/edit', [PostController::class, 'edit']);
Route::put('/posts/{post}', [PostController::class, 'update']);
Route::delete('/posts/{post}', [PostController::class, 'destroy']);

// Route با Middleware
Route::middleware(['auth'])->group(function () {
    Route::resource('admin/posts', PostController::class);
});

ساخت View با Blade

<!-- resources/views/posts/index.blade.php -->
@extends('layouts.app')

@section('content')
<div class="container">
    <h1>لیست پست‌ها</h1>
    
    <!-- نمایش پیام موفقیت -->
    @if (session('success'))
        <div class="alert alert-success">
            {{ session('success') }}
        </div>
    @endif
    
    <a href="{{ route('posts.create') }}" class="btn btn-primary">
        پست جدید
    </a>
    
    @forelse ($posts as $post)
        <div class="card">
            <h2>
                <a href="{{ route('posts.show', $post) }}">
                    {{ $post->title }}
                </a>
            </h2>
            <p>{{ Str::limit($post->content, 100) }}</p>
            <small>توسط {{ $post->user->name }}</small>
        </div>
    @empty
        <p>پستی یافت نشد.</p>
    @endforelse
    
    {{ $posts->links() }}
&div>
@endsection

Eloquent ORM - کار با دیتابیس

<?php
// خواندن همه
$posts = Post::all();

// شرط
$posts = Post::where('is_published', true)->get();

// یک رکورد
$post = Post::find(1);
// یا
$post = Post::where('slug', 'my-post')->firstOrFail();

// ایجاد
$post = Post::create([
    'title' => 'عنوان',
    'content' => 'محتوا',
    'slug' => 'slug'
]);

// به‌روزرسانی
$post->update(['title' => 'عنوان جدید']);

// حذف
$post->delete();

// Pagination
$posts = Post::paginate(15);

// روابط
$user = $post->user;  // belongsTo
$posts = $user->posts;  // hasMany

// Eager Loading (جلوگیری از N+1)
$posts = Post::with('user')->get();

// Query Scopes
class Post extends Model {
    public function scopePublished($query) {
        return $query->where('is_published', true);
    }
}

$published = Post::published()->get();

فرم با CSRF Protection

<form action="{{ route('posts.store') }}" method="POST">
    @csrf  <!-- توکن CSRF -->
    
    <input type="text" name="title" value="{{ old('title') }}">
    @error('title')
        <span class="error">{{ $message }}</span>
    @enderror
    
    <textarea name="content">{{ old('content') }}</textarea>
    @error('content')
        <span class="error">{{ $message }}</span>
    @enderror
    
    <button type="submit">ذخیره</button>
</form>

Authentication

# نصب Breeze (سیستم احراز هویت ساده)
composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run dev
php artisan migrate

# استفاده در Controller
use Illuminate\Support\Facades\Auth;

public function login(Request $request) {
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);
    
    if (Auth::attempt($credentials)) {
        $request->session()->regenerate();
        return redirect()->intended('/dashboard');
    }
    
    return back()->withErrors([
        'email' => 'اطلاعات ورود نامعتبر'
    ]);
}

// Middleware auth
Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/dashboard', function () {
        return view('dashboard');
    });
});

Artisan - دستورات مفید

# مشاهده همه دستورات
php artisan list

# دستورات پرکاربرد:
php artisan serve              # اجرای سرور
php artisan migrate            # اجرای migration
php artisan migrate:rollback   # بازگشت migration
php artisan make:model ModelName
php artisan make:controller ControllerName
php artisan make:migration create_table
php artisan make:seeder SeederName
php artisan make:middleware MiddlewareName
php artisan make:request FormRequest
php artisan tinker             # کنسول تعاملی
php artisan route:list         # لیست routes
php artisan cache:clear        # پاک کردن کش
php artisan config:clear       # پاک کردن config cache
php artisan view:clear         # پاک کردن view cache
php artisan storage:link       # ساخت لینک storage

استقرار (Deployment)

# تنظیمات production
APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com

# بهینه‌سازی
php artisan config:cache
php artisan route:cache
php artisan view:cache
composer install --optimize-autoloader --no-dev

# دسترسی‌ها
chmod -R 755 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

# Nginx config (نمونه)
server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/my-project/public;
    
    index index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

منابع یادگیری

  • مستندات رسمی: laravel.com/docs
  • Laracasts: دوره‌های ویدیویی
  • Laravel News: آخرین اخبار
  • Github: github.com/laravel/laravel

نتیجه‌گیری

Laravel فریم‌ورک کاملی است که با ابزارهای قدرتمند، توسعه وب را سریع و لذت‌بخش می‌کند. با یادگیری مفاهیم پایه آن، می‌توانید پروژه‌های حرفه‌ای بسازید.

برچسب‌های این مقاله
  • Laravel
  • فریمورک PHP
  • MVC
  • Eloquent ORM
  • Blade
  • Migration
  • Artisan
٪۴۱
دوره اختصاصی INZIP

دورهٔ جامع HTML از صفر

آموزش حرفه ای HTML از صفر در ۱۶ ویدیو: سند، متن، لینک، تصویر، جدول، فرم، معنایی‌سازی، دسترس‌پذیری و سئو، تا پروژهٔ کامل صفحهٔ فروشگاه محصول.

تماشای آنلاین + دانلود دسترسی آنی و همیشگی به‌روزرسانی رایگان کیفیت Full HD
۹۹۰,۰۰۰ تومان ۵۹۰,۰۰۰ تومان سود شما ۴۰۰,۰۰۰ تومان
مشاهده سریال