کار با کنترلرها

در لاراول، کنترلرها (Controllers) کلاس‌هایی هستند که مسئول پردازش درخواست‌های ورودی و بازگرداندن پاسخ مناسب به کاربر می‌باشند. استفاده از کنترلرها به شما این امکان را می‌دهد که منطق برنامه را از فایل‌های مسیریابی (routes) جدا کرده و ساختار کد را سازمان‌دهی کنید.
یکی از سه عنصر اصلی الگوی طراحی MVC کنترلرها هستند. در فایلrouting.php میتوانیم درخواستها را به یک کنترلر و اکشن خاصی ارسال کنیم به طور مثالآ ادرس

http://www.example.com/user/5


در مثال زیر یک مسیر به کنترلر UserController و اکشن showProfile هدایت میکند.


Route::get('user/{id}', [UserController::class, 'showProfile']);

🛠️ ایجاد کنترلر در لاراول

برای ایجاد یک کنترلر جدید، می‌توانید از دستور Artisan زیر استفاده کنید:

php artisan make:controller UserController

این دستور یک فایل کنترلر با نام UserController.php در مسیر app/Http/Controllers ایجاد می‌کند. در داخل این فایل، می‌توانید متدهایی برای پردازش درخواست‌های مختلف تعریف کنید:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
public function index()
{
return 'لیست کاربران';
}
}


مثال :

  1. تعریف یک کنترلر که دارای دو اکشن sum , sub است که دو ورودی دریافت کرده و نتیجه تفریق یا جمع انها را بازمیگرداند

namespace App\Http\Controllers;

class calcController extends Controller

{

function sum(float $num1,float $num2){

return $num1+$num2;

}

function sub(float $num1,float $num2){

return $num1-$num2;

}

}

2.ایجاد یک روتر :

در روتر زیر دو پارامتر num1,num2 از طریق متد get دریافت میشود و سپس اکشن sum از کنترلر calcController فراخوانی میشود

Route::get('/sum/{num1}/{num2}', [calcController::class, 'sum'])

در روتر زیر دو پارامتر num1,num2 از طریق متد get دریافت میشود و سپس اکشن sub از کنترلر calcController فراخوانی میشود

Route::get('/sub/{num1}/{num2}', [calcController::class, 'sub'])

3.فیلتر کردن ورودی ها:

ممکن از موارد دریافتی از url عدد نباشند بنابراین باید از عدد بودن انها اطمینان حاصل کنیم

Route::get('/sum/{num1}/{num2}', [calcController::class, 'sum'])->whereNumber(['num1','num2']);

Route::get('/sub/{num1}/{num2}', [calcController::class, 'sub'])->whereNumber('num1')->whereNumber('num2');


🔄 استفاده از کنترلر در فایل مسیرها (routes)

برای ارتباط مسیرها با کنترلرها، می‌توانید از متد Route::resource استفاده کنید:

ساخت کنترلر کاربر با 7 متد پیش فرض

php artisan make:controller UserController --recource

use App\Http\Controllers\UserController;

Route::resource('users', UserController::class);

این دستور به‌صورت خودکار مسیرهای زیر را برای عملیات‌های مختلف ایجاد می‌کند:

متدURIمتد کنترلرنام مسیر
GET/postsindexposts.index
GET/posts/createcreateposts.create
POST/postsstoreposts.store
GET/posts/{post}showposts.show
GET/posts/{post}/editeditposts.edit
PUT/posts/{post}updateposts.update
DELETE/posts/{post}destroyposts.destroy

محدود کردن متدها

Route::resource('users', UserController::class)->only([
'index', 'show', 'store'
]);

حذف متدهای خاص

Route::resource('users', UserController::class)->except([
'create', 'edit', 'destroy'
]);

تغییر نام پارامتر

Route::resource('users', UserController::class)->parameters([
'users' => 'member'
]);
// حالا URIها به شکل /users/{member} خواهند بود

تغییر نام مسیرها

Route::resource('users', UserController::class)->names([
'index' => 'users.list',
'show' => 'users.view'
]);

برای مشاهده مسیرهای ایجاد شده می‌توانید از دستور استفاده کنید:

