| کانال توسعه‌دهندگان لاراول |
1.61K subscribers
54 photos
114 links
⭕️ کانال توسعه‌دهندگان لاراول دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
❇️ و laravel herd الان در ویندوز :)

الان میتونید وارد سایت herd شده و نسخه ویندوزی laravel herd رو دانلود کنید

در تصویر کامل مشخص هست که herd چیکار میکنه

آدرس :
herd.laravel.com

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
🔥7👎5👍3
🔐 پکیج Laravel Permissions یک کتابخانه مدیریت و ساماندهی کاربران بر اساس سطوح و درجات کاربری است و اعطای مجوز به کاربران و سلب مجوز از آن‌ها را به آسانی وارد اکوسیستم لاراول می‌کند.

😊 برای درک راحت‌تر ساختار آشنای این پکیج در دنیای لاراول می‌توانید به نمونه‌کد زیر نگاه کنید:
// افزودن دسترسی به صورت مستقیم به کاربر
$user->givePermissionTo('edit articles');

// افزودن دسترسی با نقش به کاربر
$user->assignRole('writer');
$role->givePermissionTo('edit articles');

// بررسی داشتن دسترسی
$user->can('edit articles');


💎 Channel: @DevelopixLaravel
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
⭕️ آموزش‌های عمومی PHP

💠 در این سری از آموزش‌های زبان PHP به موارد عمومی این زبان از جمله Enum ها و Closure ها و Arrow Function ها و سایر موارد مرتبط با زبان PHP پرداخته شده است.
👍5🔥3
معرفی پکیج Share Error در لاراول

پکیج Share Error به شما امکان می‌دهد به راحتی خطاها و استثناهای رخ داده در برنامه لاراولی خود را با دیگران به اشتراک بگذارید. این پکیج کمک می‌کند تا اطلاعات خطاها را به صورت کارآمدتر مدیریت کنند و سریع‌تر به حل مشکلات برسید.

ویژگی‌ها و مزایای پکیج Share Error

1. اشتراک‌گذاری آسان خطاها:
این پکیج به شما اجازه می‌دهد تا خطاها و استثناهای رخ داده در برنامه خود را به راحتی با تیم توسعه و یا سایر افراد به اشتراک بگذارید.

2. ایجاد لینک‌های اشتراک‌گذاری:
پکیج Share Error به طور خودکار لینک‌های کوتاهی ایجاد می‌کند که حاوی اطلاعات خطا هستند. این لینک‌ها می‌توانند از طریق ایمیل، پیام‌رسان‌ها و یا هر روش دیگری به اشتراک گذاشته شوند.

3. نمایش صفحه خطای زیبا و کاربرپسند:
این پکیج یک صفحه خطای جدید و بهبودیافته به شما ارائه می‌دهد که اطلاعات کامل و دقیقی از خطای رخ داده نمایش می‌دهد. این اطلاعات شامل مسیر فایل، شماره خط، پیام خطا و سایر جزئیات مفید می‌شود.

🔹 نصب پکیج:


   composer require vendor/share-error


   php artisan vendor:publish --provider="Vendor\ShareError\ServiceProvider"


🔖 #Laravel, #PHP, #لاراول

👤 Maryam

💎 Channel: @DevelopixLaravel
👍71👎1
💢 آموزش Lifecycle Hooks در Livewire

لایو وایر یکی از فریم‌ورک‌های جذاب برای توسعه رابط‌های کاربری پویا با استفاده از Laravel است. یکی از قابلیت‌های مهم و مفید این فریم‌ورک، Lifecycle Hooks است که به شما امکان می‌دهد در زمان‌های مختلف چرخه حیات کامپوننت خود، عملیات خاصی را انجام دهید. در این مطلب، با انواع Lifecycle Hooks در Livewire و نحوه استفاده از آنها آشنا می‌شویم.

بررسی Lifecycle Hooks

متدهایی هستند که Livewire در مراحل مختلف حیات یک کامپوننت فراخوانی می‌کند. این مراحل شامل ایجاد، به‌روزرسانی، رندر شدن و تخریب کامپوننت است. با استفاده از این هوک‌ها، می‌توانید منطق خاصی را در زمان مناسب اجرا کنید.

🔖 انواع Lifecycle Hooks

در Livewire، Lifecycle Hooks به چند دسته تقسیم می‌شوند:

1. Mounting:
- mount()
- boot()
- booted()

2. Updating:
- updating($name, $value)
- updated($name, $value)

3. Rendering:
- render()

4. Destroyed:
- destroy()

📌 مثال:

برای درک بهتر نحوه استفاده از Lifecycle Hooks، یک کامپوننت ساده Livewire می‌سازیم که یک شمارنده را مدیریت می‌کند و از Lifecycle Hooks برای انجام عملیات مختلف استفاده می‌کند.

قدم 1: ایجاد کامپوننت Livewire

ابتدا یک کامپوننت Livewire با نام Counter ایجاد می‌کنیم:
php artisan make:livewire Counter


قدم 2: تعریف کامپوننت با استفاده از Lifecycle Hooks

در فایل Counter.php، متغیرها و Lifecycle Hooks مورد نیاز را تعریف می‌کنیم:
use Livewire\Component;

class Counter extends Component
{
public $count = 0;

public function mount()
{
// این متد در زمان ایجاد کامپوننت فراخوانی می‌شود
$this->count = 10; // مقدار اولیه شمارنده را تنظیم می‌کنیم
}

public function updating($name, $value)
{
// این متد قبل از به‌روزرسانی هر ویژگی کامپوننت فراخوانی می‌شود
\Log::info("Updating $name to $value");
}

public function updated($name, $value)
{
// این متد بعد از به‌روزرسانی هر ویژگی کامپوننت فراخوانی می‌شود
\Log::info("Updated $name to $value");
}

public function increment()
{
$this->count++;
}

public function render()
{
// این متد در هر بار رندر شدن کامپوننت فراخوانی می‌شود
return view('livewire.counter');
}
}


قدم 3: ایجاد ویو برای کامپوننت
در فایل counter.blade.php، ساختار HTML مورد نیاز را تعریف می‌کنیم:

<div>
<h1>Count: {{ $count }}</h1>
<button wire:click="increment">Increment</button>
</div>


📌 توضیحات
- mount():
در زمان ایجاد کامپوننت فراخوانی می‌شود و برای تنظیم مقادیر اولیه مناسب است.

- updating($name, $value):
قبل از به‌روزرسانی هر ویژگی فراخوانی می‌شود و می‌توان از آن برای لاگ کردن یا اعتبارسنجی استفاده کرد.

- updated($name, $value):
بعد از به‌روزرسانی هر ویژگی فراخوانی می‌شود و می‌توان از آن برای انجام عملیات بعد از به‌روزرسانی استفاده کرد

- render():

در هر بار رندر شدن کامپوننت فراخوانی می‌شود

