پروژه 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 فریمورک کاملی است که با ابزارهای قدرتمند، توسعه وب را سریع و لذتبخش میکند. با یادگیری مفاهیم پایه آن، میتوانید پروژههای حرفهای بسازید.
٪۴۱
دوره اختصاصی INZIP
آموزش حرفه ای HTML از صفر در ۱۶ ویدیو: سند، متن، لینک، تصویر، جدول، فرم، معناییسازی، دسترسپذیری و سئو، تا پروژهٔ کامل صفحهٔ فروشگاه محصول.
تماشای آنلاین + دانلود
دسترسی آنی و همیشگی
بهروزرسانی رایگان
کیفیت Full HD
۹۹۰,۰۰۰ تومان
۵۹۰,۰۰۰ تومان
سود شما ۴۰۰,۰۰۰ تومان
مشاهده سریال