php artisan route:list

استفاده با Route::apiResource

برای APIها می‌توانید از apiResource استفاده کنید که مسیرهای create و edit را ایجاد نمی‌کند زیرا در Api نیازی به ایجاد و نمایش فرم نداریم و کار از طریق json انجام میشود(فرم در کلاینت وجود دارد)

php artisan make:controller UserController --api

Route::apiResource('users', UserController::class);

🧩 کنترلرهای تک‌عملیاتی (Single Action Controllers)

اگر کنترلری فقط یک متد دارد، می‌توانید از کنترلرهای تک‌عملیاتی استفاده کنید:

php artisan make:controller ShowUser --invokable

این دستور یک کنترلر با متد __invoke ایجاد می‌کند که می‌توانید از آن در مسیرها استفاده کنید:

use App\Http\Controllers\ShowUser;

Route::get('user/{id}', ShowUser::class);

🧩 تزریق وابستگی‌ها (Dependency Injection) در کنترلرها

لاراول از Service Container برای تزریق وابستگی‌ها به کنترلرها استفاده می‌کند. می‌توانید وابستگی‌ها را در سازنده کنترلر یا متدهای آن تعریف کنید:

تزریق وابستگی در سازنده:

namespace App\Http\Controllers;

use App\Repositories\UserRepository;

class UserController extends Controller
{
public function __construct(UserRepository $userRepo)
{
$this->userRepo = $userRepo;
}

public function index()
{
$users = $this->userRepo->getAllUsers();
return view('users.index', compact('users'));
}
}

تزریق وابستگی در متد:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
public function store(Request $request)
{
// ذخیره‌سازی کاربر جدید
}
}

مدل mvc

الگوی معماری MVC (Model-View-Controller) یک الگوی طراحی نرم‌افزاری است که برای ساختاردهی برنامه‌های کاربردی به‌ویژه در توسعه وب استفاده می‌شود. این الگو برنامه را به سه بخش اصلی تقسیم می‌کند که هرکدام مسئولیت‌های خاص خود را دارند:کدیتی+2تحت توسعه+2itroz+2کدیتی+1تحت توسعه+1

🧩 اجزای معماری MVC

  1. مدل (Model)
    مدل مسئول مدیریت داده‌ها و منطق کسب‌وکار است. این بخش با پایگاه داده در ارتباط است و وظیفه ذخیره و بازیابی داده‌ها را بر عهده دارد. مدل هیچ اطلاعی درباره رابط کاربری ندارد و تنها بر روی داده‌ها و منطق تمرکز می‌کند.

  2. نما (View)
    نما بخش رابط کاربری برنامه است. این بخش اطلاعات را از مدل دریافت کرده و آن‌ها را به صورت قابل مشاهده به کاربر نمایش می‌دهد. نما تنها وظیفه نمایش داده‌ها را دارد و نباید هیچ منطق کسب‌وکار در آن قرار داشته باشد.

  3. کنترل‌گر (Controller)
    کنترل‌گر مسئول واکنش به درخواست‌های کاربر و تعامل بین مدل و نما است. کنترل‌گر ورودی‌های کاربر را پردازش می‌کند، با مدل تعامل دارد و نتیجه را به نما ارسال می‌کند. به عبارت دیگر، کنترل‌گر مغز متفکر برنامه است که بین مدل و نما پل می‌زند.

میان‌افزار (Middleware)

در لاراول، میان‌افزار (Middleware) یک لایه واسط است که بین درخواست HTTP و پاسخ آن قرار می‌گیرد و به شما این امکان را می‌دهد که منطق‌هایی مانند احراز هویت، محدودیت دسترسی، مدیریت نشست‌ها، و اعتبارسنجی CSRF را به راحتی پیاده‌سازی کنید.