🔖 #Laravel, #PHP, #لاراول

👤 Maryam

💎 Channel: @DevelopixLaravel
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73
در حال تهیه یک دوره آموزشی جامع و کامل برای فریم‌ورک قدرتمند لاراول هستیم. این دوره به صورت گام به گام و از مباحث پایه شروع شده و به تدریج به مباحث پیشرفته‌تر می‌پردازد.

این دوره مناسب برای همه، حتی کسانی که هیچ آشنایی قبلی با لاراول ندارند. تنها پیش‌نیاز این دوره، آشنایی با زبان PHP و معماری MVC است.

نظرات و پیشنهادات شما برای بهبود دوره بسیار مهم است و ما از آن‌ها استقبال می‌کنیم.

در ادامه سرفصل‌های این دوره آورده شده:

فصل 0: مقدمات
1- معرفی لاراول
2- نصب و راه‌اندازی لاراول
3- ساختار پوشه‌ها و فایل‌ها در لاراول
4- تنظیمات اولیه و محیط‌های کاری

فصل 1: Routing

1- معرفی متد های روتینگ
2- میدلورها

فصل 2: Controllers
1- ایجاد و استفاده از کنترلرها
2- متدهای کنترلر
3- کنترلرهای Resource
4- کنترلرهای API
5- ‏Dependency Injection در کنترلرها

فصل 3: Views
1- موتور قالب‌سازی Blade
2- ساختار و سینتکس Blade
3- شامل کردن ویوها و کامپوننت‌ها
4- مدیریت داده‌ها در ویوها

فصل 4: مدل‌ها و Eloquent ORM
1- معرفی Eloquent
2- تعریف مدل‌ها
3- ارتباطات بین مدل‌ها (Relations)
4- کوئری بیلدر (Query Builder)
5- ‏Accessors و Mutators
6- ‏Scopes
7- ‏Observer

فصل 5: Migrations and Database
1- تعریف و اجرای Migrationها
2- ‏Seeders و Factories
3- کار با دیتابیس‌ها و ارتباطات

فصل 6: فرم‌ها و اعتبارسنجی
1- ساخت و پردازش فرم‌ها
2- اعتبارسنجی درخواست‌ها
3- پیام‌های خطا و مدیریت آن‌ها

فصل 7: Services و Dependency Injection
1- ‏Service Container
2- سرویس‌ها و Providers
3- ‏Facades

فصل 8: امنیت (Security)
1- احراز هویت (Authentication)
2- مجوزها (Authorization)
3- رمزنگاری (Encryption)
4- جلوگیری از CSRF و XSS

فصل 9: تست و Debugging
1- معرفی ابزارهای تست لاراول
2- ‏Unit Testing
3- ‏Integration Testing
4- ‏Debugging و خطایابی

فصل 10: Optimization and Performance
1- کشینگ (Caching)
2- ‏Queues و Background Jobs
3- بهینه‌سازی کوئری‌ها
4- استفاده از Octane

فصل 11: توسعه پیشرفته
1-‏ Package Development
2- توسعه RESTful API
3- استفاده از رویدادها (Events) و Listenerها
4- مدیریت فایل‌ها و Storage

فصل 12: بررسی هسته لاراول
1- ساختار هسته لاراول
2- بررسی و توضیح کلاس‌های کلیدی
3- بررسی چرخه درخواست (Request Lifecycle)

سرفصل ها ممکن است در آینده تغییر کند و مواردی به آن اضافه شود.
لطفا هر گونه کمبود یا ایراد در سرفصل ها را در بخش کامنت ها درمیان بگذارید.

🔖 #Laravel, #PHP, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
🔥5👍42
فصل صفر - مقدمات

بخش اول - معرفی لاراول:

لاراول
یک فریم‌ورک PHP متن‌باز و قدرتمند است که برای توسعه برنامه‌های وب طراحی شده است.
لاراول از ساختار MVC پیروی می‌کند که به توسعه‌دهندگان امکان می‌دهد کدهای خود را به صورت منظم و خوانا سازماندهی کنند.
این فریم‌ورک همچنین با اصول SOLID و برنامه‌نویسی شی‌گرا (OOP) هماهنگ است، که به افزایش قابلیت نگهداری و توسعه‌پذیری کد کمک می‌کند.
این فریم‌ورک ابزارها و قابلیت‌های بسیاری را برای تسهیل فرآیند توسعه ارائه می‌دهد، از جمله:

‏Routing : سیستم مسیریابی قدرتمند برای مدیریت درخواست‌های وب.

‏Eloquent ORM : سیستم ORM پیشرفته برای تعامل با پایگاه داده به صورت شیء‌گرا.

‏Artisan Console : رابط خط فرمان برای اجرای دستورات و وظایف مختلف.

‏Middleware : مکانیزمی برای فیلتر کردن درخواست‌ها و پاسخ‌ها.

‏Queues : پشتیبانی از صف‌ها برای مدیریت کارهای پس‌زمینه.

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

------
بخش دوم - نصب و راه‌اندازی لاراول:

برای نصب و راه‌اندازی لاراول، ابتدا باید اطمینان حاصل کنید که سرور شما از نیازمندی‌های لاراول پشتیبانی می‌کند. نیازمندی‌های اصلی لاراول عبارتند از:

- PHP >= 8.2
- BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML PHP Extensions

برای نصب لاراول، می‌توانید از Composer استفاده کنید. Composer یک ابزار مدیریت وابستگی‌ها در PHP است. برای نصب Composer به سایت getcomposer.org مراجعه کرده و دستورالعمل‌های نصب را دنبال کنید.

پس از نصب Composer، می‌توانید لاراول را با استفاده از دو روش زیر نصب کنید:
composer create-project laravel/laravel myproject

یا
composer global require laravel/installer
laravel new myproject


با اجرای این دستور، یک پروژه جدید لاراول در پوشه‌ای به نام myproject ایجاد می‌شود.
پس از اتمام نصب، می‌توانید وارد پوشه پروژه شده و سرور توسعه لاراول را با دستور زیر اجرا کنید:
cd myproject
php artisan serve


سرور توسعه لاراول به صورت پیش‌فرض روی پورت 8000 اجرا می‌شود و می‌توانید با مراجعه به آدرس http://localhost:8000 برنامه خود را مشاهده کنید.

🔖 #Laravel, #PHP, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍123
فصل صفر - مقدمات

بخش سوم - ساختار پوشه‌ها در لاراول :


پروژه لاراول دارای ساختار پوشه‌ای منظم و مشخصی است. در ادامه، به توضیح مختصر هر یک از پوشه‌ها و فایل‌های مهم می‌پردازیم:

‏app/
شامل کدهای اصلی برنامه است. این پوشه شامل زیرپوشه‌های مدل‌ها (Models)، کنترلرها (Controllers)، میان‌افزارها (Middleware) و غیره می‌باشد.

