۱۵ اشتباه رایج مبتدیان Laravel — و راهحل در پروژه واقعی
هر اشتباه در این لیست را حداقل یکبار در pull request واقعی دیدهام — بعضی از خودم در سالهای اول. خبر خوب: Laravel ابزار اصلاح دارد؛ خبر بد: عادت غلط زود جا میافتد. اگر تازه شروع کردهاید، این متن کمک میکند همان اشتباهات پرتکرار را رد کنید.
۱. Fat Controller — همه منطق در Controller
مشکل: Controller ۳۰۰ خطی با query، mail و payment.
راهحل: Service یا Action class. Service Layer.
۲. N+1 Query
// بد
$posts = Post::all();
foreach ($posts as $post) {
echo $post->category->name;
}
// خوب
$posts = Post::with('category')->get();
جزئیات: بهینهسازی کوئری.
۳. استفاده از env() خارج از config
// بد در کلاس
$key = env('API_KEY');
// خوب — در config/services.php و سپس config('services.api.key')
۴. Mass Assignment بدون $fillable/$guarded
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}
هرگز is_admin را از request بدون کنترل قبول نکنید.
۵. فراموش کردن @csrf در فرم
خطای 419 Page Expired — همیشه در Blade فرم POST.
۶. Route closure برای منطق سنگین
برای prototype OK؛ برای production به Controller/Service بروید. Routing.
۷. Query در Blade
{{-- بد --}}
@foreach(\App\Models\Post::all() as $post)
داده از Controller یا View Composer.
۸. ignore کردن Form Request
validation در Controller شلوغ میکند — StorePostRequest بسازید.
۹. hardcode URL بهجای route()
<a href="{{ route('posts.show', $post) }}">
۱۰. migrate:fresh روی داده مهم
فقط local. production: migrate فقط.
۱۱. ذخیره رمز plain text
از Hash::make() و cast hashed در Model Laravel 10+.
۱۲. فایل upload بدون validation
mime type، size، storage خارج public — امنیت.
۱۳. sync بدون transaction برای عملیات چندجدولی
DB::transaction(function () {
// order + items + payment
});
۱۴. تست ننوشتن
حداقل feature test برای login و یک flow حیاتی.
۱۵. کپی از Stack Overflow بدون فهم
کد باید با نسخه Laravel شما سازگار باشد — docs رسمی اولویت.
چطور عادت درست بسازیم؟
قبل از کد: چکلیست شروع. در code review این ۱۵ مورد را ببینید. با Git کوچک commit کنید.
جمعبندی
اشتباه بخشی از یادگیری است؛ تکرار در production نیست. سوال دارید؟ تماس یا مقالات عمیقتر Eloquent در اجراهای بعدی.