انواع میان‌افزارها در لاراول

  1. میان‌افزار سراسری (Global Middleware)
    این میان‌افزار برای هر درخواست HTTP در برنامه اجرا می‌شود. برای اضافه کردن آن، باید کلاس میان‌افزار را در آرایه $middleware در فایل app/Http/Kernel.php ثبت کنید.

  2. میان‌افزار مسیر (Route Middleware)
    این میان‌افزارها به مسیرهای خاصی اختصاص داده می‌شوند. برای استفاده از آن‌ها، ابتدا باید در آرایه $routeMiddleware در Kernel.php تعریف شوند و سپس با استفاده از متد middleware به مسیرها اختصاص یابند.

  3. گروه‌های میان‌افزار (Middleware Groups)
    لاراول به‌صورت پیش‌فرض دو گروه میان‌افزار web و api را ارائه می‌دهد که می‌توانید آن‌ها را در آرایه $middlewareGroups در Kernel.php مشاهده و مدیریت کنید.

  4. اولویت‌بندی میان‌افزارها (Middleware Priority)

  5. در مواقعی که ترتیب اجرای میان‌افزارها اهمیت دارد، می‌توانید با استفاده از آرایه $middlewarePriority در Kernel.php ترتیب اجرای آن‌ها را مشخص کنید.

    مثال

    برای ایجاد یک میان‌افزار سفارشی، از دستور Artisan زیر استفاده کنید:

php artisan make:middleware CheckAge

سپس در متد handle این کلاس، منطق مورد نظر را پیاده‌سازی کنید:

public function handle($request, Closure $next)
{
if (auth()->user()->age < 18) {
return redirect('home');
}

return $next($request);
}

برای استفاده از این میان‌افزار، آن را در آرایه $routeMiddleware در Kernel.php ثبت کرده و سپس به مسیرها اختصاص دهید:

Route::get('/profile', function () {
// ...
})->middleware('checkAge');

مسیریابی در لاراول

فهرست

  • مفاهیم پایه مسیریابی
  • استفاده از چند متد مسیریابی بصورت همزمان
  • انتقال به سایر مسیر ها
  • انتقال به یک view
  • مسیریابی با پرامتر
  • مسیریابی با پارمتر اختیاری
  • اعتبارسنجی پارامترها در مسیریابی
    • whereNumber
    • whereAlpha
    • whereAlphaNumberic
    • whereIn
    • where
  • نامگذاری برای مسیرها
  • گروهبندی مسیرها
  • مسیرهای خطا
  • مشاهده لیست مسیرها
  • کش کردن مسیرها

(Routing) به فرآیند هدایت درخواست‌های کاربر به منابع مناسب در سرور را مسیر دهی می گویند بعنوان مثال کاربر می‌خواهد مشخصات یک محصول را مشاهده کند

http://local/product/12

در لاراول، مفهوم مسیردهی (Routing) به شما این امکان را می‌دهد که درخواست‌های ورودی (URLها) را به کنترلرها یا نمای (View)های مناسب هدایت کنید یا دستورات مناسب را بر اساس مسیر اجرا کنید

  • اجرای یک تابع
  • اجرای یک متد از controller
  • نمایش یک view

متدهای route

با استفاده از متدهای زیر میتونیم مسیر های دلخواه را از کاربر دریافت کنیم

برای دریافت اطلاعات از url استفاده میشودroute::get($uri,$callback)
برای ایجاد اطلاعات از post استفاده میشودroute::post($uri,$callback)
برای بروزرسانی اطلاعات استفاده میشودroute::put($uri,$callback)
برای بروزرسانی اطلاعات استفاده میشودroute::patch($uri,$callback)
برای حذف اطلاعات استفاده میشودroute::delete($uri,$callback)
برای دریافت اطلاعات بیشتر درباره یک روت مشخص استفاده میشودroute::options($uri,$callback)

انواع مسیر دهی در لاراول

1. مسیردهی ساده ،نمایش یک view مشخص برای تعریف یک مسیر ساده، می‌توان از متدهای HTTP مانند get، post، put، delete و patch استفاده کرد:

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

در این مثال، درخواست مسیر /about به نمای about.blade.php هدایت می‌شود.

2. مسیردهی با پارامتر

برای دریافت پارامتر از URL، می‌توان از متغیرهای درون آکولاد استفاده کرد:

Route::get('/user/{id}', function ($id) {
return 'User ' . $id;
});

در این مثال، مقدار id از URL استخراج شده و در متغیر $id قرار می‌گیرد.