‏bootstrap/
شامل فایل‌های بوت‌استرپینگ برنامه (مانند بوت کردن ServiceProviderها و MiddleWareها) و تنظیمات اولیه است.

‏config/
شامل فایل‌های تنظیمات برنامه است.

‏database/

شامل فایل‌های مرتبط با پایگاه داده مانند مایگریشن ها (Migrations)، Factory ها و Seeder ها می باشد.

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

‏resources/
شامل منابع برنامه مانند ویوها (views)، فایل‌های زبان و فایل‌های استاتیک است.

‏routes/
شامل فایل‌های مربوط به مسیریابی برنامه است.

‏storage/
شامل فایل‌های ذخیره‌سازی مانند لاگ‌ها، کش‌ها و فایل‌های آپلود شده است.

‏tests/
شامل تست‌های واحد و یکپارچه‌سازی برنامه است.

‏vendor/
شامل کتابخانه‌ها و پکیج‌های نصب شده توسط Composer است.

بخش چهارم - تنظیمات اولیه :

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

با تغییر مقدار APP_ENV می‌توانید محیط کاری را تغییر دهید. مقادیر معمول برای این متغیر عبارتند از:

‏local (توسعه)،
‏production (تولید)،
‏ staging (آزمایش)،


همچنین، می‌توانید تنظیمات خاصی را برای هر محیط در فایل‌های تنظیمات موجود در پوشه config/ مشخص کنید.

با استفاده از فایل‌های تنظیمات و ساختار پوشه‌ای منظم، لاراول به توسعه‌دهندگان امکان می‌دهد برنامه‌های وب پیچیده و قدرتمندی را به سرعت و با کیفیت بالا توسعه دهند.

🔖 #Laravel, #PHP, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍16👎32🔥2
فصل یک - Routing

بخش اول - روتینگ چیست؟


مسیریابی
(Routing) یکی از مهم‌ترین و پایه‌ای‌ترین قابلیت‌ها به شمار می‌آید که امکان مدیریت درخواست‌های ورودی به برنامه را فراهم می‌کند. مسیریابی در واقع تعیین می‌کند که درخواست‌های کاربران به کدام قسمت از برنامه ارسال شوند و چه عملیاتی روی آن‌ها انجام شود. به عبارت دیگر، مسیریابی مسئولیت اتصال URLهای مختلف به کنترلرها و اکشن‌های مشخصی را بر عهده دارد.

هر مسیر می‌تواند به یک کنترلر یا یک کلوژر اشاره کند. همچنین، امکان تعریف مسیرهای پویا با استفاده از پارامترهای مسیریابی نیز وجود دارد که این قابلیت، انعطاف‌پذیری بیشتری به برنامه می‌بخشد.

چندین فایل اصلی برای مدیریت مسیرها وجود دارد که هر کدام کاربرد خاص خود را دارند. این فایل‌ها در دایرکتوری routes قرار دارند و به شما این امکان را می‌دهند که مسیرهای مختلف برنامه خود را سازماندهی و مدیریت کنید. در ادامه توضیح مختصری از هر فایل ارائه می‌شود:

1- ‏web.php
این فایل برای تعریف مسیرهای وب استفاده می‌شود. مسیرهای تعریف شده در این فایل معمولاً به کنترلرهایی متصل می‌شوند که صفحات وب را رندر می‌کنند.
Route::get('/', function () {
return view('welcome');
});


2- ‏api.php

این فایل برای تعریف مسیرهای API استفاده می‌شود. این مسیرها معمولاً برای ارائه داده به برنامه‌های فرانت‌اند یا سایر سرویس‌ها استفاده می‌شوند.
Route::get('/', function () {
return response()->json(["hello"]);
});


3- ‏console.php
این فایل برای تعریف فرمان‌های کنسول (artisan commands) استفاده می‌شود. شما می‌توانید فرمان‌های کنسول خود را در این فایل تعریف کنید که از طریق خط فرمان قابل اجرا هستند. این فرمان‌ها به شما اجازه می‌دهند تا کارهای مختلفی مانند پاکسازی دیتابیس یا ایجاد کاربران نمونه را انجام دهید.
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->describe('Display an inspiring quote');


4- ‏channels.php
این فایل برای تعریف کانال‌های بروزرسانی لحظه‌ای (broadcasting channels) استفاده می‌شود. این کانال‌ها برای ارسال پیام‌ها و داده‌ها به صورت لحظه‌ای به مرورگرهای وب یا سایر سرویس‌ها استفاده می‌شوند. شما می‌توانید دسترسی به کانال‌ها را در این فایل کنترل کنید.
Broadcast::channel('order.{orderId}', function ($user, $orderId) {
return $user->id === Order::find($orderId)->user_id;
});


در این فصل تنها با route های web و api آشنا می شویم.

متد های Route از کلاس خاصی(Facade-فَساد) با نام Route در دسترس هستند.
use Illuminate\Support\Facades\Route;


در فساد Route متد های متعددی وجود دارد که به تمامی آنها خواهیم پرداخت. اما برخی در این فصل توضیح داده می شود و برخی دیگر در فصل های آینده.

🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
🔥74
فصل یک - Routing

بخش دوم - معرفی متد های روتینگ - قسمت اول


در این قسمت به 8 تا از پر کاربرد ترین و اصلی ترین متد های موجود در فساد Route می پردازیم:

1- متد get برای تعریف مسیری استفاده می‌شود که به درخواست‌های HTTP GET پاسخ می‌دهد. این نوع درخواست معمولاً برای دریافت اطلاعات استفاده می‌شود.
Route::get('/users', function () {
return 'List of users';
});

کد بالا به معنی این است که اگر درخواستی را با متد GET به آدرس domain.example/users بدهیم، تابع ناشناس داده شده به متد(اکشن) اجرا خواهد شد.

حال فرض کنید می‌خواهیم مسیری ایجاد کنیم که اطلاعات یک کاربر خاص را بر اساس شناسه (ID) او نمایش دهد. در این صورت، می‌توانیم از پارامترهای داینامیک استفاده کنیم:
Route::get('/user/{id}', function ($id) {
return "User ID is $id";
});

در اینجا، {id} یک پارامتر داینامیک است که می‌تواند هر مقداری باشد. این مقدار از URL استخراج شده و به تابع بسته می‌شود.
توجه داشته باشید که پارامتر id یک پارامتر اجباری است و درصورتی که در url وارد نشود route ما اجرا نخواهد شد.

برای پارامتر های اختیاری می توان به صورت زیر عمل کرد:
Route::get('/user/{id?}', function ($id = 0) {
if ($id == 0){
return "Hello!";
}
return "User ID is $id";
});

پارامتر {id?} یک پارامتر اختیاری است و حتی اگر آن را وارد نکنیم route ما اجرا خواهد شد، اما توجه داشته باشید که مقدار پیشفرض آن را در اکشن تعریف نمایید.

پارامتر های داینامیک برای تمامی متد ها در دسترس هستند.

2- متد post برای تعریف مسیری استفاده می‌شود که به درخواست‌های HTTP POST پاسخ می‌دهد. این نوع درخواست معمولاً برای ارسال داده به سرور و ایجاد منابع جدید استفاده می‌شود.

Route::post('/users', function () {
return 'User created';
});


3- متد put برای تعریف مسیری استفاده می‌شود که به درخواست‌های HTTP PUT پاسخ می‌دهد. این نوع درخواست معمولاً برای به‌روزرسانی کامل یک منبع موجود استفاده می‌شود.
Route::put('/users/{id}', function ($id) {
return 'User ' . $id . ' updated';
});


4- متد patch برای تعریف مسیری استفاده می‌شود که به درخواست‌های HTTP PATCH پاسخ می‌دهد. این نوع درخواست معمولاً برای به‌روزرسانی جزئی یک منبع موجود استفاده می‌شود.
Route::patch('/users/{id}', function ($id) {
return 'User ' . $id . ' partially updated';
});


5- متد delete برای تعریف مسیری استفاده می‌شود که به درخواست‌های HTTP DELETE پاسخ می‌دهد. این نوع درخواست معمولاً برای حذف یک منبع موجود استفاده می‌شود.
Route::delete('/users/{id}', function ($id) {
return 'User ' . $id . ' deleted';
});


6- متد options برای تعریف مسیری استفاده می‌شود که به درخواست‌های HTTP OPTIONS پاسخ می‌دهد. این نوع درخواست برای بازگشت اطلاعاتی در مورد ارتباطات مجاز برای یک منبع خاص استفاده می‌شود.
Route::options('/users', function () {
return ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
});


7- متد any برای تعریف مسیری استفاده می‌شود که به تمامی انواع درخواست‌های HTTP پاسخ می‌دهد. این نوع مسیر معمولاً برای مسیرهایی استفاده می‌شود که باید به تمامی درخواست‌ها پاسخ دهند.
Route::any('/contact', function () {
return 'Contact form';
});


8- متد match به شما اجازه می‌دهد تا یک مسیر را برای چندین نوع درخواست HTTP تعریف کنید. این متد زمانی مفید است که می‌خواهید یک مسیر خاص به چندین متد HTTP مانند GET و POST پاسخ دهد.
Route::match(['get', 'post'], '/contact', function () {
//
});

این متد برخلاف سایر متد های توضیح داده شده یک پارامتر اضافه تر حاوی آرایه ای از متدهای مجاز را در ابتدا دریافت می کند و پس از آن مانند سایر متد ها عمل میکند.

متد های بالا در فایل های web.php و api.php قابل استفاده هستند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍11🔥43
فصل یک - Routing

بخش دوم - معرفی متد های روتینگ - قسمت دوم


در ادامه معرفی متد های Routing به 9 متد دیگر از فساد Route می پردازیم. این متد ها برای اعتبارسنجی پارامتر های داینامیک دریافتی از URL، کاربرد دارند.
در ادامه هر یک از این متد ها را با مثال معرفی میکنیم:

1- متد where به شما امکان می‌دهد تا یک محدودیت سفارشی برای پارامترهای مسیر تعیین کنید. این محدودیت‌ها بر اساس یک الگوی منظم (regex) تعریف می‌شوند. به عنوان مثال، می‌توانید تعیین کنید که پارامتر id باید عددی باشد.
Route::get('user/{id}', function ($id) {
return "User ID: $id";
})->where('id', '[0-9]+');

در این مثال، پارامتر id باید فقط شامل اعداد باشد، در غیر این صورت مسیر مطابقت نمی‌کند.

2- متد whereAlpha تضمین می‌کند که پارامترهای مشخص شده فقط حروف الفبایی باشند. یعنی پارامتر مورد نظر باید فقط شامل حروف باشد و هیچ عدد یا کاراکتر دیگری نباید در آن باشد.
Route::get('user/{name}', function ($name) {
return "User Name: $name";
})->whereAlpha('name');

در این مثال، پارامتر name باید فقط شامل حروف باشد، در غیر این صورت مسیر مطابقت نمی‌کند.

3- متد whereAlphaNumeric پارامترها را محدود به حروف و اعداد می‌کند. یعنی پارامتر مورد نظر می‌تواند شامل حروف و اعداد باشد ولی هیچ کاراکتر خاصی نباید در آن باشد.
Route::get('product/{code}', function ($code) {
return "Product Code: $code";
})->whereAlphaNumeric('code');

در این مثال، پارامتر code باید فقط شامل حروف و اعداد باشد، در غیر این صورت مسیر مطابقت نمی‌کند.

4- متد whereNumber پارامترها را فقط به اعداد محدود می‌کند. یعنی پارامتر مورد نظر باید فقط شامل اعداد باشد و هیچ حرف یا کاراکتر دیگری نباید در آن باشد.
Route::get('order/{id}', function ($id) {
return "Order ID: $id";
})->whereNumber('id');

در این مثال، پارامتر id باید فقط شامل اعداد باشد، در غیر این صورت مسیر مطابقت نمی‌کند.

5- متد whereUlid پارامترها را محدود به ULID (Unique Lexicographically Sortable Identifier) می‌کند که یک نوع شناسه منحصر به فرد و مرتب شونده است.
Route::get('item/{ulid}', function ($ulid) {
return "Item ULID: $ulid";
})->whereUlid('ulid');

در این مثال، پارامتر ulid باید یک ULID معتبر باشد، در غیر این صورت مسیر مطابقت نمی‌کند.

6- متد whereUuid پارامترها را محدود به UUID (Universally Unique Identifier) می‌کند.
Route::get('user/{uuid}', function ($uuid) {
return "User UUID: $uuid";
})->whereUuid('uuid');

در این مثال، پارامتر uuid باید یک UUID معتبر باشد، در غیر این صورت مسیر مطابقت نمی‌کند.

7- متد whereIn تضمین می‌کند که پارامترها یکی از مقادیر تعیین شده باشند. یعنی پارامتر مورد نظر باید یکی از مقادیر مشخص شده در آرایه باشد.
Route::get('status/{state}', function ($state) {
return "Status: $state";
})->whereIn('state', ['active', 'inactive', 'pending']);

در این مثال، پارامتر state باید یکی از مقادیر active، inactive یا pending باشد، در غیر این صورت مسیر مطابقت نمی‌کند.

8- متد pattern برای تعیین یک الگوی پیش‌فرض برای پارامترهای مسیر بکار می رود. این متد برای تنظیم الگوها به طور کلی برای تمام مسیرها در برنامه استفاده می‌شود.
Route::pattern('slug', '[A-Za-z0-9-]+');

Route::get('post/{slug}', function ($slug) {
return "Post Slug: $slug";
});