2.1.فیلتر کردن پارامترها

برای فیلتر کردن میتوانیم از where استفاده کنیم

  • whereNumber بررسی میکند ورودی مورد نظر تنها عدد باشد
  • WhereAlpha بررسی میکند ورودی مورد نظر رشته باشد
  • whereAlphaNumeric هم عدد و هم رشته باشد
  • where از عبارت regx استفاده میکند

مثال:

Route::get('/user/{id}', function ($id) {
return 'User ' . $id;
})->whereNumber('id')

مثال:در درخواست ارسالی id باید عددی باشد و message رشته ای

Route::get('/user/{id}/message/{string}', function ($id,$string) {
return 'User :' . $id.'message:'.$string;
})->whereNumber('id')->WhereAlpha ('string')

مثال:در درخواست ارسالی نام کاربری فقط حروف کوچک و بزرگ باشد

Route::get('/user/{userName}',function($userName){
//
})->where('userName',[a-Z]+)

مثال:ایجاد محدودیت برای زبان و شناسه درخواستی

Route::get('/{lang}/page/{id}',function($lang,$id){
//
})->where(['lang'=>'[a-z]{2}','id'=>'\d{4,}')

مثال: امکان تکرار هر کراکتر حتی / داخل درخواست

Route::get('/search/{search}',function($search){
return($search)
})->where(['search'=>'.+')

3.مسیردهی به کنترلر:اجرای یک متد از یک کنترولر

برای هدایت درخواست‌ها به متدهای کنترلر، استفاده می شود

Route::get('/posts', [PostController::class, 'index']);

در اینجا، درخواست مسیر /posts به متد index در PostController هدایت می‌شود.

4.مسیردهی با نام (Named Routes)

برای نام‌گذاری مسیرها و استفاده از آن‌ها در سایر بخش‌های برنامه، می‌توان از متد name استفاده کرد:

4.1. جلوگیری از تکرار URLها در کد (DRY Principle)

به جای استفاده مستقیم از آدرس‌ها در چندین بخش برنامه (مثل لینک‌ها، ریدایرکتها و ...)، از نام مسیر استفاده می‌کنیم تا اگر URL تغییر کرد، فقط نیاز به اصلاح در یک مکان باشد.

بدون Named Route (مشکل تکرار و خطا):اگر /post را تغییر دهیم باید در تمام لینک ها تغییر ایجاد کنیم

نمایش پست

با Named Route (کد تمیز و قابل مدیریت):در صورت نیتز به تغییر تنها روت را تغییر میدهیم

Route::get('/posts/{slug}', [PostController::class, 'show'])->name('posts.show');
نمایش پست

4.2. ریدایرکت‌های آسان (Redirects)

می‌توانید به جای آدرس‌دهی مستقیم، از نام مسیر برای ریدایرکت استفاده کنید.

return redirect()->route('profile', ['id' => 1]);

برای تولید URL مربوط به این مسیر، می‌توان از تابع route استفاده کرد:

4.3. استفاده در فرم‌ها (Form Actions)

Route::post('/posts', [PostController::class, 'store'])->name('posts.store');


@csrf

ذخیره

5.مسیردهی در کنترلرها (Controller Routes)

return redirect()->route('dashboard');

6. مسیردهی با گروه‌بندی

برای گروه‌بندی مسیرها با ویژگی‌های مشترک مانند پیشوند URL، نام مشترک یا میانه‌افزار (Middleware)، می‌توان از متد prefix، name و middleware استفاده کرد:

مثال: تمامی مسیرهای داخل گروه با پیشوند /admin خواهند بود.

Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
// ...
});
});

7.مسیردهی پیش‌فرض (Fallback Routes)

برای تعریف مسیری که در صورت عدم تطابق سایر مسیرها با درخواست، اجرا شود، می‌توان از متد fallback استفاده کرد:

Route::fallback(function () {
return view('404');
});

این مسیر باید آخرین مسیر تعریف‌شده باشد تا در صورت عدم تطابق سایر مسیرها، اجرا شود.

8.مسیریابی که شامل چندین روت همزمان باشد