این متد یک regex را به طور کلی برای تمامی پارامتر ها با نام slug تعیین میکند. به عبارتی در تمام مسیر ها اعمال می شود و محدود به یک مسیر نیست.

9- متد patterns مشابه متد pattern است با این تفاوت که می توانید چندین الگوی سفارشی برای چندین پارامتر به طور همزمان تعیین کنید.
Route::patterns([
'id' => '[0-9]+',
'slug' => '[A-Za-z0-9-]+',
]);

Route::get('article/{id}/{slug}', function ($id, $slug) {
return "Article ID: $id, Slug: $slug";
});

در مثال بالا یک regex برای پارامتر های id و slug تعریف شده که در تمام مسیر ها اعمال می شود و محدود به یک مسیر نیست.

این روش‌ها به شما امکان می‌دهند تا الگوهای پیش‌فرض برای پارامترهای مسیرها را تعیین کنید تا اطمینان حاصل شود که درخواست‌ها به درستی پردازش می‌شوند و از داده‌های نامعتبر جلوگیری شود.

🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍9🔥54
فصل یک - Routing

بخش دوم - معرفی متد های روتینگ - قسمت سوم


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

1- متد redirect برای ریدایرکت کردن یک URL به URL دیگر استفاده می‌شود.
Route::redirect('/from-url', '/to-url');
// OR
Route::redirect('/from-home', '/to', 301);


2- متد permanentRedirect برای ریدایرکت دائمی (کد وضعیت HTTP 301) به کار می‌رود.
Route::permanentRedirect('/from-url', '/to-url');


3- متد view برای بازگرداندن یک ویو به کار می‌رود و یک صفحه HTML را رندر می کند.
نام فایل view بدون پسوند داده می شود.
Route::view('/welcome', 'welcome');
// welcome -> resources/views/welcome.blade.php

همچنین می توانید پارامتر هایی را همراه آن ارسال کنید:
Route::view('/about', 'about', ['key' => 'value']);

در فصل های بعدی به طور مفصل درمورد view ها توضیح داده می شود.

4- متد name برای نام‌گذاری یک مسیر استفاده می‌شود که به شما امکان می‌دهد تا به سادگی به آن مسیر ارجاع دهید.
Route::get('/user/profile', $action)->name('profile');

route('profile'); // domain.example/user/profile


5- متد group برای گروه‌بندی روت‌ها و استفاده از تنظیمات مشترک بین آن‌ها به کار می‌رود.
Route::group(['prefix' => 'admin'], function () {
Route::get('/dashboard', $action);
});


6- متد domain برای تعریف روت‌های وابسته به یک دامنه خاص استفاده می‌شود.
Route::domain('api.example.com')->group(function () {
Route::get('/users', function () {
// api.example.com/users
});
// ...
});


7- متد prefix برای اضافه کردن پیشوند به یک گروه از روت‌ها به کار می‌رود.
Route::prefix('admin')->group(function () {
Route::get('/users', function () {
// domain.example/admin/users
});
// ...
});


8- متد fallback برای تعریف مسیری استفاده می‌شود که در صورتی که هیچ یک از روت‌ها مطابقت نداشته باشند، فراخوانی می‌شود.
Route::fallback(function () {
return 404;
});


9- متد current برای بازگرداندن اطلاعات مربوط به مسیر فعلی به کار می‌رود.
$currentRoute = Route::current();


10- متد currentRouteName برای بازگرداندن نام مسیر فعلی به کار می‌رود.
$routeAction = Route::currentRouteAction();


11- متد currentRouteAction برای بازگرداندن اکشن کنترلر مربوط به مسیر فعلی به کار می‌رود.
$currentRouteAction = Route::currentRouteAction();


بقیه متد های روتینگ در فصل های آینده پس از آموزش پیش نیاز ها توضیح داده می شود.

🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
8👍4🔥4
فصل یک - Routing

بخش سوم - میدلورها - قسمت اول


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

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

لاراول شامل میدلورهای متنوعی از جمله تأیید هویت و حفاظت CSRF است.

همچنین کاربر می تواند میدلور های خود را بنویسد، تمامی میدلورهای تعریف شده توسط کاربر معمولاً در مسیر app/Http/Middleware قرار می‌گیرند.

ساخت میدلور اختصاصی:

برای ساخت میدلور اختصاصی، از دستور زیر در ترمینال استفاده کنید:
php artisan make:middleware {MiddlewareName}


این دستور یک میدلور با نام داده شده در مسیر app/Http/Middleware ایجاد می‌کند.

تمامی عملیات بررسی در متد handle انجام می‌شود. می‌توانید شروطی را بر روی درخواست‌ها اعمال کنید. در صورتی که شروط برقرار باشند، متد handle میدلور بعدی را فراخوانی می‌کند و درخواست را ادامه می‌دهد. در غیر این صورت، درخواست متوقف و نتیجه تغییر خواهد کرد. مثال:
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckAge
{
public function handle(Request $request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

اگر سن کاربر کمتر یا مساوی ۱۸ باشد، به صفحه خانه هدایت می‌شود. در غیر این صورت، درخواست ادامه پیدا می‌کند.

ثبت میدلور:

برای استفاده از یک میدلور اختصاصی، ابتدا باید آن را در برنامه خود ثبت کنید. برای این کار وارد فایل bootstrap/app.php شوید و دنبال بخش زیر بگردید:
->withMiddleware(function (Middleware $middleware) {
//
})


برای ثبت میدلور جدید، می‌توانید متد append را از $middleware صدا بزنید و نام میدلور را به صورت کامل به آن پاس بدهید:
->withMiddleware(function (Middleware $middleware) {
$middleware->append(CheckAge::class);
})


همچنین می‌توانید یک نام مستعار برای میدلور خود ثبت کنید تا ساده‌تر به آن دسترسی داشته باشید:
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'age' => CheckAge::class
]);
})


با سایر متد قابل دسترس از $middleware در قسمت بعدی آشنا می شویم.

استفاده از میدلور در مسیرها:

برای اعمال یک میدلور بر روی route ها با متد جدیدی از فساد Route آشنا می شویم:
Route::get('profile', function () {
// Only executed if age > 18
})->middleware(CheckAge::class);

// Or use alias:
Route::get('profile', function () {
// Only executed if age > 18
})->middleware('age');


متد middleware یک یا چند میدلور را بر روی یک مسیر اعمال می‌کند و در صورتی که شروط میدلور برقرار باشد، مسیر اجرا خواهد شد. در مثال ما، تنها در صورتی که سن بیشتر از ۱۸ باشد، مسیر اجرا خواهد شد.

غیرفعال کردن میدلور برای مسیرها:

متد دیگری از فساد Route با نام withoutMiddleware نیز در دسترس است که میدلور های داده شده را بر روی مسیر مورد نظر اجرا نخواهد کرد:
Route::withoutMiddleware([CheckAge::class])->group(function () {
Route::get('/profile', function () {
// ...
});
});