Route دارای متدی به نام matchهست که می توانیم چندنوع درخواستhttp را به یک مسیر مجاز کنیم در مثال زیر مسیر هر دونوع درخواست GETوPOSTراقبول میکند:


Route::match(['get', 'post'], '/', function()
{
return 'Hello World';
});

9.مسیریابی که شامل همه روت همزمان باشد
در صورتیکه بخواهیم همه خواستها راقبول کنید از متد any استفاده میکنیم مثال http://www.example.com/foo هر درخواستی را قبول میکند:


Route::any('foo', function()
{
return 'Hello World';
});

9.1.مسیریابی انتقال

برای انتقال یک درخواست به مسیر دیگر از redirect استفاده می شود

Route::redirect('/home','/')

مسیر / را به مسیر /home تغییر میدهد

9.2.مسیریابی به یک view

Route::view('/contact','contact')

با مراجعه به مسیر contact/ ویوی contact نمایش داده میشود

9.3.ارسال پارامتر به view

Route::view('/contact','contact',['userId'=>'258'])

در جدول زیر، مهم‌ترین متدها و کاربردهای کلاس Route در لاراول نمایش داده شده است:

متد/ویژگینحوه استفادهکاربردمثال
مسیرهای پایه
get()Route::get(uri, callback)تعریف مسیر GETRoute::get('/users', fn() => 'Users List')
post()Route::post(uri, callback)تعریف مسیر POSTRoute::post('/users', [UserController::class, 'store'])
any()Route::any(uri, callback)پاسخ به همه متدهای HTTPRoute::any('/contact', ContactController::class)
match()Route::match(methods, uri, callback)پاسخ به چند متد خاصRoute::match(['get', 'post'], '/login', [AuthController::class, 'login'])
مسیرهای Resource
resource()Route::resource(uri, controller)ایجاد تمام مسیرهای CRUDRoute::resource('users', UserController::class)
apiResource()Route::apiResource(uri, controller)ایجاد مسیرهای API (بدون create/edit)Route::apiResource('posts', PostController::class)
نام‌گذاری مسیرها
name()Route::...->name('route.name')اختصاص نام به مسیرRoute::get('/profile', fn() => ...)->name('profile')
محدودیت‌ها
where()Route::...->where('param', 'regex')اعتبارسنجی پارامترهاRoute::get('/user/{id}', ...)->where('id', '[0-9]+')
middleware()Route::...->middleware('middleware')اعمال میدلورRoute::get('/admin', ...)->middleware('auth')
پیشوند و گروه‌بندی
prefix()Route::prefix('admin')->group(...)اضافه کردن پیشوند به URIRoute::prefix('api')->group(...)
group()Route::group([options], callback)گروه‌بندی مسیرهاRoute::group(['middleware' => 'auth'], fn() => { ... })
Route Model Binding
مدل در پارامترRoute::get('/users/{user}', ...)تزریق خودکار مدلRoute::get('/users/{user}', fn(User $user) => ...)
متدهای کمکی
view()Route::view(uri, view, [data])بازگرداندن view بدون کنترلرRoute::view('/welcome', 'welcome')
redirect()Route::redirect(from, to, status)ریدایرکتRoute::redirect('/here', '/there')
permanentRedirect()Route::permanentRedirect(from, to)ریدایرکت دائم (301)Route::permanentRedirect('/old', '/new')

پیکربندی در پوشه config/

📁 config/app.php

  • تنظیمات کلی برنامه مانند:

    • نام برنامه (APP_NAME)

    • ناحیه زمانی (timezone) موقعیت زمانی را مشخص می کنیم که برای مثال در کشور ایرانAsia/Tehranست می کنیم

    • زبان پیش‌فرض (locale) در مسیرresources/langمی توانیم یک پوشه دیگر به نامfaایجاد کرده تا در آن پیغام ها و متون فارسی را تایپ کنیم تا در برنامه از آنها استفاده کنیم. به طور مثال یک کاربرد آن در فارسی سازی پیغام های اعتبارسنجی فرم ها می باشد. مقدار این آیتم راfaکه همنام آن پوشه که ایجاد کردیم ست میکنیم

    • سرویس‌ دهندگان (providers) و aliasها

📁 config/auth.php

  • تنظیمات احراز هویت:

    • guardها (مثل web و api)

    • provider کاربران

    • مدل User (مثلاً: App\Models\User)

📁 config/cache.php

  • تنظیمات کش (Cache):

    • نوع کش (file, redis, database)

    • مسیر ذخیره فایل‌های کش در صورت استفاده از file

📁 config/database.php

  • تنظیمات پایگاه داده:

    • اتصال به MySQL, SQLite, PostgreSQL, SQL Server

    • تنظیمات Redis (برای کش یا صف‌ها)

📁 config/filesystems.php

  • مدیریت فایل‌ها و دیسک‌ها:

    • تعریف دیسک‌های local، public، s3

    • تنظیمات آدرس‌ها و مسیرهای ذخیره‌سازی فایل‌ها

📁 config/logging.php

  • تنظیمات لاگ:

    • نوع لاگر (single, daily, stack, syslog)

    • مسیر لاگ‌ها

    • سطح لاگ (debug, error, info, ...)

📁 config/mail.php

  • تنظیمات ارسال ایمیل:

    • سرویس‌دهنده (SMTP، Mailgun، SES)

    • پورت، نام فرستنده، احراز هویت

📁 config/queue.php

  • تنظیمات صف‌ها:

    • درایور (sync, database, redis, beanstalkd, sqs)

    • اتصال به Redis یا پایگاه داده برای مدیریت صف

📁 config/services.php

  • کلیدها و APIهای سرویس‌های خارجی:

    • Mailgun، Stripe، Slack، AWS و غیره

    • اغلب از فایل .env خوانده می‌شوند

📁 config/session.php

  • تنظیمات مربوط به نشست کاربر:

    • نوع ذخیره‌سازی (file, cookie, database, redis)

    • زمان انقضا، رمزنگاری، دامنه‌ها

پیکره بندی فایل .env

فایل .env در ریشه پروژه قرار دارد و حاوی تنظیمات محیطی است که می‌توانند در محیط‌های مختلف (محلی، تولید، تست) متفاوت باشند. برای مثال: پیکربندی محیطی با فایل .env

APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:...
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

debug:اگر مقدار آن راtrueست کنید برنامه در مدdevelopmentخواهد بود و خطاهای برنامه نشان داده می شود و اگرfalseباشد در مدproductionمی باشد و مناسب برایpublishو استفاده نهایی برنامه هست.


url:آدرسurlپروژه را در اینجا ست میکنیم مثالhttp://localhost/laravel/public :timezoneموقعیت زمانی را مشخص می کنیم که برای مثال در کشور ایرانAsia Tehranست میکنیم.


locale:در مسیرresources/langمی توانیم یک پوشه دیگر به نامfaایجاد کرده تا در آن پیغام ها و متون فارسی را تایپ کنیم تا در برنامه از آنها استفاده کنیم. به طور مثال یک کاربرد آن در فارسی سازی پیغام های اعتبارسنجی فرم ها می باشد. مقدار این آیتم راfaکه همنام آن پوشه که ایجاد کردیم ست میکنیم.


fallback_locale:در صورتی کهlocaleموردنظر برای آن رشته موجود نبود از اینlocaleاستفاده شود.


key:کلید برنامه که یک رشته تصادفی هست و در رمزنگاری های برنامه توسط الراول مورد استفاده قرار می گیرد. نحوه ست کردن آن را در پست قبلی توضیح دادم بهتراست مقدارAPP_KEYرا هم با تایپ دستور زیر در ترمینال تغییر دهیم:


php artisan key:generate

پیکره بندی لاراول

لاراول از دو مکان اصلی برای تنظیمات استفاده می‌کند:

  1. فایل .env: تنظیمات محیطی مانند پایگاه داده، کش، ایمیل و... در این فایل قرار می‌گیرند.

  2. پوشه config/: تنظیمات پیشرفته‌تر و ساختاریافته‌تر در این پوشه قرار دارند.

ساختار دایرکتوری‌های اصلی لاراول

📁 ساختار دایرکتوری‌های اصلی

app/ کدهای اصلی برنامه شما