ارسال پارامتر به میدلور
:

می‌توانید پارامترهایی را به میدلور خود اختصاص دهید:
Route::get('profile', function () {
// Only executed if age > 20
})->middleware('age:20');


پارامترهای ورودی را می‌توانید در متد handle دریافت کنید:
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckAge
{
public function handle(Request $request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}


در مثال بالا، یک میدلور داینامیک ایجاد کرده‌ایم که می‌توانیم هر سنی را به واسطه آن بررسی کنیم.

همچنین می توانید پارامتر های بیشتری را ارسال و دریافت کنید:
Route::get('profile', function () {

})->middleware('age:20,gt');


و همینطور در متد handle:
class CheckAge
{
public function handle(Request $request, Closure $next, $minAge, $type)
{
//
}
}


🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍7🔥32
⚜️ دوره لاراول - قسمت اول
📚 معرفی دوره و سرفصل ها

خلاصه :
توی این ویدیو درمورد سرفصل ها توضیح داده شده مواردی که قراره در این دوره باهم پیش بریم و یاد بگیریم رو حرف زدیم.
در ویدیو بعدی معرفی لاراول ، نحوه نصب و... یاد میگیریم.

🎞 لینک ویدیو :
https://youtu.be/NyIKBahBkmA

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
🔥83
فصل یک - Routing

بخش سوم - میدلورها - قسمت دوم


در قسمت قبل آموختیم پس از ساخت یک میدلور، باید آن را در برنامه ثبت کنیم.

برای این کار میدلور ها را در متد withMiddleware در فایل bootstrap/app.php ثبت می کردیم:
->withMiddleware(function (Middleware $middleware) {
// $middleware->
})

متد های مختلفی از متغیر $middleware برای ثبت میدلور ها در دسترس است که به بررسی آنها خواهیم پرداخت:

1- متد use
این متد استک سراسری میدلور ها را به صورت دستی تنظیم میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->use([
TrustHosts::class,
// ...
]);
})


2- متد append
این متد یک میدلور را به آخر لیست میدلور ها اضافه میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->append(TrustHosts::class);
})


3- متد prepend
این متد یک میدلور را به اول لیست میدلور ها اضافه میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->prepend(TrustHosts::class);
})


4- متد remove
این متد یک میدلور را از لیست میدلور ها حذف میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->remove(TrustHosts::class);
})


5- متد replace
این متد یک میدلور را جایگزین میدلور موجود در استک میدلور ها می کند.
->withMiddleware(function (Middleware $middleware) {
$middleware->replace(First::class, Second:class);
})


6- متد group
این متد یک گروه از چندین میدلور را ایجاد میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->group('my-group', [
TrustHosts::class,
StartSession::class,
// ...
]);
})

// Use
Route::get('/', function () {
// ...
})->middleware('my-group');


7- متد alias
این متد یک میدلور را با نام مستعار ثبت میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'permission' => Permission::class,
]);
})


8- متد api
این متد یک میدلور را به گروه پیشفرض api اضافه/حذف/جایگزین میکند.
->withMiddleware(function (Middleware $middleware) {
// append middleware
$middleware->api(append: [
StartSession::class,
]);;

// prepend middleware
$middleware->api(prepend: [
StartSession::class,
]);;

// remove middleware
$middleware->api(remove: [
StartSession::class,
]);;

// replace middleware
$middleware->api(replace: [
First::class => Second::class,
]);;
})


9- متد web
این متد یک میدلور را به گروه پیشفرض web اضافه/حذف/جایگزین میکند.
->withMiddleware(function (Middleware $middleware) {
// append middleware
$middleware->web(append: [
StartSession::class,
]);;

// prepend middleware
$middleware->web(prepend: [
StartSession::class,
]);;

// remove middleware
$middleware->web(remove: [
StartSession::class,
]);;

// replace middleware
$middleware->web(replace: [
First::class => Second::class,
]);;
})


10- متد appendToGroup
این متد یک یا چند میدلور را به آخر یک گروه اضافه میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('group-name', [
StartSession::class,
]);
})


11- متد prependToGroup
این متد یک یا چند میدلور را به اول یک گروه اضافه میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->prependToGroup('group-name', [
StartSession::class,
]);
})



12- متد removeFromGroup
این متد یک یا چند میدلور را از یک گروه حذف میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->removeFromGroup('group-name', [
StartSession::class,
]);
})


13- متد replaceInGroup
این متد یک میدلور را با میدلور دیگر در یک گروه جایگزین میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->replaceInGroup('group-name', First::class, Second::class);
})


14- متد priority
این متد اجرای میدلور ها را الویت بندی میکند.
->withMiddleware(function (Middleware $middleware) {
$middleware->priority([
First::class,
Second::class,
Third::class,
]);
})


🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍83🔥3
فصل یک - Routing

بخش چهارم - معرفی کامند های روتینگ


‏Artisan ابزار خط فرمانی است که به شما کمک می‌کند تا کارهای مختلفی را در پروژه لاراول خود انجام دهید. این کامندها به توسعه‌دهندگان اجازه می‌دهند تا به سرعت وظایف مختلفی را مانند مدیریت مسیرها، پیکربندی‌ها، و کش‌ها انجام دهند.

در این قسمت با کامند های مربوط به بخش روتینگ آشنا می شویم:

1-
php artisan install:api


در نسخه جدید لاراول مسیر های مربوط به API به طور پیش فرض وجود ندارد، اگر پروژه شما نیاز به API دارد با این دستور مسیر های API را ایجاد و پیکربندی کنید.
با اجرای این دستور فایل api.php در پوشه route برای شما ایجاد می شود.
همچنین Laravel Sanctum که یک پکیج برای احراز هویت و محافظ API ها می باشد به طور خودکار برای شما نصب می شود.

2-
php artisan route:list


این دستور لیستی از تمام مسیرهای ثبت شده در پروژه را نمایش می‌دهد. اطلاعاتی مانند HTTP Method, URL، نام مسیر و کنترلری که درخواست‌ها را مدیریت می‌کند، را نمایش می‌دهد.

3-
php artisan route:list -v


تمامی اطلاعات پیش‌فرض به علاوه جزئیات بیشتری از Action، مانند نام کنترلر و متد، و میدلورهای مورد استفاده در مسیر را نمایش می‌دهد.
اطلاعات دقیق‌تر درباره namespace و گروه‌بندی‌های اعمال شده به مسیرها نیز ممکن است نمایش داده شود.

4-
php artisan route:list -vv


تمامی اطلاعات -v به علاوه اطلاعات بیشتری درباره پارامترهای مسیر، نام‌های کامل کلاس‌ها و متدها، و جزئیات دقیق‌تر دیگری که ممکن است در مسیر استفاده شده باشند را نمایش می‌دهد.
این سطح از جزئیات می‌تواند شامل اطلاعات دقیق‌تر درباره dependency injection و هر نوع تنظیمات خاص دیگر مربوط به مسیر باشد.

5-
php artisan route:list --path=api


این کامند لیست مسیرهایی را نمایش می‌دهد که شامل رشته api در URL خود هستند. این می‌تواند برای فیلتر کردن و نمایش مسیرهای مرتبط مفید باشد.

6-
php artisan route:list --except-vendor


این کامند لیست مسیرها را به استثنای مسیرهایی که از پکیج‌های vendor آمده‌اند، نمایش می‌دهد.

7-
php artisan route:list --only-vendor


این کامند تنها مسیرهایی را نمایش می‌دهد که از پکیج‌های vendor آمده‌اند.

8-
php artisan config:publish cors


این کامند برای انتشار تنظیمات پیکربندی CORS (Cross-Origin Resource Sharing) استفاده می‌شود. این پیکربندی‌ها می‌تواند شامل تنظیمات امنیتی برای مدیریت درخواست‌های API از دامنه‌های مختلف باشد.

9-
php artisan route:cache


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

10-
php artisan route:clear


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

این کامندها به توسعه‌دهندگان کمک می‌کند تا مدیریت بهتری بر روی پروژه لاراول خود داشته باشند و به راحتی بتوانند وظایف روزمره توسعه را انجام دهند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
5🔥2👍1
فصل دو - Controllers

بخش اول - ایجاد و استفاده از کنترلرها


کنترلرها (Controllers) یکی از اجزای اصلی معماری MVC (Model-View-Controller) هستند. کنترلرها وظیفه دارند درخواست‌های ورودی را مدیریت کرده و پاسخ‌های مناسب را به سمت کاربر ارسال کنند.

تعریف کنترلرها:

کنترلرها در لاراول فایل‌هایی هستند که در پوشه app/Http/Controllers قرار می‌گیرند و شامل کلاس‌هایی هستند که مسئولیت کنترل جریان درخواست‌ها و پاسخ‌ها را بر عهده دارند. به طور کلی، کنترلرها به منظور جداسازی منطق تجاری (Business Logic) از منطق نمایش (Presentation Logic) استفاده می‌شوند.

ایجاد کنترلر:
برای ایجاد یک کنترلر در لاراول، می‌توانید از کامند Artisan استفاده کنید. به عنوان مثال:
php artisan make:controller UserController


این دستور یک کنترلر جدید به نام UserController در پوشه app/Http/Controllers ایجاد می‌کند.

انواع کنترلرها:

لاراول چندین نوع کنترلر را پشتیبانی می‌کند:

1- کنترلرهای پایه (Plain Controllers): کنترلرهای ساده‌ای که شامل متدهای مختلف برای مدیریت درخواست‌ها هستند.

2- کنترلرهای منبع (Resource Controllers): کنترلرهایی که برای عملیات CRUD (ایجاد، خواندن، به‌روزرسانی، حذف) بهینه شده‌اند. می‌توانید با استفاده از دستور زیر یک کنترلر منبع ایجاد کنید:
php artisan make:controller UserController --resource


این کنترلر شامل 7 متد پیشفرض است:
namespace App\Http\Controllers;

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

class UserController extends Controller
{
public function index()
{
// show users list
}

public function create()
{
// show create form
}

public function store(Request $request)
{
// store user data
}

public function show($id)
{
// show user data
}

public function edit($id)
{
// show edit form
}

public function update(Request $request, $id)
{
// update user data
}

public function destroy($id)
{
// delete user
}
}


3- کنترلرهای قابل توزیع (Singleton Controllers): کنترلرهایی که تنها یک نمونه از آن‌ها در طول عمر درخواست ایجاد می‌شود.
php artisan make:controller SingletonController --invokable


نمونه کنترلر برای انجام یک عملیات:
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SingletonController extends Controller
{
public function __invoke()
{
//
}
}


مسیر دهی کنترلرها در روتینگ

برای اتصال یک route به کنترلر روش های متنوعی وجود دارد که در ادامه بررسی خواهیم کرد:
1-
Route::get("/users", "app\Http\Controllers\UserController@index");


در مثال بالا پارامتر دوم به متد index از کنترلر UserController اشاره دارد.
ابتدا نام کامل کنترلر سپس @ و بعد نام متد.

2-
use app\Http\Controllers\UserController;
Route::get("/users", [UserController::class, 'index']);


روش بالا یک روش دیگر برای فراخوانی یک متد از کنترلر است، به این صورت که در یک آرایه، اندیس صفر برابر کلاس کنترلر و اندیس یک برابر نام متد.

برای فراخوانی کنترلر های resource میتوانید از متد دیگری از فساد Route استفاده کنید.
Route::resource('users', UserController::class);


این متد به صورت خودکار 7 متد کنترلر را مسیردهی می کند.

همچنین متد دیگری از فساد Route برای کنترلر ها در دسترس است:
Route::controller(UserController::class)->group(function(){
Route::get("/users", 'index');
});


در روش بالا یک گروه برای یک کنترلر ایجاد می کنید و پس از آن تنها نام متد کنترلر را به عنوان اکشن وارد می کنید.

🔖 #Laravel, #PHP, #لاراول, #فصل_۲

👤 AmirHossein

💎 Channel: @DevelopixLaravel
2👍2🔥2
⚜️ دوره لاراول - قسمت دوم
📚 معرفی لاراول ، نصب و راه اندازی

خلاصه :
توی این ویدیو درمورد خود لاراول و نصب و راه اندازی توضیح داده شده. لاراول رو از طریق دو روش composer و laravel installer نصب کردیم.
در ویدیو بعدی به استراکچر کلی و سیستم روتینگ میپردازیم.

🎞 لینک ویدیو :
https://youtu.be/mM57r5fQu-E

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
👍92🔥2
فصل دو - Controllers

بخش دوم - کنترلر های API و Dependency Injection


کنترلر های API:


کنترلرهای API به‌طور خاص برای مدیریت درخواست‌های API استفاده می‌شوند. در اینجا توضیحاتی درباره کنترلرهای API در لاراول ارائه می‌شود:

برای ایجاد یک کنترلر API، می‌توانید از دستور زیر استفاده کنید:
php artisan make:controller Api/UserController --api



این دستور یک کنترلر جدید در مسیر app/Http/Controllers/Api ایجاد می‌کند که شامل متدهای پایه‌ای مانند index, store, show, update و destroy می‌شود.

برای دسترسی به متدهای کنترلر API، باید مسیرهای مناسب را تعریف کنید. در فایل routes/api.php، می‌توانید مسیرها را به صورت زیر تعریف کنید:

برای تعریف این مسیر ها از متد جدیدی از فساد Route استفاده می کنیم:
use App\Http\Controllers\Api\MyController;

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