حاوی کنترلرها، مدل‌ها، درخواست‌ها، روترها، رویدادها، دستورات Artisan و سرویس‌ها است.

زیرشاخه‌های مهم شامل Http/، Console/، Providers/ و Jobs/ هستند.

bootstrap/

شامل فایل app.php برای راه‌اندازی لاراول و پوشه cache/ برای کش‌های مختلف است.
ارتباطی با bootstrap در css ندارد

config/

شامل فایل‌های پیکربندی برای پایگاه داده، جلسات، کش، ایمیل و سایر سرویس‌ها است.

database/

شامل مهاجرت‌ها (migrations/)، کارخانه‌ها (factories/) و داده‌های اولیه (seeders/) است.

public/

شامل فایل index.php به عنوان نقطه ورود، فایل‌های CSS، JavaScript، تصاویر و فایل .htaccess است.

resources/

شامل نماها (views/)، فایل‌های زبان (lang/) و منابع خام مانند Sass، LESS و JavaScript است.

routes/

شامل فایل‌های web.php، api.php، console.php و channels.php برای تعریف مسیرهای وب، API، دستورات کنسول و کانال‌های پخش رویداد است.

storage/

شامل کش‌ها، فایل‌های لاگ، فایل‌های کامپایل‌شده Blade و فایل‌های آپلودی است.

پوشه app/public/ برای ذخیره فایل‌های عمومی مانند آواتارها استفاده می‌شود.

tests / تست‌ها

شامل تست‌های واحد (Unit/) و ویژگی‌ها (Feature/) است.

می‌توانید از PHPUnit یا Pest برای اجرای تست‌ها استفاده کنید.

vendor/ وابستگی‌ها

شامل پکیج‌های نصب‌شده از طریق Composer است.

📄 فایل‌های مهم در ریشه پروژه

.env تنظیمات محیطی مانند اطلاعات اتصال به پایگاه داده و کلیدهای API.

.gitignore فایل‌هایی که نباید در کنترل نسخه Git قرار گیرند.

artisan دستورات خط فرمان لاراول.

composer.json تعریف وابستگی‌ها و پیکربندی‌های Composer.

phpunit.xml پیکربندی PHPUnit برای تست‌ها.

webpack.mix.js پیکربندی برای کامپایل دارایی‌ها با استفاده از Laravel Mix.

نصب لاراول

نکات مربوط به نصب لاراول

  1. لاراول یک فریم ورک php است بنابراین باید در بستر php اجرا شود برای این کار میتوانیم از xamp یا wamp استفاده کنیم
  2. بهتر است بعد از نصب wamp فریم ورک را در پوشه www نصب کنیم

لاراول با پکیچ laravel/laravel در مخزن وجود دارد بنابراین میتوانیم با کامپوزر به راحتی بدون درگیر بودن برای وابستگی ها لازم ان را با دستور composer create-project laravel/laravel نام پروژه نصب کنیم

نکته :برای اجرای کامپور میتوانیم از محیط cmd ویندوز یا bash استفاده کنیم

composer create-project laravel/laravel myProject

با اجرای دستور بالا در مسیر مشخص شده یک پوشه با نامه myproject ایجاد خواهد شد و تمامی بسته های لازم در ان نصب خواهند شد

بهتر است مسیر را به www موجود در پوشه Wamp تغییر دهیم

برای اجرای برنامه از دستور زیر استفاده می کنیم

php artisan serve

ساختار پایه‌ای پکیج‌های PHP برای composer

هر پکیج PHP در اکوسیستم کامپوزر باید از این ساختار پیروی کند:

Vendor/Package

۱. Vendor Name (نام شرکت)

• نشان‌دهنده هویت منتشرکننده پکیج است
• انواع رایج:

  • نام سازمان (مثلاً laravel برای لاراول)

  • نام کاربری توسعه‌دهنده (مثلاً fzaninotto برای Faker)

  • نام دامنه معکوس (مثلاً com-github برای پکیج‌های GitHub)

۲. Package Name (نام پکیج)

• باید تنشاندهنده عملکرد پکیج باشد
• انواع متداول:

  • نام فریمورک (laravel, symfony)

  • نام عملکردی (http-client, database)

  • نام کتابخانه (monolog, phpunit)