در صورتی که فایل api.php برای شما در پوشه routes وجود ندارد با دستور زیر آن را ایجاد کنید:
php artisan install:api



تفاوت یک کنترلر API با کنترلر Resource در این است که متد های create و edit در کنترلر API وجود ندارد، زیرا در API ها نیازی به رندر کردن View نیست.

دپندنسی اینجکشن در کنترلر ها:

دپندنسی اینجکشن (Dependency Injection) یکی از اصول مهم طراحی شیءگرا است که به شما کمک می‌کند وابستگی‌های کلاس‌ها را مدیریت کنید و کد قابل تست و قابل نگهداری بنویسید. در لاراول، دپندنسی اینجکشن به سادگی با استفاده از سیستم سرویس کانتینر (Service Container) این فریمورک امکان‌پذیر است.

نکته: درمورد سرویس کانتینر و پروایدر ها در فصل های آینده به طور مفصل توضیح داده می شود.

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

فرض کنید می‌خواهیم یک کنترلر ایجاد کنیم که برای انجام عملیات‌های مربوط به یک مخزن داده (Repository) نیاز به یک سرویس دارد.

ابتدا یک اینترفیس برای مخزن داده تعریف می‌کنیم:
// app/Repositories/UserRepositoryInterface.php
namespace App\Repositories;

interface UserRepositoryInterface {
public function all();
}



سپس یک پیاده‌سازی برای این اینترفیس ایجاد می‌کنیم:
// app/Repositories/UserRepository.php
namespace App\Repositories;

use App\Models\User;

class UserRepository implements UserRepositoryInterface {
public function all() {
return User::all();
}
}



باید پیاده‌سازی مخزن را در سرویس کانتینر لاراول ثبت کنیم تا بتوانیم آن را به کنترلر تزریق کنیم. برای این کار، از یک سرویس پروایدر استفاده می‌کنیم.

می توانید با دستور زیر یک پروایدر ایجاد کنید:
php artisan make:provider RepositoryServiceProvider 



// app/Providers/RepositoryServiceProvider.php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\UserRepositoryInterface;
use App\Repositories\UserRepository;

class RepositoryServiceProvider extends ServiceProvider {
public function register() {
$this->app->bind(UserRepositoryInterface::class, UserRepository::class);
}
}



سپس این سرویس پروایدر را به لیست پروایدرهای اپلیکیشن اضافه می‌کنیم:

// bootstrap/providers.php
return [
App\Providers\AppServiceProvider::class,
App\Providers\RepositoryServiceProvider::class,
];



حالا می‌توانیم این مخزن را به کنترلر تزریق کنیم:
// app/Http/Controllers/UserController.php
namespace App\Http\Controllers;

use App\Repositories\UserRepositoryInterface;

class UserController extends Controller {
protected $userRepository;

public function __construct(UserRepositoryInterface $userRepository) {
$this->userRepository = $userRepository;
}

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



در این مثال، کلاس UserController وابستگی خود را به UserRepositoryInterface از طریق کانستراکتور دریافت می‌کند. لاراول به صورت خودکار پیاده‌سازی صحیح را از طریق سرویس کانتینر تزریق می‌کند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۲

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍3🔥1
فصل سه - Views

بخش اول - موتور قالب‌سازی Blade


موتور قالب‌سازی Blade یک سیستم قالب‌سازی ساده و انعطاف‌پذیر است که به صورت پیش‌فرض در فریم‌ورک لاراول استفاده می‌شود. این موتور قالب‌سازی به شما امکان می‌دهد تا با استفاده از سینتکس ساده و تمیز، قالب‌های وب‌سایت خود را طراحی و مدیریت کنید. در ادامه به توضیح کامل اجزای مختلف و امکانات موتور قالب‌سازی Blade می‌پردازیم:

فایل‌های Blade با پسوند .blade.php شناخته می‌شوند و معمولاً در دایرکتوری resources/views قرار می‌گیرند. به عنوان مثال:

resources/views/welcome.blade.php



بخش دوم - ساختار و سینتکس Blade


‏Blade از سینتکس ساده‌ای برای جایگذاری داده‌ها و استفاده از دستورالعمل‌های کنترلی استفاده می‌کند.

برای نمایش داده‌ها در قالب Blade از دستور {{ }} استفاده می‌شود. به عنوان مثال:
<h1>Hello, {{ $name }}</h1>


در این مثال، مقدار متغیر $name در مکان مورد نظر جایگذاری می‌شود.

‏Blade‌‏ از دستورات کنترلی مانند شرط‌ها و حلقه‌ها پشتیبانی می‌کند.

برای استفاده از شرط‌ها از دستور @if و @endif استفاده می‌شود:
@if ($age >= 18)
<p>Adult</p>
@else
<p>Child</p>
@endif


همچنین می توان به همین صورت از حلقه ها نیست استفاده کرد:
@foreach ($users as $user)
<p>{{ $user->name }}</p>
@endforeach

@for($i = 0; $i <= 10; $i++)
<p>{{ $i }}</p>
@endfor

@while (true)
<p>I'm looping forever.</p>
@endwhile


‏Blade امکان وراثت قالب‌ها را نیز فراهم می‌کند. این ویژگی به شما امکان می‌دهد تا یک ساختار پایه برای قالب‌های خود تعریف کنید و قالب‌های دیگر را از آن به ارث ببرید.

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

شما می‌توانید داده‌هایی را که در تمام قالب‌ها به صورت مشترک استفاده می‌شوند، از طریق Service Provider ها به اشتراک بگذارید.
// app/Providers/AppServiceProvider.php
public function boot()
{
View::share('key', 'value');
}

// view.blade.php
<p>{{ $key }}</p>


از شرط‌های پیچیده و حلقه‌ها نیز پشتیبانی می‌کند. به عنوان مثال، شما می‌توانید از حلقه‌های تو در تو استفاده کنید:
@foreach ($users as $user)
<h2>{{ $user->name }}</h2>
@foreach ($user->posts as $post)
<p>{{ $post->title }}</p>
@endforeach
@endforeach


نکته : در این قسمت صرفا با ساختار و کاربرد های Blade آشنا شدیم، و در قسمت های بعدی با تمام دستورات Blade، ارث بری قالب ها، ایجاد کامپوننت ها و همچنین ایجاد دستورات Blade سفارشی آشنا می شویم.

موتور قالب‌سازی Blade یک ابزار قدرتمند و انعطاف‌پذیر برای مدیریت قالب‌های وب‌سایت‌ها در فریم‌ورک لاراول است. با استفاده از سینتکس ساده و قابلیت‌های گسترده‌ای که ارائه می‌دهد، می‌توانید قالب‌های پویا و قابل توسعه‌ای ایجاد کنید.

🔖 #Laravel, #PHP, #لاراول, #فصل_۳

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍2🔥21