مزایای ساختار نامگذاری Vendor/Package در پکیج‌های PHP

1. جلوگیری از تداخل نام‌ها (Name Collision Prevention)

  • مثال: دو توسعه‌دهنده می‌توانند پکیج logger بسازند:

    • monolog/monolog (کتابخانه معروف لاگینگ)

    • acme/logger (پکیج اختصاصی یک شرکت)

  • مزیت: هر پکیج با ترکیب vendor/package منحصربه‌فرد می‌شود.

2. سازماندهی سلسله‌مراتبی (Hierarchical Organization)

هر شرکت پکیچ های خود را بصورت زیرشاخه ایجاد میکند

دستور composer create-project  

این دستور برای ایجاد یک پروژه جدید بر اساس یک پکیج پایه (مثل فریمورک لاراول) استفاده می‌شود و تمام وابستگی‌ها را به صورت خودکار نصب می‌کند.

ساختار کلی دستور:

[--گزینه‌ها] [نسخه]  <نام-پوشه-مقصد> <نام-پکیج/پروژه> composer create-project   

🔹 پارامترهای اصلی:

نام-پکیج/پروژهنام پکیج پایه درPackagistlaravel/laravel
نام-پوشه-مقصدنام پوشه جدید برای پروژهmy-project
نسخهمحدوده نسخه مورد نظر (اختیاری)"11.*"

composer چیست

تعریف : composer یک ابزار برای مدیریت وابستگی پکیج ها در php است با استفاده از composer میتوانیم بسته های لازم در پروژه را تعریف کنیم تا composer انها رانصب یا برورسانی کند.
نکته: composer پکیج های لازم را در پوشه vendor پروژه ذخیره میکند
این تعریف درون فایل composer.js با فرمت زیر انجام میشود

نمونه فایل کامپوزر
{
"require": {
"guzzlehttp/guzzle": "^7.0"
}
}

چرا به کامپوزر نیاز داریم؟

1-نصب و بروز رسانی خودکار کتابخانه ها
فریمورک لاراول مجموعه ای از کتابخانه های مختلف است در صورتیکه بخواهیم هریک را بصورت دستی نصب و تنظیم نماییم کار بسیار سخت خواهد شد اما -کامپوزر براحتی تمامی کتابخانه ها را نصب و بروز رسانی میکند

2-بارگذاری خودکار کلاس‌ها (Autoloading)
قبلا از کامپوزر باید برای دسترسی به هر کلاس فایل مربوط به ان را require میکردیم اما با کامپوزر کافیست ابتدای هر فایل دستور require 'vendor/autoload.php' را بنویسیم تا در صورت نیاز کلای خودکار لود شود

✅ دیگر نیازی به require دستی نیست!

*استفاده از composer
برای استفاده از composer نیاز به یک فایل composer.js داریم تا پکیج های لازم در پروژه بهمراه وابستگی های انها را در ان درج کنیم یا میتوان از دستور composer init استفاده کرد این دستور فایل composer.js را ایجاد میکند

۱. دستورات پایه و ضروری

دستور توضیح

composer init ایجاد فایل composer.json جدید (راه‌اندازی پروژه)

composer install نصب تمام وابستگی‌های پروژه (براساس composer.lock)

composer update به‌روزرسانی تمام پکیج‌ها به آخرین نسخه سازگار

composer require نام-پکیج افزودن یک پکیج جدید به پروژه

composer remove نام-پکیج حذف یک پکیج از پروژه

composer dump-autoload به‌روزرسانی Autoloader (حل مشکلات کلاس‌ها)

۲. دستورات پیشرفته

دستور توضیح

composer create-project نام-پکیج/پروژه نصب یک پروژه آماده (مثل لاراول)

composer global require نام-پکیج نصب پکیج به صورت سراسری (مثل laravel/installer)

composer show نمایش لیست پکیج‌های نصب‌شده

composer search نام-پکیج جستجوی پکیج در Packagist

composer outdated بررسی پکیج‌های نیازمند به‌روزرسانی

composer validate بررسی صحت فایل