فصل یک - Routing
بخش سوم - میدلورها
میدلورها در لاراول مکانیزمی مناسب برای بررسی و فیلتر کردن درخواستهای HTTP ورودی به برنامه شما فراهم میکنند.
به عنوان مثال، لاراول یک میدلور دارد که بررسی میکند آیا کاربر وارد سیستم شده است یا خیر. اگر کاربر وارد نشده باشد، او را به صفحه ورود هدایت میکند. اما اگر وارد شده باشد، درخواست را به مسیر بعدی هدایت میکند.
لاراول شامل میدلورهای متنوعی از جمله تأیید هویت و حفاظت CSRF است.
همچنین کاربر می تواند میدلور های خود را بنویسد، تمامی میدلورهای تعریف شده توسط کاربر معمولاً در مسیر app/Http/Middleware قرار میگیرند.
ساخت میدلور اختصاصی:
برای ساخت میدلور اختصاصی، از دستور زیر در ترمینال استفاده کنید:
این دستور یک میدلور با نام داده شده در مسیر app/Http/Middleware ایجاد میکند.
تمامی عملیات بررسی در متد handle انجام میشود. میتوانید شروطی را بر روی درخواستها اعمال کنید. در صورتی که شروط برقرار باشند، متد handle میدلور بعدی را فراخوانی میکند و درخواست را ادامه میدهد. در غیر این صورت، درخواست متوقف و نتیجه تغییر خواهد کرد. مثال:
اگر سن کاربر کمتر یا مساوی ۱۸ باشد، به صفحه خانه هدایت میشود. در غیر این صورت، درخواست ادامه پیدا میکند.
ثبت میدلور:
برای استفاده از یک میدلور اختصاصی، ابتدا باید آن را در برنامه خود ثبت کنید. برای این کار وارد فایل bootstrap/app.php شوید و دنبال بخش زیر بگردید:
برای ثبت میدلور جدید، میتوانید متد append را از $middleware صدا بزنید و نام میدلور را به صورت کامل به آن پاس بدهید:
همچنین میتوانید یک نام مستعار برای میدلور خود ثبت کنید تا سادهتر به آن دسترسی داشته باشید:
با سایر متد قابل دسترس از $middleware در قسمت بعدی آشنا می شویم.
استفاده از میدلور در مسیرها:
برای اعمال یک میدلور بر روی route ها با متد جدیدی از فساد Route آشنا می شویم:
متد middleware یک یا چند میدلور را بر روی یک مسیر اعمال میکند و در صورتی که شروط میدلور برقرار باشد، مسیر اجرا خواهد شد. در مثال ما، تنها در صورتی که سن بیشتر از ۱۸ باشد، مسیر اجرا خواهد شد.
غیرفعال کردن میدلور برای مسیرها:
متد دیگری از فساد Route با نام withoutMiddleware نیز در دسترس است که میدلور های داده شده را بر روی مسیر مورد نظر اجرا نخواهد کرد:
ارسال پارامتر به میدلور:
میتوانید پارامترهایی را به میدلور خود اختصاص دهید:
پارامترهای ورودی را میتوانید در متد handle دریافت کنید:
در مثال بالا، یک میدلور داینامیک ایجاد کردهایم که میتوانیم هر سنی را به واسطه آن بررسی کنیم.
همچنین می توانید پارامتر های بیشتری را ارسال و دریافت کنید:
و همینطور در متد handle:
#laravel #فصل_۱
@AmirhDeveloper
.
بخش سوم - میدلورها
میدلورها در لاراول مکانیزمی مناسب برای بررسی و فیلتر کردن درخواستهای 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 #فصل_۱
@AmirhDeveloper
.
فصل یک - Routing
بخش سوم - میدلورها - قسمت دوم
در قسمت قبل آموختیم پس از ساخت یک میدلور، باید آن را در برنامه ثبت کنیم.
برای این کار میدلور ها را در متد withMiddleware در فایل bootstrap/app.php ثبت می کردیم:
متد های مختلفی از متغیر $middleware برای ثبت میدلور ها در دسترس است که به بررسی آنها خواهیم پرداخت:
1- متد use
این متد استک سراسری میدلور ها را به صورت دستی تنظیم میکند.
2- متد append
این متد یک میدلور را به آخر لیست میدلور ها اضافه میکند.
3- متد prepend
این متد یک میدلور را به اول لیست میدلور ها اضافه میکند.
4- متد remove
این متد یک میدلور را از لیست میدلور ها حذف میکند.
5- متد replace
این متد یک میدلور را جایگزین میدلور موجود در استک میدلور ها می کند.
6- متد group
این متد یک گروه از چندین میدلور را ایجاد میکند.
7- متد alias
این متد یک میدلور را با نام مستعار ثبت میکند.
8- متد api
این متد یک میدلور را به گروه پیشفرض api اضافه/حذف/جایگزین میکند.
9- متد web
این متد یک میدلور را به گروه پیشفرض web اضافه/حذف/جایگزین میکند.
10- متد appendToGroup
این متد یک یا چند میدلور را به آخر یک گروه اضافه میکند.
11- متد prependToGroup
این متد یک یا چند میدلور را به اول یک گروه اضافه میکند.
12- متد removeFromGroup
این متد یک یا چند میدلور را از یک گروه حذف میکند.
13- متد replaceInGroup
این متد یک میدلور را با میدلور دیگری در یک گروه جایگزین میکند.
14- متد priority
این متد اجرای میدلور ها را الویت بندی میکند.
#laravel #فصل_۱
@AmirhDeveloper
.
بخش سوم - میدلورها - قسمت دوم
در قسمت قبل آموختیم پس از ساخت یک میدلور، باید آن را در برنامه ثبت کنیم.
برای این کار میدلور ها را در متد 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 #فصل_۱
@AmirhDeveloper
.
فصل یک - Routing
بخش چهارم - معرفی کامند های روتینگ
Artisan ابزار خط فرمانی است که به شما کمک میکند تا کارهای مختلفی را در پروژه لاراول خود انجام دهید. این کامندها به توسعهدهندگان اجازه میدهند تا به سرعت وظایف مختلفی را مانند مدیریت مسیرها، پیکربندیها، و کشها انجام دهند.
در این قسمت با کامند های مربوط به بخش روتینگ آشنا می شویم:
1-
در نسخه جدید لاراول مسیر های مربوط به API به طور پیش فرض وجود ندارد، اگر پروژه شما نیاز به API دارد با این دستور مسیر های API را ایجاد و پیکربندی کنید.
با اجرای این دستور فایل api.php در پوشه route برای شما ایجاد می شود.
همچنین Laravel Sanctum که یک پکیج برای احراز هویت و محافظ API ها می باشد به طور خودکار برای شما نصب می شود.
2-
این دستور لیستی از تمام مسیرهای ثبت شده در پروژه را نمایش میدهد. اطلاعاتی مانند HTTP Method, URL، نام مسیر و کنترلری که درخواستها را مدیریت میکند، را نمایش میدهد.
3-
تمامی اطلاعات پیشفرض به علاوه جزئیات بیشتری از Action، مانند نام کنترلر و متد، و میدلورهای مورد استفاده در مسیر را نمایش میدهد.
اطلاعات دقیقتر درباره namespace و گروهبندیهای اعمال شده به مسیرها نیز ممکن است نمایش داده شود.
4-
تمامی اطلاعات
این سطح از جزئیات میتواند شامل اطلاعات دقیقتر درباره dependency injection و هر نوع تنظیمات خاص دیگر مربوط به مسیر باشد.
5-
این کامند لیست مسیرهایی را نمایش میدهد که شامل رشته api در URL خود هستند. این میتواند برای فیلتر کردن و نمایش مسیرهای مرتبط مفید باشد.
6-
این کامند لیست مسیرها را به استثنای مسیرهایی که از پکیجهای vendor آمدهاند، نمایش میدهد.
7-
این کامند تنها مسیرهایی را نمایش میدهد که از پکیجهای vendor آمدهاند.
8-
این کامند برای انتشار تنظیمات پیکربندی CORS (Cross-Origin Resource Sharing) استفاده میشود. این پیکربندیها میتواند شامل تنظیمات امنیتی برای مدیریت درخواستهای API از دامنههای مختلف باشد.
9-
این کامند برای کش کردن (ذخیره موقت) تمامی مسیرهای ثبت شده در پروژه استفاده میشود. این کار به بهبود عملکرد برنامه کمک میکند زیرا نیاز به تحلیل دوباره مسیرها در هر درخواست کاهش مییابد.
10-
این کامند برای پاک کردن کش مسیرها استفاده میشود. بعد از اجرای این کامند، لاراول مسیرها را دوباره از نو تحلیل و ثبت میکند.
این کامندها به توسعهدهندگان کمک میکند تا مدیریت بهتری بر روی پروژه لاراول خود داشته باشند و به راحتی بتوانند وظایف روزمره توسعه را انجام دهند.
#laravel #فصل_۱
@AmirhDeveloper
.
بخش چهارم - معرفی کامند های روتینگ
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 #فصل_۱
@AmirhDeveloper
.
فصل دو - Controllers
بخش اول - ایجاد و استفاده از کنترلرها
کنترلرها (Controllers) یکی از اجزای اصلی معماری MVC (Model-View-Controller) هستند. کنترلرها وظیفه دارند درخواستهای ورودی را مدیریت کرده و پاسخهای مناسب را به سمت کاربر ارسال کنند.
تعریف کنترلرها:
کنترلرها در لاراول فایلهایی هستند که در پوشه app/Http/Controllers قرار میگیرند و شامل کلاسهایی هستند که مسئولیت کنترل جریان درخواستها و پاسخها را بر عهده دارند. به طور کلی، کنترلرها به منظور جداسازی منطق تجاری (Business Logic) از منطق نمایش (Presentation Logic) استفاده میشوند.
ایجاد کنترلر:
برای ایجاد یک کنترلر در لاراول، میتوانید از کامند Artisan استفاده کنید. به عنوان مثال:
این دستور یک کنترلر جدید به نام UserController در پوشه app/Http/Controllers ایجاد میکند.
انواع کنترلرها:
لاراول چندین نوع کنترلر را پشتیبانی میکند:
1- کنترلرهای پایه (Plain Controllers): کنترلرهای سادهای که شامل متدهای مختلف برای مدیریت درخواستها هستند.
2- کنترلرهای منبع (Resource Controllers): کنترلرهایی که برای عملیات CRUD (ایجاد، خواندن، بهروزرسانی، حذف) بهینه شدهاند. میتوانید با استفاده از دستور زیر یک کنترلر منبع ایجاد کنید:
این کنترلر شامل 7 متد پیشفرض است:
3- کنترلرهای قابل توزیع (Singleton Controllers): کنترلرهایی که تنها یک نمونه از آنها در طول عمر درخواست ایجاد میشود.
نمونه کنترلر برای انجام یک عملیات:
مسیر دهی کنترلرها در روتینگ
برای اتصال یک route به کنترلر روش های متنوعی وجود دارد که در ادامه بررسی خواهیم کرد:
1-
در مثال بالا پارامتر دوم به متد index از کنترلر UserController اشاره دارد.
ابتدا نام کامل کنترلر سپس @ و بعد نام متد.
2-
روش بالا یک روش دیگر برای فراخوانی یک متد از کنترلر است، به این صورت که در یک آرایه، اندیس صفر برابر کلاس کنترلر و اندیس یک برابر نام متد.
برای فراخوانی کنترلر های resource میتوانید از متد دیگری از فساد Route استفاده کنید.
این متد به صورت خودکار 7 متد کنترلر را مسیردهی می کند.
همچنین متد دیگری از فساد Route برای کنترلر ها در دسترس است:
در روش بالا یک گروه برای یک کنترلر ایجاد می کنید و پس از آن تنها نام متد کنترلر را به عنوان اکشن وارد می کنید.
#laravel #فصل_۲
@AmirhDeveloper
.
بخش اول - ایجاد و استفاده از کنترلرها
کنترلرها (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 #فصل_۲
@AmirhDeveloper
.
فصل دو - Controllers
بخش دوم - کنترلر های API و Dependency Injection
کنترلر های API:
کنترلرهای API بهطور خاص برای مدیریت درخواستهای API استفاده میشوند. در اینجا توضیحاتی درباره کنترلرهای API در لاراول ارائه میشود:
برای ایجاد یک کنترلر API، میتوانید از دستور زیر استفاده کنید:
این دستور یک کنترلر جدید در مسیر app/Http/Controllers/Api ایجاد میکند که شامل متدهای پایهای مانند index, store, show, update و destroy میشود.
برای دسترسی به متدهای کنترلر API، باید مسیرهای مناسب را تعریف کنید. در فایل routes/api.php، میتوانید مسیرها را به صورت زیر تعریف کنید:
برای تعریف این مسیر ها از متد جدیدی از فساد Route استفاده می کنیم:
در صورتی که فایل api.php برای شما در پوشه routes وجود ندارد با دستور زیر آن را ایجاد کنید:
تفاوت یک کنترلر API با کنترلر Resource در این است که متد های create و edit در کنترلر API وجود ندارد، زیرا در API ها نیازی به رندر کردن View نیست.
دپندنسی اینجکشن در کنترلر ها:
دپندنسی اینجکشن (Dependency Injection) یکی از اصول مهم طراحی شیءگرا است که به شما کمک میکند وابستگیهای کلاسها را مدیریت کنید و کد قابل تست و قابل نگهداری بنویسید. در لاراول، دپندنسی اینجکشن به سادگی با استفاده از سیستم سرویس کانتینر (Service Container) این فریمورک امکانپذیر است.
نکته: درمورد سرویس کانتینر و پروایدر ها در فصل های آینده به طور مفصل توضیح داده می شود.
دپندنسی اینجکشن به این معنا است که یک کلاس به جای اینکه خودش مسئول ایجاد وابستگیهایش باشد، این وابستگیها از بیرون به آن تزریق میشوند. به عبارت دیگر، وابستگیهای یک کلاس به عنوان پارامترهای سازنده (constructor) یا متدهای دیگر به آن تحویل داده میشوند.
فرض کنید میخواهیم یک کنترلر ایجاد کنیم که برای انجام عملیاتهای مربوط به یک مخزن داده (Repository) نیاز به یک سرویس دارد.
ابتدا یک اینترفیس برای مخزن داده تعریف میکنیم:
سپس یک پیادهسازی برای این اینترفیس ایجاد میکنیم:
باید پیادهسازی مخزن را در سرویس کانتینر لاراول ثبت کنیم تا بتوانیم آن را به کنترلر تزریق کنیم. برای این کار، از یک سرویس پروایدر استفاده میکنیم.
می توانید با دستور زیر یک پروایدر ایجاد کنید:
و درون آن:
سپس این سرویس پروایدر را به لیست پروایدرهای اپلیکیشن اضافه میکنیم:
حالا میتوانیم این مخزن را به کنترلر تزریق کنیم:
در این مثال، کلاس UserController وابستگی خود را به UserRepositoryInterface از طریق کانستراکتور دریافت میکند. لاراول به صورت خودکار پیادهسازی صحیح را از طریق سرویس کانتینر تزریق میکند.
#laravel #فصل_۲
@AmirhDeveloper
.
بخش دوم - کنترلر های 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 #فصل_۲
@AmirhDeveloper
.
فصل سه - Views
بخش اول - موتور قالبسازی Blade
موتور قالبسازی Blade یک سیستم قالبسازی ساده و انعطافپذیر است که به صورت پیشفرض در فریمورک لاراول استفاده میشود. این موتور قالبسازی به شما امکان میدهد تا با استفاده از سینتکس ساده و تمیز، قالبهای وبسایت خود را طراحی و مدیریت کنید. در ادامه به توضیح کامل اجزای مختلف و امکانات موتور قالبسازی Blade میپردازیم:
فایلهای Blade با پسوند .blade.php شناخته میشوند و معمولاً در دایرکتوری resources/views قرار میگیرند. به عنوان مثال:
بخش دوم - ساختار و سینتکس Blade
Blade از سینتکس سادهای برای جایگذاری دادهها و استفاده از دستورالعملهای کنترلی استفاده میکند.
برای نمایش دادهها در قالب Blade از دستور {{ }} استفاده میشود. به عنوان مثال:
در این مثال، مقدار متغیر $name در مکان مورد نظر جایگذاری میشود.
Blade از دستورات کنترلی مانند شرطها و حلقهها پشتیبانی میکند.
برای استفاده از شرطها از دستور @if و @endif استفاده میشود:
همچنین می توان به همین صورت از حلقه ها نیست استفاده کرد:
Blade امکان وراثت قالبها را نیز فراهم میکند. این ویژگی به شما امکان میدهد تا یک ساختار پایه برای قالبهای خود تعریف کنید و قالبهای دیگر را از آن به ارث ببرید.
همچنین امکان تعریف کامپوننتهای قابل استفاده مجدد را فراهم میکند. به عنوان مثال، شما میتوانید یک کامپوننت برای نمایش کارتهای کاربر تعریف کنید.
شما میتوانید دادههایی را که در تمام قالبها به صورت مشترک استفاده میشوند، از طریق Service Provider ها به اشتراک بگذارید.
از شرطهای پیچیده و حلقهها نیز پشتیبانی میکند. به عنوان مثال، شما میتوانید از حلقههای تو در تو استفاده کنید:
نکته : در این قسمت صرفا با ساختار و کاربرد های Blade آشنا شدیم، و در قسمت های بعدی با تمام دستورات Blade، ارث بری قالب ها، ایجاد کامپوننت ها و همچنین ایجاد دستورات Blade سفارشی آشنا می شویم.
موتور قالبسازی Blade یک ابزار قدرتمند و انعطافپذیر برای مدیریت قالبهای وبسایتها در فریمورک لاراول است. با استفاده از سینتکس ساده و قابلیتهای گستردهای که ارائه میدهد، میتوانید قالبهای پویا و قابل توسعهای ایجاد کنید.
#laravel #فصل_۳
@AmirhDeveloper
.
بخش اول - موتور قالبسازی 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->noscript }}</p>
@endforeach
@endforeach
نکته : در این قسمت صرفا با ساختار و کاربرد های Blade آشنا شدیم، و در قسمت های بعدی با تمام دستورات Blade، ارث بری قالب ها، ایجاد کامپوننت ها و همچنین ایجاد دستورات Blade سفارشی آشنا می شویم.
موتور قالبسازی Blade یک ابزار قدرتمند و انعطافپذیر برای مدیریت قالبهای وبسایتها در فریمورک لاراول است. با استفاده از سینتکس ساده و قابلیتهای گستردهای که ارائه میدهد، میتوانید قالبهای پویا و قابل توسعهای ایجاد کنید.
#laravel #فصل_۳
@AmirhDeveloper
.
فصل سه - Views
بخش دوم - آشنایی با دستورات Blade - قسمت اول
همانطور که در قسمت های قبل گفته شد View ها یا فایل های نمایشی مثل فایل های HTML در پوشه resources/views قرار می گیرند و فرمت آنها .blade.php می باشد.
با اجرای دستور زیر می توانید یک فایل view ایجاد کنید:
دستور بالا یک فایل با فرمت .blade.php را در مسیر resources/views با نام greeting ایجاد می کند. همچنین می توانید این عمل را به صورت دستی انجام دهید.
در لاراول به واسطه موتور قالب سازی Blade به جای نوشتن مستقیم کد های PHP از دستورات Blade استفاده می کنیم تا ساختار تمیزتر، ساده تر و خواناتری داشته باشیم.
در ادامه با دستورات Blade آشنا می شویم:
1- دستور {{ x }} و {!! x !!}
از {{ }} برای چاپ محتوای متغیرها و دادهها در فایلهای قالب استفاده میشود. این نوع استفاده معمولاً برای جلوگیری از حملات XSS (Cross-Site Scripting) است و محتوای داخل {{ }} به صورت امن نمایش داده میشود.
م.تور Blade به صورت پیشفرض دادههای داخل {{ }} را escape میکند. این به این معنی است که هر محتوایی که شامل کاراکترهای ویژه HTML باشد به صورت امن نمایش داده میشود.
اگر میخواهید دادهای را بدون escape کردن نمایش دهید، میتوانید از سه علامت تعجب {{{ }}} یا تابع {!! !!} استفاده کنید. اما باید خیلی مراقب باشید که این نوع استفاده ممکن است منجر به حملات XSS شود اگر دادهها به درستی اعتبارسنجی نشده باشند.
همچنین می توانید خروجی توابع را نیز نمایش دهید:
2- دستورات if، elseif، else، unless
دستورات بالا همانند دستورات شرطی PHP عمل میکنند.
دستور @unless برای اجرای یک بلوک کد در صورتی که یک شرط برقرار نباشد، استفاده میشود. این دستور معکوس دستور @if است.
3- دستورات isset و empty
این دستورات برای بررسی خالی بود یا تعریف شدن یک مقدار استفاده می شوند همانند توابع همان آنها در PHP.
4- دستورات auth و guest
برای نمایش یا عدم نمایش محتوا بر اساس وضعیت احراز هویت (authentication) کاربر استفاده میشوند. این دستورات به شما امکان میدهند تا به سادگی محتوای خاصی را برای کاربران احراز هویت شده یا کاربران مهمان (غیر احراز هویت شده) نمایش دهید.
همچنین این دو دستور پارامتری که نام گارد احراز هویت می باشد را نیز دریافت میکنند تا به وسیله آن وضعیت احراز هویت را بررسی کنند.
در فصل های مربوطه با گارد ها آشنا می شویم.
5- دستورات switch case
این دستورات نیز همانند switch case در PHP هستند:
6- حلقه ها
حلقه ها در Blade نیز مانند حلقه ها در PHP نوشته می شوند:
دستور جدیدی با نام forelse وجود دارد تا در صورت خالی بودن متغیر شرط دیگری اجرا شود.
7- دستورات continue و break
این دستورات برای کنترل حلقه ها استفاده می شوند، همچنین می توانند یک شرط برای ورودی دریافت کنند و در صورت برقرار بودن شرط اجرا شوند:
#laravel #فصل_۳
@AmirhDeveloper
.
بخش دوم - آشنایی با دستورات Blade - قسمت اول
همانطور که در قسمت های قبل گفته شد View ها یا فایل های نمایشی مثل فایل های HTML در پوشه resources/views قرار می گیرند و فرمت آنها .blade.php می باشد.
با اجرای دستور زیر می توانید یک فایل view ایجاد کنید:
php artisan make:view greeting
دستور بالا یک فایل با فرمت .blade.php را در مسیر resources/views با نام greeting ایجاد می کند. همچنین می توانید این عمل را به صورت دستی انجام دهید.
در لاراول به واسطه موتور قالب سازی Blade به جای نوشتن مستقیم کد های PHP از دستورات Blade استفاده می کنیم تا ساختار تمیزتر، ساده تر و خواناتری داشته باشیم.
در ادامه با دستورات Blade آشنا می شویم:
1- دستور {{ x }} و {!! x !!}
از {{ }} برای چاپ محتوای متغیرها و دادهها در فایلهای قالب استفاده میشود. این نوع استفاده معمولاً برای جلوگیری از حملات XSS (Cross-Site Scripting) است و محتوای داخل {{ }} به صورت امن نمایش داده میشود.
<h1>Hello, {{ $name }}!</h1>م.تور Blade به صورت پیشفرض دادههای داخل {{ }} را escape میکند. این به این معنی است که هر محتوایی که شامل کاراکترهای ویژه HTML باشد به صورت امن نمایش داده میشود.
اگر میخواهید دادهای را بدون escape کردن نمایش دهید، میتوانید از سه علامت تعجب {{{ }}} یا تابع {!! !!} استفاده کنید. اما باید خیلی مراقب باشید که این نوع استفاده ممکن است منجر به حملات XSS شود اگر دادهها به درستی اعتبارسنجی نشده باشند.
<h1>Hello, {!! $name !!}!</h1>همچنین می توانید خروجی توابع را نیز نمایش دهید:
<p>The current UNIX timestamp is {{ time() }}.</p>2- دستورات if، elseif، else، unless
دستورات بالا همانند دستورات شرطی PHP عمل میکنند.
@if ($user->isAdmin())
<p>Welcome, admin!</p>
@elseif ($user->isModerator())
<p>Welcome, moderator!</p>
@else
<p>Welcome, user!</p>
@endif
دستور @unless برای اجرای یک بلوک کد در صورتی که یک شرط برقرار نباشد، استفاده میشود. این دستور معکوس دستور @if است.
@unless ($user->isGuest())
<p>Welcome back, {{ $user->name }}!</p>
@endunless
3- دستورات isset و empty
این دستورات برای بررسی خالی بود یا تعریف شدن یک مقدار استفاده می شوند همانند توابع همان آنها در PHP.
@isset($records)
// $records is defined and is not null...
@endisset
@empty($records)
// $records is "empty"...
@endempty
4- دستورات auth و guest
برای نمایش یا عدم نمایش محتوا بر اساس وضعیت احراز هویت (authentication) کاربر استفاده میشوند. این دستورات به شما امکان میدهند تا به سادگی محتوای خاصی را برای کاربران احراز هویت شده یا کاربران مهمان (غیر احراز هویت شده) نمایش دهید.
@auth
// The user is authenticated...
@endauth
@guest
// The user is not authenticated...
@endguest
همچنین این دو دستور پارامتری که نام گارد احراز هویت می باشد را نیز دریافت میکنند تا به وسیله آن وضعیت احراز هویت را بررسی کنند.
در فصل های مربوطه با گارد ها آشنا می شویم.
@auth('admin')
...
@endauth
@guest('admin')
...
@endguest5- دستورات switch case
این دستورات نیز همانند switch case در PHP هستند:
@switch($i)
@case(1)
First case...
@break
@case(2)
Second case...
@break
@default
Default case...
@endswitch
6- حلقه ها
حلقه ها در Blade نیز مانند حلقه ها در PHP نوشته می شوند:
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@while (true)
<p>I'm looping forever.</p>
@endwhile
دستور جدیدی با نام forelse وجود دارد تا در صورت خالی بودن متغیر شرط دیگری اجرا شود.
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
7- دستورات continue و break
این دستورات برای کنترل حلقه ها استفاده می شوند، همچنین می توانند یک شرط برای ورودی دریافت کنند و در صورت برقرار بودن شرط اجرا شوند:
@foreach ($users as $user)
@continue($user->type == 1)
<li>{{ $user->name }}</li>
@break($user->number == 5)
@endforeach
#laravel #فصل_۳
@AmirhDeveloper
.
فصل سه - Views
بخش دوم - آشنایی با دستورات Blade - قسمت دوم
1- دستور include:
این دستور برای درج یک ویو (view) دیگر در ویوی فعلی استفاده میشود، و محتویات یک فایل را درون فایل دیگر قرار می دهد.
اگر فایل partials/header.blade.php وجود داشته باشد، محتویات آن در محل استفاده از @include درج خواهد شد.
2- دستور includeIf:
این دستور همانند @include عمل میکند، با این تفاوت که اگر ویو مورد نظر وجود نداشته باشد، خطایی رخ نمیدهد و دستور به سادگی نادیده گرفته میشود.
3- دستور includeWhen:
این دستور برای درج یک ویو در شرایط خاص استفاده میشود. این دستور دو پارامتر میگیرد: یک شرط و نام ویو.
4- دستور includeUnless:
این دستور برعکس @includeWhen عمل میکند، یعنی ویو را زمانی درج میکند که شرط برقرار نباشد.
5- دستور includeFirst:
این دستور برای درج اولین ویو موجود در لیست ویوهای داده شده استفاده میشود. این دستور یک آرایه از نام ویوها را به عنوان پارامتر دریافت میکند.
در این مثال، اگر ویوی custom.header وجود داشته باشد، درج میشود و اگر وجود نداشته باشد، ویوی partials.header درج میشود.
6- دستور section:
این دستور برای تعریف یک بخش (section) از قالب استفاده میشود که میتواند در قالب اصلی (layout) یا قالبهای فرزند مورد استفاده قرار گیرد.
این دستور به تنهایی کاربرد ندارد و نیازمند دستور yield نیز می باشد(مورد بعدی).
7- دستور yield
این دستور برای نمایش محتوای یک بخش در قالب اصلی (layout) استفاده میشود.
این دستور سکشن content که بالاتر تعریف کرده ایم را نمایش می دهد.
8- دستور sectionMissing:
این دستور بررسی میکند که آیا یک section در ویو فعلی تعریف نشده است. اگر آن بخش تعریف نشده باشد، کد داخل sectionMissing اجرا میشود. و درصورتی که تعریف شده باشد محتوای sectionMissing نادیده گرفته می شود و محتوای section نمایش داده می شود.
9- دستور hasSection:
این دستور بررسی میکند که آیا یک section مشخص در ویو فعلی تعریف شده است یا نه. این دستور به شما امکان میدهد که بر اساس وجود یا عدم وجود یک بخش، رفتار خاصی را در قالب خود اعمال کنید.
10- دستور extends:
این دستور برای تعریف اینکه یک ویو از کدام قالب (layout) ارثبری میکند استفاده میشود.
این دستور برای ارثبری از قالب اصلی استفاده شده است. سپس با استفاده از دستورات section، محتوای هر بخش در قالب اصلی که از آن ارث بری شده جایگذاری شده است.
در واقع یک فایل مادر وجود دارد که در فایل های فرزند extends می شود و گسترش می یابد.
نمایی از فایل layouts/app.blade.php یا همان فایل مادر:
همانطور که مشخص است، yield سکشن header در فایل مادر انجام شده در صورتی که سکشن header در فایل فرزند تعریف شده و با استفاده از extends فایل مادر در فایل فرزند، هر دو به هم مرتبط شده اند.
11- دستور show:
این دستور برای پایان دادن به یک بخش و همزمان نمایش محتوای آن استفاده میشود. این دستور معمولاً زمانی استفاده میشود که بخشی از قالب بخواهد محتوای بخش خود را قبل از پایان قالب فعلی نمایش دهد.
#laravel #فصل_۳
@AmirhDeveloper
.
بخش دوم - آشنایی با دستورات Blade - قسمت دوم
1- دستور include:
این دستور برای درج یک ویو (view) دیگر در ویوی فعلی استفاده میشود، و محتویات یک فایل را درون فایل دیگر قرار می دهد.
<body>
@include('partials.header')
</body>
اگر فایل partials/header.blade.php وجود داشته باشد، محتویات آن در محل استفاده از @include درج خواهد شد.
2- دستور includeIf:
این دستور همانند @include عمل میکند، با این تفاوت که اگر ویو مورد نظر وجود نداشته باشد، خطایی رخ نمیدهد و دستور به سادگی نادیده گرفته میشود.
<body>
@includeIf('partials.header')
</body>
3- دستور includeWhen:
این دستور برای درج یک ویو در شرایط خاص استفاده میشود. این دستور دو پارامتر میگیرد: یک شرط و نام ویو.
// $showHeader = true;
<body>
@includeWhen($showHeader, 'partials.header')
</body>
4- دستور includeUnless:
این دستور برعکس @includeWhen عمل میکند، یعنی ویو را زمانی درج میکند که شرط برقرار نباشد.
// $hideHeader = false;
<body>
@includeUnless($hideHeader, 'partials.header')
</body>
5- دستور includeFirst:
این دستور برای درج اولین ویو موجود در لیست ویوهای داده شده استفاده میشود. این دستور یک آرایه از نام ویوها را به عنوان پارامتر دریافت میکند.
<body>
@includeFirst(['custom.header', 'partials.header'])
</body>
در این مثال، اگر ویوی custom.header وجود داشته باشد، درج میشود و اگر وجود نداشته باشد، ویوی partials.header درج میشود.
6- دستور section:
این دستور برای تعریف یک بخش (section) از قالب استفاده میشود که میتواند در قالب اصلی (layout) یا قالبهای فرزند مورد استفاده قرار گیرد.
@section('content')
<p>This is the content section.</p>
@endsectionاین دستور به تنهایی کاربرد ندارد و نیازمند دستور yield نیز می باشد(مورد بعدی).
7- دستور yield
این دستور برای نمایش محتوای یک بخش در قالب اصلی (layout) استفاده میشود.
<body>
@yield('content')
</body>
این دستور سکشن content که بالاتر تعریف کرده ایم را نمایش می دهد.
8- دستور sectionMissing:
این دستور بررسی میکند که آیا یک section در ویو فعلی تعریف نشده است. اگر آن بخش تعریف نشده باشد، کد داخل sectionMissing اجرا میشود. و درصورتی که تعریف شده باشد محتوای sectionMissing نادیده گرفته می شود و محتوای section نمایش داده می شود.
@sectionMissing('sidebar')
<div class="sidebar">
<p>This is the default sidebar content.</p>
</div>
@endsectionMissing9- دستور hasSection:
این دستور بررسی میکند که آیا یک section مشخص در ویو فعلی تعریف شده است یا نه. این دستور به شما امکان میدهد که بر اساس وجود یا عدم وجود یک بخش، رفتار خاصی را در قالب خود اعمال کنید.
@hasSection('navigation')
<div class="pull-right">
@yield('navigation')
</div>
@endif10- دستور extends:
این دستور برای تعریف اینکه یک ویو از کدام قالب (layout) ارثبری میکند استفاده میشود.
// resources/views/welcome.blade.php
@extends('layouts.app') //layouts/app.blade.php
@section('header')
<h1>Header Section in Child View</h1>
@endsection
این دستور برای ارثبری از قالب اصلی استفاده شده است. سپس با استفاده از دستورات section، محتوای هر بخش در قالب اصلی که از آن ارث بری شده جایگذاری شده است.
در واقع یک فایل مادر وجود دارد که در فایل های فرزند extends می شود و گسترش می یابد.
نمایی از فایل layouts/app.blade.php یا همان فایل مادر:
// resources/views/layouts/app.blade.php
<body>
<header>
@yield('header')
</header>
</body>
همانطور که مشخص است، yield سکشن header در فایل مادر انجام شده در صورتی که سکشن header در فایل فرزند تعریف شده و با استفاده از extends فایل مادر در فایل فرزند، هر دو به هم مرتبط شده اند.
11- دستور show:
این دستور برای پایان دادن به یک بخش و همزمان نمایش محتوای آن استفاده میشود. این دستور معمولاً زمانی استفاده میشود که بخشی از قالب بخواهد محتوای بخش خود را قبل از پایان قالب فعلی نمایش دهد.
@section('sidebar')
<p>This is the sidebar.</p>
@show#laravel #فصل_۳
@AmirhDeveloper
.
فصل سه - Views
بخش دوم - آشنایی با دستورات Blade - قسمت سوم
1- دستور csrf:
این دستور برای تولید یک توکن CSRF استفاده میشود که به محافظت از فرمهای شما در برابر حملات CSRF کمک میکند.
2- دستور method:
این دستور برای تعریف متد HTTP فرمها در صورت استفاده از روشهای غیر از GET و POST مانند PUT یا DELETE استفاده میشود.
3- دستور error:
این دستور برای نمایش پیامهای خطا استفاده میشود. معمولاً در فرمها برای نمایش خطاهای اعتبارسنجی به کار میرود.
4- دستور use:
این دستور برای use کردن کلاس ها، کانستنت ها و... استفاده می شود.
5- دستور php:
این دستور برای اجرای کد PHP درون قالب Blade استفاده میشود.
6- دستور env:
این دستور برای بررسی محیط فعلی برنامه استفاده میشود.
7- دستور production:
این دستور به شما امکان میدهد تا کدهایی را فقط در محیط تولید اجرا کنید.
8- دستور verbatim:
این دستور برای جلوگیری از پردازش دستورات Blade در داخل بلوکهای HTML استفاده میشود.
کد های درون این دستور توسط Blade تفسیر نخواهند شد و به همان شکل نمایش داده می شوند.
همچنین با قرار دادن یک @ اضافه قبل از دستورات Blade از تفسیر آن ها جلوگیری می شود:
9- دستور fragment:
این دستور به شما امکان میدهد که یک بخش از کد را در یک نام خاص بستهبندی کنید و در جای دیگر فقط آن قطعه را رندر کنید.
10- دستورات disk، elsedisk، unlessdisk:
این دستور برای اجرای یک بلوک کد تنها در صورتی که دیسک مشخص شده موجود باشد استفاده میشود.
#laravel #فصل_۳
@AmirhDeveloper
.
بخش دوم - آشنایی با دستورات Blade - قسمت سوم
1- دستور csrf:
این دستور برای تولید یک توکن CSRF استفاده میشود که به محافظت از فرمهای شما در برابر حملات CSRF کمک میکند.
<form method="" action="">
@csrf
...
</form>
2- دستور method:
این دستور برای تعریف متد HTTP فرمها در صورت استفاده از روشهای غیر از GET و POST مانند PUT یا DELETE استفاده میشود.
<form method="POST" action="">
@csrf
@method('PUT')
...
</form>
3- دستور error:
این دستور برای نمایش پیامهای خطا استفاده میشود. معمولاً در فرمها برای نمایش خطاهای اعتبارسنجی به کار میرود.
<form method="POST" action="">
@csrf
@error('name')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
</form>
4- دستور use:
این دستور برای use کردن کلاس ها، کانستنت ها و... استفاده می شود.
@use('App\Models\Flight')5- دستور php:
این دستور برای اجرای کد PHP درون قالب Blade استفاده میشود.
@php
$name = 'John Doe';
@endphp
<p>Hello, {{ $name }}</p>
6- دستور env:
این دستور برای بررسی محیط فعلی برنامه استفاده میشود.
@env('local')
<p>You're in the local environment.</p>
@endenv7- دستور production:
این دستور به شما امکان میدهد تا کدهایی را فقط در محیط تولید اجرا کنید.
@production
<p>This code runs only in the production environment.</p>
@endproduction
8- دستور verbatim:
این دستور برای جلوگیری از پردازش دستورات Blade در داخل بلوکهای HTML استفاده میشود.
@verbatim
<div class="example">
This is a Blade directive: {{ $name }}
</div>
@endverbatim
کد های درون این دستور توسط Blade تفسیر نخواهند شد و به همان شکل نمایش داده می شوند.
همچنین با قرار دادن یک @ اضافه قبل از دستورات Blade از تفسیر آن ها جلوگیری می شود:
@@if()
// HTML Output:
@if()
9- دستور fragment:
این دستور به شما امکان میدهد که یک بخش از کد را در یک نام خاص بستهبندی کنید و در جای دیگر فقط آن قطعه را رندر کنید.
// Blade File:
@fragment('user-list')
<ul>
<li>Item 1</li>
</ul>
@endfragment
// Controller File:
return view('dashboard'])->fragment('user-list');
10- دستورات disk، elsedisk، unlessdisk:
این دستور برای اجرای یک بلوک کد تنها در صورتی که دیسک مشخص شده موجود باشد استفاده میشود.
@disk('s3')
<p>The S3 disk is available.</p>
@elsedisk
<p>The S3 disk is not available.</p>
@enddisk
@unlessdisk('local')
<p>The local disk is not available.</p>
@endunlessdisk#laravel #فصل_۳
@AmirhDeveloper
.
فصل سه - Views
بخش دوم - آشنایی با دستورات Blade - قسمت چهارم
1- دستور once:
این دستور برای تنها یک بار اجرای محتوای داخل آن استفاده میشود. حتی اگر در یک حلقه باشد، محتوای آن تنها یک بار اجرا میشود.
2- دستور stack:
برای نمایش محتوای انباشته شده در یک بخش خاص با استفاده از دستور @push.
3- دستور push:
برای افزودن محتوایی به یک بخش خاص استفاده میشود. این محتوا در بخش تعریف شده با دستور @stack نمایش داده میشود.
4- دستور pushOnce:
مشابه @push است اما تضمین میکند که محتوای اضافه شده تنها یک بار نمایش داده شود، حتی اگر چندین بار @pushOnce استفاده شده باشد.
5- دستور pushIf:
ترکیبی از @push و شرایط است که اگر شرط برقرار باشد، محتوای آن به بخش مربوطه اضافه میشود.
6- دستور prepend:
برای اضافه کردن محتوای جدید به ابتدای یک بخش خاص.
7- دستور inject:
برای تزریق یک سرویس یا متغیر به یک نمای Blade.
8- دستور each:
برای رندر کردن یک نما برای هر آیتم در یک مجموعه.
9- دستور required:
برای تنظیم ویژگی required یک عنصر HTML به صورت شرطی.
10- دستور readonly:
برای تنظیم ویژگی readonly یک عنصر HTML به صورت شرطی.
11- دستور disabled:
برای تنظیم ویژگی disabled یک عنصر HTML به صورت شرطی.
12- دستور selected:
برای تنظیم ویژگی selected یک گزینه در یک منوی انتخابی به صورت شرطی.
13- دستور checked:
برای تنظیم ویژگی checked یک چکباکس یا رادیو باتن به صورت شرطی.
14- دستور style:
برای اضافه کردن ویژگی style به یک عنصر HTML به صورت شرطی یا بدون شرط.
15- دستور class:
برای اضافه کردن کلاس CSS به یک عنصر HTML به صورت شرطی یا بدون شرط.
#laravel #فصل_۳
@AmirhDeveloper
.
بخش دوم - آشنایی با دستورات Blade - قسمت چهارم
1- دستور once:
این دستور برای تنها یک بار اجرای محتوای داخل آن استفاده میشود. حتی اگر در یک حلقه باشد، محتوای آن تنها یک بار اجرا میشود.
@once
<p>This will be displayed only once.</p>
@endonce
2- دستور stack:
برای نمایش محتوای انباشته شده در یک بخش خاص با استفاده از دستور @push.
<head>
@stack('noscripts')
</head>
3- دستور push:
برای افزودن محتوایی به یک بخش خاص استفاده میشود. این محتوا در بخش تعریف شده با دستور @stack نمایش داده میشود.
// Childe File:
@push('noscripts')
<noscript src="/example.js"></noscript>
@endpush
// Parent File:
<head>
@stack('noscripts')
</head>
4- دستور pushOnce:
مشابه @push است اما تضمین میکند که محتوای اضافه شده تنها یک بار نمایش داده شود، حتی اگر چندین بار @pushOnce استفاده شده باشد.
@pushOnce('noscripts')
<noscript src="/example.js"></noscript>
@endpushOnce5- دستور pushIf:
ترکیبی از @push و شرایط است که اگر شرط برقرار باشد، محتوای آن به بخش مربوطه اضافه میشود.
@pushIf($condition, 'noscripts')
<noscript src="/example.js"></noscript>
@endpushIf
6- دستور prepend:
برای اضافه کردن محتوای جدید به ابتدای یک بخش خاص.
// Childe File:
@prepend('noscripts')
<noscript src="/first.js"></noscript>
@endprepend
// Parent File:
<head>
@stack('noscripts')
</head>
7- دستور inject:
برای تزریق یک سرویس یا متغیر به یک نمای Blade.
@inject('metrics', 'App\Services\MetricsService')
<div>
Monthly Revenue: {{ $metrics->monthlyRevenue() }}
</div>8- دستور each:
برای رندر کردن یک نما برای هر آیتم در یک مجموعه.
@each('view.name', $items, 'item', 'view.empty')view.name : نمایی که باید برای هر آیتم رندر شود.$items : مجموعهای از آیتمها.item : نام متغیری که هر آیتم به آن ارجاع داده میشود.
view.empty : نمایی که باید نمایش داده شود اگر مجموعه خالی باشد.9- دستور required:
برای تنظیم ویژگی required یک عنصر HTML به صورت شرطی.
<input type="text" name="name" @required(true)>
10- دستور readonly:
برای تنظیم ویژگی readonly یک عنصر HTML به صورت شرطی.
<input type="text" name="name" @readonly(true)>
11- دستور disabled:
برای تنظیم ویژگی disabled یک عنصر HTML به صورت شرطی.
<button type="submit" @disabled(true)>Submit</button>
12- دستور selected:
برای تنظیم ویژگی selected یک گزینه در یک منوی انتخابی به صورت شرطی.
<select name="options">
<option value="1" @selected($value == 1)>Option 1</option>
<option value="2" @selected($value == 2)>Option 2</option>
</select>
13- دستور checked:
برای تنظیم ویژگی checked یک چکباکس یا رادیو باتن به صورت شرطی.
<input type="checkbox" name="agree" @checked(true)>
14- دستور style:
برای اضافه کردن ویژگی style به یک عنصر HTML به صورت شرطی یا بدون شرط.
// conditional
<div @style(['display: none' => $isHidden])>
Content
</div>
// unconditionally
<div @style(['display: none'])>
Content
</div>
15- دستور class:
برای اضافه کردن کلاس CSS به یک عنصر HTML به صورت شرطی یا بدون شرط.
// conditional
<div @class(['hidden' => $isHidden])>
Content
</div>
// unconditionally
<div @class(['hidden'])>
Content
</div>
#laravel #فصل_۳
@AmirhDeveloper
.
فصل سه - Views
بخش سوم - کامپوننت ها - قسمت اول
کامپوننتها، ابزارهایی قدرتمند برای تسهیل توسعه رابط کاربری (UI) در برنامههای وب هستند. کامپوننتها به شما این امکان را میدهند که بخشهای کوچکی از رابط کاربری را به صورت مجزا ایجاد و مدیریت کنید، که این باعث میشود کدهای شما تمیزتر و قابل نگهداریتر باشند.
کامپوننتها قطعات قابل استفاده مجدد از کد هستند که شامل HTML و منطق لازم برای ایجاد بخشی از رابط کاربری میشوند. این کامپوننتها میتوانند دادهها را از والدین خود دریافت کنند و میتوانند به راحتی در بخشهای مختلف پروژه استفاده شوند.
کامپوننتها در لاراول معمولاً از دو بخش تشکیل میشوند:
1- بخش HTML: که ساختار رابط کاربری را تعریف میکند.
2- بخش منطقی (Logic): که میتواند شامل متدها و دادههایی باشد که برای تولید HTML مورد نیاز است. این بخش به طور معمول در کلاسهای PHP تعریف میشود.
کامپوننتها میتوانند به سادگی در فایلهای Blade فراخوانی شوند. برای مثال، اگر یک کامپوننت به نام alert دارید، میتوانید آن را به این صورت فراخوانی کنید:
این فراخوانی، کامپوننت مربوطه را به همراه دادههایی که به آن ارسال شده است، در صفحه نمایش میدهد.
لاراول دو نوع کامپوننت ارائه میدهد:
کامپوننتهای کلاس محور (Class-based Components) و کامپوننتهای بدون کلاس (Anonymous Components).
کامپوننتهای کلاس محور شامل یک فایل PHP کلاس برای مدیریت منطق هستند، در حالی که کامپوننتهای بدون کلاس تنها به یک فایل Blade برای نمایش متکی هستند و منطق پیچیدهای ندارند.
برای ساخت کامپوننت های کلاس محور میتوان از دستور زیر استفاده کرد:
این دستور یک کامپوننت با نام Alert ایجاد می کند که شامل یک کلاس در
برای ساخت کامپوننت های بدون کلاس یا ناشناس می توانید از دستور زیر استفاده کنید:
این دستور تنها یک فایل View در
همچنین می توانید کامپوننت ها را در فولدر های تو در تو ایجاد کنید:
همچنین برای فراخوانی کامپوننت از فولدر های خاص:
حال که کامپوننت خود را ایجاد کرده اید، کافی است کد های HTML خود را درون فایل View کامپوننت بنویسید و با فراخوانی کاپوننت آنها را نمایش دهید:
و برای فراخوانی آن:
#laravel #فصل_۳
@AmirhDeveloper
بخش سوم - کامپوننت ها - قسمت اول
کامپوننتها، ابزارهایی قدرتمند برای تسهیل توسعه رابط کاربری (UI) در برنامههای وب هستند. کامپوننتها به شما این امکان را میدهند که بخشهای کوچکی از رابط کاربری را به صورت مجزا ایجاد و مدیریت کنید، که این باعث میشود کدهای شما تمیزتر و قابل نگهداریتر باشند.
کامپوننتها قطعات قابل استفاده مجدد از کد هستند که شامل HTML و منطق لازم برای ایجاد بخشی از رابط کاربری میشوند. این کامپوننتها میتوانند دادهها را از والدین خود دریافت کنند و میتوانند به راحتی در بخشهای مختلف پروژه استفاده شوند.
کامپوننتها در لاراول معمولاً از دو بخش تشکیل میشوند:
1- بخش HTML: که ساختار رابط کاربری را تعریف میکند.
2- بخش منطقی (Logic): که میتواند شامل متدها و دادههایی باشد که برای تولید HTML مورد نیاز است. این بخش به طور معمول در کلاسهای PHP تعریف میشود.
کامپوننتها میتوانند به سادگی در فایلهای Blade فراخوانی شوند. برای مثال، اگر یک کامپوننت به نام alert دارید، میتوانید آن را به این صورت فراخوانی کنید:
<x-alert type="danger" :message="This is a danger alert" />
این فراخوانی، کامپوننت مربوطه را به همراه دادههایی که به آن ارسال شده است، در صفحه نمایش میدهد.
لاراول دو نوع کامپوننت ارائه میدهد:
کامپوننتهای کلاس محور (Class-based Components) و کامپوننتهای بدون کلاس (Anonymous Components).
کامپوننتهای کلاس محور شامل یک فایل PHP کلاس برای مدیریت منطق هستند، در حالی که کامپوننتهای بدون کلاس تنها به یک فایل Blade برای نمایش متکی هستند و منطق پیچیدهای ندارند.
برای ساخت کامپوننت های کلاس محور میتوان از دستور زیر استفاده کرد:
php artisan make:component Alert
این دستور یک کامپوننت با نام Alert ایجاد می کند که شامل یک کلاس در
app/View/Components و یک فایل View در resources/views/components می باشد.برای ساخت کامپوننت های بدون کلاس یا ناشناس می توانید از دستور زیر استفاده کنید:
php artisan make:component input --view
این دستور تنها یک فایل View در
resources/views/components ایجاد می کند.همچنین می توانید کامپوننت ها را در فولدر های تو در تو ایجاد کنید:
# Class-based Components
php artisan make:component Forms/Input
# app/View/Components/Forms/Input.php
# resources/views/components/forms/input.blade.php
# Anonymous Components
php artisan make:component forms.input --view
# resources/views/components/forms/input.blade.php
همچنین برای فراخوانی کامپوننت از فولدر های خاص:
<x-forms.input />
حال که کامپوننت خود را ایجاد کرده اید، کافی است کد های HTML خود را درون فایل View کامپوننت بنویسید و با فراخوانی کاپوننت آنها را نمایش دهید:
// resources/views/components/alert.blade.php
<div class="alert alert-success">
This is an alert componnet!
</div>
و برای فراخوانی آن:
// Another View file in another world
<x-alert />
#laravel #فصل_۳
@AmirhDeveloper
فصل سه - Views
بخش سوم - کامپوننت ها - قسمت دوم
ارسال دادهها و متغیرها به کامپوننتها برای پویا سازی آنها بسیار مهم است.
برای این کار کافی است درون فایل View کامپوننت خود متغییر ها را چاپ کنیم:
برای مقدار دهی متغیر های type و message در هنگام فراخوانی کامپوننت می توانید به صورت اتریبیوت های HTML پاس بدهیم:
در اینجا، مقادیر type و message به متغیرهای تعریفشده در کامپوننت ارسال میشوند و در نهایت، HTML تولید شده و در صفحه نمایش داده میشود.
در مثال بالا داده های استاتیک قابل ارسال است.
برای ارسال متغیر باید به روش زیر عمل کنید:
علامت
درصورتی که از کامپوننت های کلاس محور استفاده می کنید می توانید این متغییر ها را درون کلاس نیز داشته باشید، برای این کار کافی است متغیر ها را به صورت پراپرتی بنویسید و در کانستراکتور مقدار دهی کنید:
در مثال بالا متغیر ها از طریق پراپرتی های تعریف شده در دسترس قرار دارند.
در حالت عادی تگ های کاپوننت ها نیاز به باز و بسته شدن ندارند، اما نیز می توانید آنها را باز و بسته کنید و میان آنها تگ ها یا داده های دیگری را بنویسید.
اسلات پیشفرض در واقع محتوا یا بخشی از HTML است که به طور مستقیم بین تگهای کامپوننت در ویو تعریف میشود و سپس در کامپوننت نمایش داده میشود.
محتوای بین تگ های کامپوننت از طریق متغیر $slot در فایل ویو در دسترس هستند.
در اینجا {{ $slot }} به عنوان اسلات پیشفرض عمل میکند. یعنی محتوایی که به این کامپوننت ارسال میشود، در جایگاه {{ $slot }} قرار میگیرد.
حالا میتوانید این کامپوننت را در یک ویو دیگر به این شکل استفاده کنید:
در این مثال، متن "This is a warning alert!" به عنوان اسلات پیشفرض در مکان {{ $slot }} قرار میگیرد و خروجی HTML به صورت زیر خواهد بود:
اسلاتهای نامگذاری شده به شما امکان میدهند که بخشهای مختلف یک کامپوننت را از طریق اسلاتهای مختلف پر کنید. این ویژگی زمانی مفید است که کامپوننت شما نیاز به دریافت چندین بخش محتوا داشته باشد.
در اینجا، {{ $header }} یک اسلات نامگذاری شده است و {{ $slot }} به عنوان اسلات پیشفرض برای محتوای اصلی استفاده میشود.
برای استفاده از این کامپوننت، شما میتوانید به این صورت عمل کنید:
در این مثال:
مقدار "Card Title" به عنوان محتوای اسلات نامگذاری شده header به کامپوننت ارسال میشود.
و مقدار "This is the card content." به عنوان محتوای پیشفرض درون اسلات پیشفرض ({{ $slot }}) قرار میگیرد.
نامگذاری متغیر های ورودی:
نام متغیر های درون کامپوننت باید به صورت cameCase نوشته شوند:
و نام اتریبیوت ورودی باید به صورت kebab-case نوشته شود:
درصورتی که نام متغیر درون کامپوننت با نام متغیری که باید به کامپوننت پاس داده شود برابر باشد می توانید آن را به صورت کوتاه شده بنویسید:
گاهی ممکن است ورودی های ما با دستورات Blade به تداخل بخورد، برای escape کردن آن تنها کافی است از دو عبارت
#laravel #فصل_۳
@AmirhDeveloper
.
بخش سوم - کامپوننت ها - قسمت دوم
ارسال دادهها و متغیرها به کامپوننتها برای پویا سازی آنها بسیار مهم است.
برای این کار کافی است درون فایل View کامپوننت خود متغییر ها را چاپ کنیم:
// resources/views/components/alert.blade.php
<div class="alert alert-{{ $type }}">
{{ $message }}
</div>
برای مقدار دهی متغیر های type و message در هنگام فراخوانی کامپوننت می توانید به صورت اتریبیوت های HTML پاس بدهیم:
<x-alert type="success" message="Your operation was successful!" />
در اینجا، مقادیر type و message به متغیرهای تعریفشده در کامپوننت ارسال میشوند و در نهایت، HTML تولید شده و در صفحه نمایش داده میشود.
در مثال بالا داده های استاتیک قابل ارسال است.
برای ارسال متغیر باید به روش زیر عمل کنید:
<x-alert :type="$alertType" :message="$alertMessage" />
علامت
: قبل از نام متغیرها به این معناست که دادهها به عنوان متغیرهای PHP ارسال میشوند نه به عنوان رشته ثابت. متغیرهای $alertType و $alertMessage میتوانند از کنترلر یا جای دیگری در ویو شما باشند.درصورتی که از کامپوننت های کلاس محور استفاده می کنید می توانید این متغییر ها را درون کلاس نیز داشته باشید، برای این کار کافی است متغیر ها را به صورت پراپرتی بنویسید و در کانستراکتور مقدار دهی کنید:
namespace App\View\Components;
use Illuminate\View\Component;
class Alert extends Component
{
public $type;
public $message;
public function __construct($type, $message)
{
$this->type = $type;
$this->message = $message;
}
public function render()
{
return view('components.alert');
}
}
در مثال بالا متغیر ها از طریق پراپرتی های تعریف شده در دسترس قرار دارند.
در حالت عادی تگ های کاپوننت ها نیاز به باز و بسته شدن ندارند، اما نیز می توانید آنها را باز و بسته کنید و میان آنها تگ ها یا داده های دیگری را بنویسید.
اسلات پیشفرض در واقع محتوا یا بخشی از HTML است که به طور مستقیم بین تگهای کامپوننت در ویو تعریف میشود و سپس در کامپوننت نمایش داده میشود.
محتوای بین تگ های کامپوننت از طریق متغیر $slot در فایل ویو در دسترس هستند.
<div class="alert alert-{{ $type }}">
{{ $slot }}
</div>در اینجا {{ $slot }} به عنوان اسلات پیشفرض عمل میکند. یعنی محتوایی که به این کامپوننت ارسال میشود، در جایگاه {{ $slot }} قرار میگیرد.
حالا میتوانید این کامپوننت را در یک ویو دیگر به این شکل استفاده کنید:
<x-alert type="warning">
This is a warning alert!
</x-alert>
در این مثال، متن "This is a warning alert!" به عنوان اسلات پیشفرض در مکان {{ $slot }} قرار میگیرد و خروجی HTML به صورت زیر خواهد بود:
<div class="alert alert-warning">
This is a warning alert!
</div>
اسلاتهای نامگذاری شده به شما امکان میدهند که بخشهای مختلف یک کامپوننت را از طریق اسلاتهای مختلف پر کنید. این ویژگی زمانی مفید است که کامپوننت شما نیاز به دریافت چندین بخش محتوا داشته باشد.
<div class="card">
<div class="card-header">
{{ $header }}
</div>
<div class="card-body">
{{ $slot }}
</div>
</div>
در اینجا، {{ $header }} یک اسلات نامگذاری شده است و {{ $slot }} به عنوان اسلات پیشفرض برای محتوای اصلی استفاده میشود.
برای استفاده از این کامپوننت، شما میتوانید به این صورت عمل کنید:
<x-card>
<x-slot:header>
Card Title
</x-slot>
This is the card content.
</x-card>
در این مثال:
مقدار "Card Title" به عنوان محتوای اسلات نامگذاری شده header به کامپوننت ارسال میشود.
و مقدار "This is the card content." به عنوان محتوای پیشفرض درون اسلات پیشفرض ({{ $slot }}) قرار میگیرد.
نامگذاری متغیر های ورودی:
نام متغیر های درون کامپوننت باید به صورت cameCase نوشته شوند:
<div class="alert alert-{{ $alertType }}">
{{ $slot }}
</div>و نام اتریبیوت ورودی باید به صورت kebab-case نوشته شود:
<x-alert :alert-type="$alertType">
Alert
</x-alert>
درصورتی که نام متغیر درون کامپوننت با نام متغیری که باید به کامپوننت پاس داده شود برابر باشد می توانید آن را به صورت کوتاه شده بنویسید:
<x-alert :$alertType>
Alert
</x-alert>
گاهی ممکن است ورودی های ما با دستورات Blade به تداخل بخورد، برای escape کردن آن تنها کافی است از دو عبارت
:: استفاده کنید تا توسط Blade رندر نشوند:<x-button ::class="{ danger: isDeleting }">
Submit
</x-button>#laravel #فصل_۳
@AmirhDeveloper
.
توی آپدیت بعدی LaraGram قابلیت های کاربردی و مهمی رو خواهیم داشت.
از جمله Group Listener ها:
- می تونید با استفاده از اون ها یک سری شروط رو روی یک گروه از لیسنر ها اعمال کنید.
به عنوان مثال:
- پیام های درون چه اسکوپی پردازش بشن (گروه، کانال یا پیوی ربات)
- یا پیام های کاربران با چه سطح دسترسی پردازش بشه.(مالک، مدیر یا عضو عادی)
- همچنین middleware ها هم قراره اضافه بشن تا شروط خودتون رو بنویسید و روی یک گروه از لیسنر ها اعمال کنید.
- کنترلر ها هم به LaraGram اضافه میشن تا لیسنر ها توی یک فایل مجزا نوشته بشن و منطق ربات توی فایل های کنترلر خاص خودشون، تا از شلوغ شدن فایل ها جلوگیری بشه.
- پشتیبانی از OpenSwoole اضافه شده و گزینه پیشنهادی هست از اونجایی که LaraGram میتونه سنگین باشه.
- همچنین Conversation ها که قبل تر معرفی کرده بودیم هر اضافه میشن تا بدون هیچ دردسری یک گفت و گو بین ربات و کاربر ایجاد کنید.
- متد های جدیدی به سیستم کیبورد بیلدر اضافه شده.
- قابلیت اجرا کامند های کنسول از طریق کد.
- و چند لیسنر جدید:
- و احتمالا چیزای دیگه....
📱 LaraGram - Laraquest - Core
🔎 #laragram
✅ @AmirhDeveloper
.
از جمله Group Listener ها:
- می تونید با استفاده از اون ها یک سری شروط رو روی یک گروه از لیسنر ها اعمال کنید.
به عنوان مثال:
- پیام های درون چه اسکوپی پردازش بشن (گروه، کانال یا پیوی ربات)
- یا پیام های کاربران با چه سطح دسترسی پردازش بشه.(مالک، مدیر یا عضو عادی)
- همچنین middleware ها هم قراره اضافه بشن تا شروط خودتون رو بنویسید و روی یک گروه از لیسنر ها اعمال کنید.
- کنترلر ها هم به LaraGram اضافه میشن تا لیسنر ها توی یک فایل مجزا نوشته بشن و منطق ربات توی فایل های کنترلر خاص خودشون، تا از شلوغ شدن فایل ها جلوگیری بشه.
- پشتیبانی از OpenSwoole اضافه شده و گزینه پیشنهادی هست از اونجایی که LaraGram میتونه سنگین باشه.
- همچنین Conversation ها که قبل تر معرفی کرده بودیم هر اضافه میشن تا بدون هیچ دردسری یک گفت و گو بین ربات و کاربر ایجاد کنید.
- متد های جدیدی به سیستم کیبورد بیلدر اضافه شده.
- قابلیت اجرا کامند های کنسول از طریق کد.
- و چند لیسنر جدید:
onList()
onArray()
onAddMember()
onJoinMember()
onMention()
onHashtag()
- و احتمالا چیزای دیگه....
.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8 2👍1
فصل سه - Views
بخش سوم - کامپوننت ها - قسمت سوم
ویژگی
این ویژگی شامل متدهای متعددی برای کار با اتریبیوت ها میشود.
1- متد merge:
این متد به شما اجازه میدهد که ویژگیهای جدیدی را به مجموعه ویژگیهای موجود اضافه کنید و در صورت وجود ویژگیهای تکراری، آنها را ادغام کنید. معمولاً برای کلاسهای CSS استفاده میشود.
اگر کلاسهای CSS به این کامپوننت پاس داده شوند، merge آنها را با کلاسهای پیشفرض ترکیب میکند. برای مثال:
کلاس نهایی ترکیب شده به صورت alert alert-success my-custom-class خواهد بود.
2- متد class:
این متد به طور خاص برای کار با کلاسهای CSS استفاده میشود. شما میتوانید کلاسهای جدیدی اضافه کنید یا کلاسهای موجود را با شرطهایی مدیریت کنید.
اگر $isBold مقدار true داشته باشد، کلاس font-bold اضافه میشود.
3- متد prepend:
این متد برای افزودن ویژگیهای جدید به ابتدا (اولویت) مجموعه ویژگیهای موجود استفاده میشود. اگر ویژگی مورد نظر قبلاً موجود باشد، مقدار جدید در ابتدا اضافه میشود.
اگر کامپوننت قبلاً دارای کلاس font-bold نباشد، به ابتدای لیست کلاسها اضافه میشود.
4- متد filter:
این متد به شما اجازه میدهد که ویژگیها را بر اساس یک شرط فیلتر کنید.
در این مثال، فقط ویژگیهای class و id نگه داشته میشوند و سایر ویژگیها فیلتر میشوند.
5- متد whereStartsWith:
این متد ویژگیهایی را که کلید آنها با رشته خاصی شروع میشود، فیلتر میکند.
این کد تمام ویژگیهایی که با data- شروع میشوند را به div اضافه میکند.
6- متد whereDoesntStartWith:
این متد ویژگیهایی که کلید آنها با رشته خاصی شروع نمیشود را فیلتر میکند.
این کد تمام ویژگیهایی که با wire: شروع نمیشوند را نگه میدارد.
7- متد has:
این متد بررسی میکند که آیا یک ویژگی خاص در مجموعه ویژگیها وجود دارد یا خیر.
این کد بررسی میکند که آیا ویژگی class وجود دارد و در صورت عدم وجود، یک کلاس پیشفرض استفاده میکند.
8- متد hasAny:
این متد بررسی میکند که آیا هر یک از ویژگیهای مورد نظر در مجموعه وجود دارند یا خیر.
این کد بررسی میکند که آیا یکی از ویژگیهای class یا id وجود دارند و در صورت وجود، div را با آنها رندر میکند.
9- متد get:
این متد مقدار یک ویژگی خاص را برمیگرداند. اگر ویژگی وجود نداشته باشد، میتوانید یک مقدار پیشفرض برای آن تعیین کنید.
در اینجا، اگر ویژگی id پاس داده نشده باشد، مقدار پیشفرض default-id استفاده میشود.
این متدها به شما اجازه میدهند که به شکلی انعطافپذیر با ویژگیهای HTML که به کامپوننتهای Blade لاراول پاس داده میشوند، کار کنید. با استفاده از این متدها، میتوانید ویژگیها را فیلتر کنید، ادغام کنید، بررسی کنید که آیا ویژگیای وجود دارد یا خیر، و در نهایت به شکل دقیقتری کامپوننتهای خود را مدیریت کنید.
🔎 #laravel #فصل_۳
✅ @AmirhDeveloper
.
بخش سوم - کامپوننت ها - قسمت سوم
ویژگی
$attributes به طور خودکار تمامی ویژگیهای اضافیای که به یک کامپوننت Blade پاس داده میشوند را مدیریت میکند. این ویژگی شامل متدهای متعددی برای کار با اتریبیوت ها میشود.
1- متد merge:
این متد به شما اجازه میدهد که ویژگیهای جدیدی را به مجموعه ویژگیهای موجود اضافه کنید و در صورت وجود ویژگیهای تکراری، آنها را ادغام کنید. معمولاً برای کلاسهای CSS استفاده میشود.
<div {{ $attributes->merge(['class' => 'alert alert-' . $type]) }}>
{{ $slot }}
</div>اگر کلاسهای CSS به این کامپوننت پاس داده شوند، merge آنها را با کلاسهای پیشفرض ترکیب میکند. برای مثال:
<x-alert type="success" class="my-custom-class">
Success!
</x-alert>
کلاس نهایی ترکیب شده به صورت alert alert-success my-custom-class خواهد بود.
2- متد class:
این متد به طور خاص برای کار با کلاسهای CSS استفاده میشود. شما میتوانید کلاسهای جدیدی اضافه کنید یا کلاسهای موجود را با شرطهایی مدیریت کنید.
<div {{ $attributes->class(['alert', 'alert-' . $type, 'font-bold' => $isBold]) }}>
{{ $slot }}
</div>اگر $isBold مقدار true داشته باشد، کلاس font-bold اضافه میشود.
3- متد prepend:
این متد برای افزودن ویژگیهای جدید به ابتدا (اولویت) مجموعه ویژگیهای موجود استفاده میشود. اگر ویژگی مورد نظر قبلاً موجود باشد، مقدار جدید در ابتدا اضافه میشود.
<div {{ $attributes->prepend('class', 'font-bold') }}>
{{ $slot }}
</div>اگر کامپوننت قبلاً دارای کلاس font-bold نباشد، به ابتدای لیست کلاسها اضافه میشود.
4- متد filter:
این متد به شما اجازه میدهد که ویژگیها را بر اساس یک شرط فیلتر کنید.
<div {{ $attributes->filter(fn ($value, $key) => $key === 'class' || $key === 'id') }}>
{{ $slot }}
</div>در این مثال، فقط ویژگیهای class و id نگه داشته میشوند و سایر ویژگیها فیلتر میشوند.
5- متد whereStartsWith:
این متد ویژگیهایی را که کلید آنها با رشته خاصی شروع میشود، فیلتر میکند.
<div {{ $attributes->whereStartsWith('data-') }}>
{{ $slot }}
</div>این کد تمام ویژگیهایی که با data- شروع میشوند را به div اضافه میکند.
6- متد whereDoesntStartWith:
این متد ویژگیهایی که کلید آنها با رشته خاصی شروع نمیشود را فیلتر میکند.
<div {{ $attributes->whereDoesntStartWith('wire:') }}>
{{ $slot }}
</div>این کد تمام ویژگیهایی که با wire: شروع نمیشوند را نگه میدارد.
7- متد has:
این متد بررسی میکند که آیا یک ویژگی خاص در مجموعه ویژگیها وجود دارد یا خیر.
@if ($attributes->has('class'))
<div {{ $attributes }}>
{{ $slot }}
</div>
@else
<div class="default-class">
{{ $slot }}
</div>
@endifاین کد بررسی میکند که آیا ویژگی class وجود دارد و در صورت عدم وجود، یک کلاس پیشفرض استفاده میکند.
8- متد hasAny:
این متد بررسی میکند که آیا هر یک از ویژگیهای مورد نظر در مجموعه وجود دارند یا خیر.
@if ($attributes->hasAny(['class', 'id']))
<div {{ $attributes }}>
{{ $slot }}
</div>
@endif
این کد بررسی میکند که آیا یکی از ویژگیهای class یا id وجود دارند و در صورت وجود، div را با آنها رندر میکند.
9- متد get:
این متد مقدار یک ویژگی خاص را برمیگرداند. اگر ویژگی وجود نداشته باشد، میتوانید یک مقدار پیشفرض برای آن تعیین کنید.
<div id="{{ $attributes->get('id', 'default-id') }}">
{{ $slot }}
</div>در اینجا، اگر ویژگی id پاس داده نشده باشد، مقدار پیشفرض default-id استفاده میشود.
این متدها به شما اجازه میدهند که به شکلی انعطافپذیر با ویژگیهای HTML که به کامپوننتهای Blade لاراول پاس داده میشوند، کار کنید. با استفاده از این متدها، میتوانید ویژگیها را فیلتر کنید، ادغام کنید، بررسی کنید که آیا ویژگیای وجود دارد یا خیر، و در نهایت به شکل دقیقتری کامپوننتهای خود را مدیریت کنید.
.
Please open Telegram to view this post
VIEW IN TELEGRAM
فصل سه - Views
بخش سوم - کامپوننت ها - قسمت چهارم
درصورتی که یک پکیج توسعه می دهید که شامل چندین کامپوننت می باشد، می توانید به صورت زیر آن را در پروژه ها لود کنید:
ابتدا در یک پروایدر مانند App\Providers\AppServiceProvider.php درون متد boot یک نیم اسپیس را به پکیج خود اختصاص می دهید:
در مثال بالا nightshade برابر با نیم اسپیس داده شده می باشد.
و سپس برای استفاده:
کامپوننت calendar از نیم اسپیس nightshade که در پروایدر تعریف کرده ایم فراخوانی خواهد شد.
متد های داینامیک:
علاوه بر داینامیک بودن متغیر ها در views، متد ها نیز قابل استفاده هستند:
شما میتوانید درون کلاس کامپوننت خود یک متد را تعریف کنید و به صورت invoke درون view استفاده کنید:
برای استفاده:
کامپوننت های خطی یا inline:
درصورتی که یک کامپوننت خیلی کوچک نیاز دارید میتوانید با دستور زیر یک کاپوننت اینلاین ایجاد کنید.
این کامپوننت ها تنها از یک کلاس تشکیل شده اند و فایل view ندارند.
کافی است درون متد render کد های HTML خود را قرار دهید:
دستورات Blade سفارسی:
گاهی نیاز است دستورات Blade خود را پیاده سازی کنیم، در ادامه به متد های آن می پردازیم.
تمامی متد ها از فساد Blade قابل دسترس هستند.
1- متد directive:
این متد برای تعریف یک دایرکتیو سفارشی استفاده میشود. شما میتوانید یک دایرکتیو سفارشی با نام دلخواه خود ایجاد کنید که در قالبهای Blade قابل استفاده باشد.
برای استفاده:
2- متد if:
این متد برای ایجاد دایرکتیوهای شرطی (conditional directives) استفاده میشود. این دایرکتیوها به شما امکان میدهند تا شرطهای پیچیده را به صورت خواناتر و سادهتر در قالبهای Blade بنویسید.
برای استفاده:
3- متد component:
این متد به شما امکان میدهد تا یک کامپوننت کلاس Blade یا یک ویوی Blade را به یک دایرکتیو خاص متصل کنید.
برای استفاده:
4- متد include:
این متد برای تعریف یک دایرکتیو سفارشی که یک ویوی خاص را شامل میشود، استفاده میشود. این روش بسیار مشابه استفاده از @include است اما با دایرکتیو خاص خودتان.
برای استفاده:
#laravel #لاراول #فصل_۳
@AmirhDeveloper
.
بخش سوم - کامپوننت ها - قسمت چهارم
درصورتی که یک پکیج توسعه می دهید که شامل چندین کامپوننت می باشد، می توانید به صورت زیر آن را در پروژه ها لود کنید:
ابتدا در یک پروایدر مانند App\Providers\AppServiceProvider.php درون متد boot یک نیم اسپیس را به پکیج خود اختصاص می دهید:
public function boot(): void
{
Blade::componentNamespace('Nightshade\\Views\\Components', 'nightshade');
}
در مثال بالا nightshade برابر با نیم اسپیس داده شده می باشد.
و سپس برای استفاده:
<x-nightshade::calendar />
کامپوننت calendar از نیم اسپیس nightshade که در پروایدر تعریف کرده ایم فراخوانی خواهد شد.
متد های داینامیک:
علاوه بر داینامیک بودن متغیر ها در views، متد ها نیز قابل استفاده هستند:
شما میتوانید درون کلاس کامپوننت خود یک متد را تعریف کنید و به صورت invoke درون view استفاده کنید:
public function isSelected(string $option): bool
{
return $option === $this->selected;
}
برای استفاده:
<option {{ $isSelected($value) ? 'selected' : '' }} value="{{ $value }}">
{{ $label }}
</option>کامپوننت های خطی یا inline:
درصورتی که یک کامپوننت خیلی کوچک نیاز دارید میتوانید با دستور زیر یک کاپوننت اینلاین ایجاد کنید.
php artisan make:component Alert --inline
این کامپوننت ها تنها از یک کلاس تشکیل شده اند و فایل view ندارند.
کافی است درون متد render کد های HTML خود را قرار دهید:
public function render(): View|Closure|string
{
return <<<'blade'
<div>
</div>
blade;
}
دستورات Blade سفارسی:
گاهی نیاز است دستورات Blade خود را پیاده سازی کنیم، در ادامه به متد های آن می پردازیم.
تمامی متد ها از فساد Blade قابل دسترس هستند.
1- متد directive:
این متد برای تعریف یک دایرکتیو سفارشی استفاده میشود. شما میتوانید یک دایرکتیو سفارشی با نام دلخواه خود ایجاد کنید که در قالبهای Blade قابل استفاده باشد.
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});برای استفاده:
@datetime($post->created_at)
2- متد if:
این متد برای ایجاد دایرکتیوهای شرطی (conditional directives) استفاده میشود. این دایرکتیوها به شما امکان میدهند تا شرطهای پیچیده را به صورت خواناتر و سادهتر در قالبهای Blade بنویسید.
use Illuminate\Support\Facades\Blade;
Blade::if('admin', function () {
return isAdmin(); // isAdmin() not a valid function
});
برای استفاده:
@admin
<p>You are an admin.</p>
@else
<p>You are not an admin.</p>
@endadmin
3- متد component:
این متد به شما امکان میدهد تا یک کامپوننت کلاس Blade یا یک ویوی Blade را به یک دایرکتیو خاص متصل کنید.
Blade::component('alert', 'components.alert');برای استفاده:
@alert(['type' => 'danger'])
This is a warning alert!
@endalert
4- متد include:
این متد برای تعریف یک دایرکتیو سفارشی که یک ویوی خاص را شامل میشود، استفاده میشود. این روش بسیار مشابه استفاده از @include است اما با دایرکتیو خاص خودتان.
Blade::include('components.alert', 'alert');برای استفاده:
@alert(['type' => 'danger'])
This is a warning alert!
@endalert
#laravel #لاراول #فصل_۳
@AmirhDeveloper
.
Media is too big
VIEW IN TELEGRAM
فاجعه ربات های چت ناشناس...
https://youtu.be/1sZprSWgEsw?si=xyaHu4OINQ41NmJV
@MahdiyarDev
@LearnWithZmat24
@AmirhDeveloper
.
https://youtu.be/1sZprSWgEsw?si=xyaHu4OINQ41NmJV
@MahdiyarDev
اکثر افراد اطلاعی ندارند که بخش عمدهای از این رباتهای مدیریت گروه و رباتهای اینچنینی (مثل دیجیآنتی، همین ربات ناشناس و امثالاشون) که بهطور معمول رایگان و فراگیر هستند هم عملا درآمد اصلیشون از فروش اطلاعات هست، چه اطلاعاتی؟ این که فلان یوزر در چه گروههایی عضو هست، کیِ و کجا چه پیامهایی داده، با چهکسانی در ارتباط هست و ازین دسته اطلاعات. که حالا به سازمانهای مختلف و دولت یا تحت عنوان رباتهایی که در ازای n مقدار اعتبار بهطور مثال به شما میگن فلان یوزر توی چه گروههایی عضو هست (همچین سرویسای وجود داره)، فروخته میشه.
@LearnWithZmat24
دوستان هرچی هم بشه مهم اینه که اگاهی داشته باشن مردم
شما به عنوان بخش کوچیکی از جامعه که اطلاعاتی در این حوزه دارید بهتره خانواده ، دوستان و... رو آگاه کنید.
خیلی از این مشکلات از عدم آگاهی افراد میان. هرجا شخص یا اسخاص ثالث وسط میان قضیه دارک میشه
@AmirhDeveloper
.
❤8 4👍1🗿1
فصل چهار - مدلها و Eloquent ORM
بخش اول - معرفی Eloquent
الوکوئنت (Eloquent) یکی از بخشهای مهم و قدرتمند فریمورک لاراول است که به عنوان ORM (Object-Relational Mapping) عمل میکند. ORM یک تکنیک برنامهنویسی است که به توسعهدهندگان اجازه میدهد تا با پایگاه داده به صورت شیءگرا کار کنند و جداول پایگاه داده را به کلاسهای PHP تبدیل کنند.
کارکرد اصلی الوکوئنت:
الکوئنت به شما امکان میدهد تا با استفاده از مدلهای شیءگرا (Objects)، دادههای پایگاه داده را دستکاری کنید. این به شما اجازه میدهد که به جای نوشتن کوئریهای SQL خام، از متدهای شیءگرای الوکوئنت استفاده کنید که کد را تمیزتر و قابلفهمتر میکند.
ویژگیها و قابلیتهای الوکوئنت:
1- تعریف مدلها: در الوکوئنت، هر جدول پایگاه داده با یک مدل مطابقت دارد. این مدلها کلاسهایی هستند که رفتارها و ویژگیهای مرتبط با جداول پایگاه داده را مشخص میکنند. همچنین یکی از سه بخش معماری MVC را تشکیل می دهند.
2- روابط: الوکوئنت به شما امکان میدهد تا روابط بین جداول را به راحتی تعریف کنید. برای مثال:
ارتباط یک به یک (One to One).
ارتباط یک به چند (One to Many).
ارتباط چند به چند (Many to Many).
ارتباطات چندشکلی که یک مدل میتواند با چندین مدل دیگر مرتبط باشد (Polymorphic).
3- اسکوپهای عمومی و محلی: میتوانید کوئریهای عمومی که به صورت مکرر استفاده میشوند را در مدل تعریف کنید (Global Scopes) یا متدهایی ایجاد کنید که اسکوپهای محلی را تعریف کنند (Local Scopes).
4- پیمایشگرها و دسترسیگرها (Mutators and Accessors): به شما اجازه میدهد تا رفتارهای خاصی را هنگام تنظیم یا گرفتن ویژگیهای یک مدل اعمال کنید.
5- رخدادها (Events): الوکوئنت دارای سیستم رخدادهایی است که شما میتوانید به آنها گوش دهید و به ازای رویدادهایی مانند creating, updating, deleting و غیره واکنش نشان دهید.
6- کوئریسازی شیءگرا (Object-Oriented Querying): الکوئنت به شما اجازه میدهد تا به جای استفاده از SQL خام، از متدهای شیءگرا برای ایجاد کوئریها استفاده کنید. این کوئریها شامل فیلتر کردن، مرتبسازی، گروهبندی و سایر عملیاتهای پیچیده میشود، بدون اینکه نیازی به نوشتن یک خط SQL باشد.
7- مهاجرتها (Migrations) و بذرها (Seeders): در کنار مدلهای الوکوئنت، لاراول ابزارهایی برای مدیریت ساختار پایگاه داده (مهاجرتها) و پر کردن جداول با دادههای نمونه (سیدر و فکتوری) فراهم میکند. این ابزارها به توسعهدهندگان کمک میکنند تا بهراحتی پایگاه دادههای خود را ایجاد و مدیریت کنند.
8- پشتیبانی از Eager Loading و Lazy Loading: الکوئنت از دو روش برای بارگذاری دادههای مرتبط با مدلها پشتیبانی میکند:
بارگذاری (Eager): این روش به شما امکان میدهد دادههای مرتبط با یک مدل را همزمان با فراخوانی مدل بارگذاری کنید تا از تعداد کوئریهای اضافی جلوگیری شود.
بارگذاری (Lazy): این روش زمانی دادههای مرتبط را بارگذاری میکند که به آنها نیاز داشته باشید. این ممکن است منجر به ارسال کوئریهای اضافی به پایگاه داده شود.
9- پشتیبانی از Soft Deletes: الکوئنت امکان (Soft Delete) را فراهم میکند که به جای حذف دائمی یک رکورد، آن را "پنهان" میکند تا بعداً بتوان آن را بازیابی کرد. این کار از طریق یک فیلد اضافی در جدول انجام میشود که تاریخ و زمان حذف را ثبت میکند.
10- و...
مزایا و کاربردهای عملی:
استفاده از الوکوئنت باعث میشود که کدها به مراتب خواناتر و قابل نگهداریتر باشند.
نیاز به نوشتن کوئریهای SQL به حداقل میرسد و توسعهدهنده میتواند روی منطق برنامه تمرکز کند.
الوکوئنت با ارائه ابزارهایی برای مدیریت روابط بین جداول، پیچیدگی مدیریت این روابط را به طور چشمگیری کاهش میدهد.
الوکوئنت برای توسعهدهندگانی که از لاراول برای ساخت برنامههای وب استفاده میکنند، ابزاری ضروری است. این ابزار در تمامی جنبههای کار با پایگاه داده از جمله تعریف مدلها، روابط، کوئریسازی و حتی مدیریت مهاجرتهای پایگاه داده (Database Migrations) کاربرد دارد.
در نهایت، الوکوئنت به عنوان یکی از ویژگیهای برجسته لاراول، یک سطح انتزاعی بسیار قوی برای کار با پایگاه دادهها فراهم میکند که هم کار را سریعتر و هم کدها را تمیزتر و قابل نگهداریتر میسازد.
در بخش های بعدی با تمام موارد نام برده شده به طور مفصل آشنا خواهیم شد.
▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
✅ @AmirhDeveloper
.
بخش اول - معرفی Eloquent
الوکوئنت (Eloquent) یکی از بخشهای مهم و قدرتمند فریمورک لاراول است که به عنوان ORM (Object-Relational Mapping) عمل میکند. ORM یک تکنیک برنامهنویسی است که به توسعهدهندگان اجازه میدهد تا با پایگاه داده به صورت شیءگرا کار کنند و جداول پایگاه داده را به کلاسهای PHP تبدیل کنند.
کارکرد اصلی الوکوئنت:
الکوئنت به شما امکان میدهد تا با استفاده از مدلهای شیءگرا (Objects)، دادههای پایگاه داده را دستکاری کنید. این به شما اجازه میدهد که به جای نوشتن کوئریهای SQL خام، از متدهای شیءگرای الوکوئنت استفاده کنید که کد را تمیزتر و قابلفهمتر میکند.
ویژگیها و قابلیتهای الوکوئنت:
1- تعریف مدلها: در الوکوئنت، هر جدول پایگاه داده با یک مدل مطابقت دارد. این مدلها کلاسهایی هستند که رفتارها و ویژگیهای مرتبط با جداول پایگاه داده را مشخص میکنند. همچنین یکی از سه بخش معماری MVC را تشکیل می دهند.
2- روابط: الوکوئنت به شما امکان میدهد تا روابط بین جداول را به راحتی تعریف کنید. برای مثال:
ارتباط یک به یک (One to One).
ارتباط یک به چند (One to Many).
ارتباط چند به چند (Many to Many).
ارتباطات چندشکلی که یک مدل میتواند با چندین مدل دیگر مرتبط باشد (Polymorphic).
3- اسکوپهای عمومی و محلی: میتوانید کوئریهای عمومی که به صورت مکرر استفاده میشوند را در مدل تعریف کنید (Global Scopes) یا متدهایی ایجاد کنید که اسکوپهای محلی را تعریف کنند (Local Scopes).
4- پیمایشگرها و دسترسیگرها (Mutators and Accessors): به شما اجازه میدهد تا رفتارهای خاصی را هنگام تنظیم یا گرفتن ویژگیهای یک مدل اعمال کنید.
5- رخدادها (Events): الوکوئنت دارای سیستم رخدادهایی است که شما میتوانید به آنها گوش دهید و به ازای رویدادهایی مانند creating, updating, deleting و غیره واکنش نشان دهید.
6- کوئریسازی شیءگرا (Object-Oriented Querying): الکوئنت به شما اجازه میدهد تا به جای استفاده از SQL خام، از متدهای شیءگرا برای ایجاد کوئریها استفاده کنید. این کوئریها شامل فیلتر کردن، مرتبسازی، گروهبندی و سایر عملیاتهای پیچیده میشود، بدون اینکه نیازی به نوشتن یک خط SQL باشد.
7- مهاجرتها (Migrations) و بذرها (Seeders): در کنار مدلهای الوکوئنت، لاراول ابزارهایی برای مدیریت ساختار پایگاه داده (مهاجرتها) و پر کردن جداول با دادههای نمونه (سیدر و فکتوری) فراهم میکند. این ابزارها به توسعهدهندگان کمک میکنند تا بهراحتی پایگاه دادههای خود را ایجاد و مدیریت کنند.
8- پشتیبانی از Eager Loading و Lazy Loading: الکوئنت از دو روش برای بارگذاری دادههای مرتبط با مدلها پشتیبانی میکند:
بارگذاری (Eager): این روش به شما امکان میدهد دادههای مرتبط با یک مدل را همزمان با فراخوانی مدل بارگذاری کنید تا از تعداد کوئریهای اضافی جلوگیری شود.
بارگذاری (Lazy): این روش زمانی دادههای مرتبط را بارگذاری میکند که به آنها نیاز داشته باشید. این ممکن است منجر به ارسال کوئریهای اضافی به پایگاه داده شود.
9- پشتیبانی از Soft Deletes: الکوئنت امکان (Soft Delete) را فراهم میکند که به جای حذف دائمی یک رکورد، آن را "پنهان" میکند تا بعداً بتوان آن را بازیابی کرد. این کار از طریق یک فیلد اضافی در جدول انجام میشود که تاریخ و زمان حذف را ثبت میکند.
10- و...
مزایا و کاربردهای عملی:
استفاده از الوکوئنت باعث میشود که کدها به مراتب خواناتر و قابل نگهداریتر باشند.
نیاز به نوشتن کوئریهای SQL به حداقل میرسد و توسعهدهنده میتواند روی منطق برنامه تمرکز کند.
الوکوئنت با ارائه ابزارهایی برای مدیریت روابط بین جداول، پیچیدگی مدیریت این روابط را به طور چشمگیری کاهش میدهد.
الوکوئنت برای توسعهدهندگانی که از لاراول برای ساخت برنامههای وب استفاده میکنند، ابزاری ضروری است. این ابزار در تمامی جنبههای کار با پایگاه داده از جمله تعریف مدلها، روابط، کوئریسازی و حتی مدیریت مهاجرتهای پایگاه داده (Database Migrations) کاربرد دارد.
در نهایت، الوکوئنت به عنوان یکی از ویژگیهای برجسته لاراول، یک سطح انتزاعی بسیار قوی برای کار با پایگاه دادهها فراهم میکند که هم کار را سریعتر و هم کدها را تمیزتر و قابل نگهداریتر میسازد.
در بخش های بعدی با تمام موارد نام برده شده به طور مفصل آشنا خواهیم شد.
.
Please open Telegram to view this post
VIEW IN TELEGRAM
این سیستم مشابه لاراول بازطراحی شده.
به جای استفاده از متغیرهای $_ENV، کانفیگها از طریق فساد Config قابل دسترسی هستند.
File، برای ذخیرهسازی دادهها در فایل (درایور پیشفرض).Redis، ذخیرهسازی با استفاده از Redis (نیازمند به اکستنشن redis).Database، ذخیرهسازی در دیتابیس (نیازمند ایجاد جدول cache که مایگریشن آن بهطور پیشفرض در پروژه وجود دارد).APCu، برای دخیره سازی در حافظه APC (نیازمند به اکستنشن apcu)این سیستم به سادگی از فساد
Cache در دسترس هست.این روش ها معمولا در سرور ها در دسترس هستند و متد های پیشنهادی LaraGram نیز میباشند.
سیستم Logging برای رصد روند اجرا
سیستم Translator برای ربات چند زبانه
سیستم Timer برای کار با زمان ها
سیستم Caching برای بهینه سازی اجرا
سیستم Conversation برای ایجاد گفتگو
بازنویسی اختصاصی الوکوئنت لاراول
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - laraXgram/LaraGram: LaraGram, an advanced framework for Telegram Bot development
LaraGram, an advanced framework for Telegram Bot development - laraXgram/LaraGram
🔥5👍3❤2
فصل چهار - مدلها و Eloquent ORM
بخش دوم - مدل ها - قسمت اول
برای ایجاد یک مدل، کافی است دستور زیر اجرا کنید:
این دستور یک فایل جدید به نام User.php در پوشه app/Models ایجاد میکند که به شکل زیر است:
هر مدل در لاراول به صورت پیشفرض به یک جدول پایگاه داده مرتبط است. لاراول با استفاده از قواعد نامگذاری، نام جدول را از نام مدل استخراج میکند. به طور مثال، مدل User به جدول users متصل میشود.
نام مدل باید به صورت مفرد (User) و نام جدول به صورت جمع (users) باشد.
اگر نام جدول شما متفاوت باشد، میتوانید آن را به صورت دستی مشخص کنید:
لاراول یک ویژگی امنیتی به نام Mass Assignment Protection دارد که به شما اجازه میدهد فیلدهایی که میتوانند به صورت گروهی پر شوند را مشخص کنید. این کار با استفاده از ویژگی $fillable انجام میشود:
با استفاده از این ویژگی، فقط فیلدهای name، email و password میتوانند به صورت گروهی پر شوند. این کار مانع از حملات احتمالی امنیتی میشود.
از این پس می توانید با استفاده از کلاس User با جدول users ارتباط برقرار کنید.
در این قسمت با متد های اصلی برای عملیات CRUD آشنا می شویم.
1- متد all
متد all تمام رکوردهای یک جدول را برمیگرداند. این متد بدون هیچ شرطی، تمامی رکوردها را برمیگرداند.
این کد تمامی رکوردهای جدول users را برمیگرداند. به خاطر داشته باشید که اگر تعداد رکوردها زیاد باشد، استفاده از این متد میتواند به عملکرد پایگاه داده آسیب بزند.
2- متد find
متد find برای یافتن یک رکورد بر اساس مقدار کلید اصلی (Primary Key) آن استفاده میشود. این متد یک رکورد را به عنوان شیء مدل بازمیگرداند یا اگر رکوردی پیدا نشود، مقدار null برمیگردد.
این کد کاربری با id برابر با ۱ را از جدول users پیدا میکند.
3- متد where
متد where برای اضافه کردن شرط به پرس و جو استفاده میشود. این متد یک یا چند شرط را برای محدود کردن نتایج اعمال میکند.
این کد تمام کاربرانی که سن آنها بالاتر از ۱۸ سال است را برمیگرداند.
میتوان از چندین شرط where پشت سر هم استفاده کرد:
این کد کاربرانی را برمیگرداند که هم فعال هستند و هم سن آنها بالاتر از ۱۸ سال است.
نکته: به طور پیشفرض اگر دو پارامتر به متد where داده شود از اپراتور = استفاده می کند، مگر ذکر شود.
4- متد orWhere
متد orWhere برای اضافه کردن شرطهای OR به پرس و جو استفاده میشود. این متد در جایی به کار میرود که میخواهیم نتایج با یکی از شرطها تطابق داشته باشند.
این کد کاربرانی را برمیگرداند که یا فعال هستند یا سن آنها بالاتر از ۱۸ سال است.
5- متد get
متد get برای بازیابی مجموعهای از رکوردها با شرایط خاص استفاده میشود. این متد بعد از استفاده از یک یا چند متد شرطی (مانند where و غیره) به کار میرود و نتایج را به صورت یک Collection برمیگرداند.
6- متد delete
متد delete برای حذف یک رکورد یا چندین رکورد از پایگاه داده استفاده میشود. برای حذف یک رکورد، ابتدا باید آن را پیدا کرده و سپس متد delete را روی آن اجرا کنیم.
این کد کاربری با id برابر با ۱ را از جدول users حذف میکند.
7- متد update
متد update برای بهروزرسانی یک یا چند فیلد از یک رکورد استفاده میشود.
این کد نام کاربری با id برابر با ۱ را به 'John Smith' تغییر میدهد.
متد create:
متد create برای ایجاد یک رکورد جدید در پایگاه داده استفاده میشود. این متد به یک آرایه از دادهها نیاز دارد که باید با ویژگیهای $fillable مدل تطابق داشته باشند.
این کد یک رکورد جدید با موارد داده شده ایجاد می کند.
در قسمت های بعدی با سایر متد ها آشنا می شویم.
#laravel #لاراول #فصل_۴
@AmirhDeveloper
.
بخش دوم - مدل ها - قسمت اول
برای ایجاد یک مدل، کافی است دستور زیر اجرا کنید:
php artisan make:model User
این دستور یک فایل جدید به نام User.php در پوشه app/Models ایجاد میکند که به شکل زیر است:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//
}
هر مدل در لاراول به صورت پیشفرض به یک جدول پایگاه داده مرتبط است. لاراول با استفاده از قواعد نامگذاری، نام جدول را از نام مدل استخراج میکند. به طور مثال، مدل User به جدول users متصل میشود.
نام مدل باید به صورت مفرد (User) و نام جدول به صورت جمع (users) باشد.
اگر نام جدول شما متفاوت باشد، میتوانید آن را به صورت دستی مشخص کنید:
class User extends Model
{
protected $table = 'table_name';
}
لاراول یک ویژگی امنیتی به نام Mass Assignment Protection دارد که به شما اجازه میدهد فیلدهایی که میتوانند به صورت گروهی پر شوند را مشخص کنید. این کار با استفاده از ویژگی $fillable انجام میشود:
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}
با استفاده از این ویژگی، فقط فیلدهای name، email و password میتوانند به صورت گروهی پر شوند. این کار مانع از حملات احتمالی امنیتی میشود.
از این پس می توانید با استفاده از کلاس User با جدول users ارتباط برقرار کنید.
در این قسمت با متد های اصلی برای عملیات CRUD آشنا می شویم.
1- متد all
متد all تمام رکوردهای یک جدول را برمیگرداند. این متد بدون هیچ شرطی، تمامی رکوردها را برمیگرداند.
$users = User::all();
این کد تمامی رکوردهای جدول users را برمیگرداند. به خاطر داشته باشید که اگر تعداد رکوردها زیاد باشد، استفاده از این متد میتواند به عملکرد پایگاه داده آسیب بزند.
2- متد find
متد find برای یافتن یک رکورد بر اساس مقدار کلید اصلی (Primary Key) آن استفاده میشود. این متد یک رکورد را به عنوان شیء مدل بازمیگرداند یا اگر رکوردی پیدا نشود، مقدار null برمیگردد.
$user = User::find(1);
این کد کاربری با id برابر با ۱ را از جدول users پیدا میکند.
3- متد where
متد where برای اضافه کردن شرط به پرس و جو استفاده میشود. این متد یک یا چند شرط را برای محدود کردن نتایج اعمال میکند.
$adultUsers = User::where('age', '>', 18)->get();این کد تمام کاربرانی که سن آنها بالاتر از ۱۸ سال است را برمیگرداند.
میتوان از چندین شرط where پشت سر هم استفاده کرد:
$filteredUsers = User::where('status', 'active')->where('age', '>', 18)->get();این کد کاربرانی را برمیگرداند که هم فعال هستند و هم سن آنها بالاتر از ۱۸ سال است.
نکته: به طور پیشفرض اگر دو پارامتر به متد where داده شود از اپراتور = استفاده می کند، مگر ذکر شود.
4- متد orWhere
متد orWhere برای اضافه کردن شرطهای OR به پرس و جو استفاده میشود. این متد در جایی به کار میرود که میخواهیم نتایج با یکی از شرطها تطابق داشته باشند.
$users = User::where('status', 'active')->orWhere('age', '>', 18)->get();این کد کاربرانی را برمیگرداند که یا فعال هستند یا سن آنها بالاتر از ۱۸ سال است.
5- متد get
متد get برای بازیابی مجموعهای از رکوردها با شرایط خاص استفاده میشود. این متد بعد از استفاده از یک یا چند متد شرطی (مانند where و غیره) به کار میرود و نتایج را به صورت یک Collection برمیگرداند.
6- متد delete
متد delete برای حذف یک رکورد یا چندین رکورد از پایگاه داده استفاده میشود. برای حذف یک رکورد، ابتدا باید آن را پیدا کرده و سپس متد delete را روی آن اجرا کنیم.
$user = User::find(1)->delete();
این کد کاربری با id برابر با ۱ را از جدول users حذف میکند.
7- متد update
متد update برای بهروزرسانی یک یا چند فیلد از یک رکورد استفاده میشود.
User::find(1)->update([
"username" => "John Smith"
]);
این کد نام کاربری با id برابر با ۱ را به 'John Smith' تغییر میدهد.
متد create:
متد create برای ایجاد یک رکورد جدید در پایگاه داده استفاده میشود. این متد به یک آرایه از دادهها نیاز دارد که باید با ویژگیهای $fillable مدل تطابق داشته باشند.
$user = User::create([
'name' => 'Alice Doe',
'email' => 'alice@example.com',
'password' => bcrypt('password123')
]);
این کد یک رکورد جدید با موارد داده شده ایجاد می کند.
در قسمت های بعدی با سایر متد ها آشنا می شویم.
#laravel #لاراول #فصل_۴
@AmirhDeveloper
.
فصل چهار - مدلها و Eloquent ORM
بخش دوم - مدل ها - قسمت دوم (متدهای ایجاد، ذخیره)
1- متد create
برای ایجاد و ذخیره یک مدل جدید در دیتابیس استفاده میشود. این متد یک آرایه از ویژگیها را میگیرد و یک رکورد جدید را در دیتابیس ایجاد و ذخیره میکند.
2- متد firstOrNew
سعی میکند یک رکورد مطابق با شرایط مشخص شده را در دیتابیس پیدا کند. اگر پیدا شود، همان مدل را برمیگرداند؛ در غیر این صورت، یک مدل جدید ایجاد میکند ولی آن را ذخیره نمیکند.
اگر چنین کاربری وجود داشته باشد، آن را برمیگرداند. اگر نه، یک نمونهی جدید ایجاد میکند و شما میتوانید قبل از ذخیره، اطلاعات بیشتری را به آن اضافه کنید.
3- متد firstOrCreate
مشابه firstOrNew است، اما به محض اینکه مدل جدید را ایجاد کرد، بلافاصله آن را در دیتابیس ذخیره میکند.
4- متد updateOrCreate
یک رکورد را بر اساس شرایط مشخص شده بهروز رسانی میکند و اگر وجود نداشت، یک رکورد جدید ایجاد و ذخیره میکند.
5- متد save
برای ذخیره کردن یک مدل جدید یا بهروزرسانی یک مدل موجود در دیتابیس استفاده میشود.
این کد یک نمونهی جدید از مدل User ایجاد میکند، سپس مقادیر فیلدهای name را تنظیم میکند و در نهایت آن را در دیتابیس ذخیره میکند.
6- متد saveMany
برای ذخیره کردن چندین مدل مرتبط در یک زمان استفاده میشود.
این مثال برای یک پست چندین کامنت ایجاد و ذخیره می کند (توضیح کامل تر پس از آموزش روابط دیتابیس)
7- متد saveQuietly
مشابه متد save است، با این تفاوت که رویدادهای مدل (events) را تحریک نمیکند.
8- متد createMany
برای ایجاد و ذخیره چندین مدل به طور همزمان استفاده میشود.
این مثال برای یک پست چندین کامنت ایجاد می کند (توضیح کامل تر پس از آموزش روابط دیتابیس)
9- متد createManyQuietly
مشابه createMany است، اما رویدادهای مدل (events) را تحریک نمیکند.
10- متد createQuietly
مشابه create است، اما رویدادهای مدل را تحریک نمیکند.
11- متد insert
برای وارد کردن چندین رکورد به طور همزمان در جدول دیتابیس استفاده میشود. این متد یک نمونه از مدل را برنمیگرداند.
12- متد insertOrIgnore
مانند insert است، اما اگر رکوردها در زمان درج، خطایی ایجاد کنند (مانند تکراری بودن دادهها)، این خطاها را نادیده میگیرد.
13- متد insertUsing
به شما اجازه میدهد دادهها را از یک کوئری دیگر درج کنید.
این کد کاربران غیر فعال را از جدول users انتخاب کرده و در جدول archived_users درج میکند.(توضیح سایر متد ها در قسمت های بعد).
14- متد insertGetId
یک رکورد جدید درج میکند و شناسه (ID) آن رکورد را برمیگرداند.
15- متد upsert
چندین رکورد را درج یا بهروزرسانی میکند. این متد برای شرایطی مناسب است که شما میخواهید رکوردهایی که وجود دارند را بهروزرسانی کنید و رکوردهایی که وجود ندارند را ایجاد کنید.
اگر کاربری با همان ایمیل وجود داشته باشد، فقط نامش بهروزرسانی میشود؛ وگرنه رکورد جدیدی ایجاد میشود.
16- متد updateOrInsert
این متد شبیه updateOrCreate است، با این تفاوت که مستقیماً با دیتابیس کار میکند و مدل را باز نمیگرداند.
17- متد fill
برای پر کردن مدل با دادههای مشخص استفاده میشود. این متد مدل را ذخیره نمیکند؛ تنها مقادیر فیلدها را تنظیم میکند.
#laravel #لاراول #فصل_۴
@AmirhDeveloper
.
بخش دوم - مدل ها - قسمت دوم (متدهای ایجاد، ذخیره)
1- متد create
برای ایجاد و ذخیره یک مدل جدید در دیتابیس استفاده میشود. این متد یک آرایه از ویژگیها را میگیرد و یک رکورد جدید را در دیتابیس ایجاد و ذخیره میکند.
$user = User::create([
'name' => 'John',
]);
2- متد firstOrNew
سعی میکند یک رکورد مطابق با شرایط مشخص شده را در دیتابیس پیدا کند. اگر پیدا شود، همان مدل را برمیگرداند؛ در غیر این صورت، یک مدل جدید ایجاد میکند ولی آن را ذخیره نمیکند.
$user = User::firstOrNew(['email' => 'example@gmail.com']);
$user->name = 'John';
$user->save();
اگر چنین کاربری وجود داشته باشد، آن را برمیگرداند. اگر نه، یک نمونهی جدید ایجاد میکند و شما میتوانید قبل از ذخیره، اطلاعات بیشتری را به آن اضافه کنید.
3- متد firstOrCreate
مشابه firstOrNew است، اما به محض اینکه مدل جدید را ایجاد کرد، بلافاصله آن را در دیتابیس ذخیره میکند.
$user = User::firstOrCreate(
['email' => 'example@gmail.com'],
['name' => 'John']
);
4- متد updateOrCreate
یک رکورد را بر اساس شرایط مشخص شده بهروز رسانی میکند و اگر وجود نداشت، یک رکورد جدید ایجاد و ذخیره میکند.
$user = User::updateOrCreate(
['email' => 'example@gmail.com'],
['name' => 'John']
);
5- متد save
برای ذخیره کردن یک مدل جدید یا بهروزرسانی یک مدل موجود در دیتابیس استفاده میشود.
$user = new User;
$user->name = 'John';
$user->save();
این کد یک نمونهی جدید از مدل User ایجاد میکند، سپس مقادیر فیلدهای name را تنظیم میکند و در نهایت آن را در دیتابیس ذخیره میکند.
6- متد saveMany
برای ذخیره کردن چندین مدل مرتبط در یک زمان استفاده میشود.
$post = Post::find(1);
$comments = [
new Comment(['message' => 'First']),
new Comment(['message' => 'Second']),
];
$post->comments()->saveMany($comments);
این مثال برای یک پست چندین کامنت ایجاد و ذخیره می کند (توضیح کامل تر پس از آموزش روابط دیتابیس)
7- متد saveQuietly
مشابه متد save است، با این تفاوت که رویدادهای مدل (events) را تحریک نمیکند.
8- متد createMany
برای ایجاد و ذخیره چندین مدل به طور همزمان استفاده میشود.
$post = Post::find(1);
$post->comments()->createMany([
['message' => 'First'],
['message' => 'Second']
]);
این مثال برای یک پست چندین کامنت ایجاد می کند (توضیح کامل تر پس از آموزش روابط دیتابیس)
9- متد createManyQuietly
مشابه createMany است، اما رویدادهای مدل (events) را تحریک نمیکند.
10- متد createQuietly
مشابه create است، اما رویدادهای مدل را تحریک نمیکند.
11- متد insert
برای وارد کردن چندین رکورد به طور همزمان در جدول دیتابیس استفاده میشود. این متد یک نمونه از مدل را برنمیگرداند.
User::insert([
['name' => 'John'],
['name' => 'Jane']
]);
12- متد insertOrIgnore
مانند insert است، اما اگر رکوردها در زمان درج، خطایی ایجاد کنند (مانند تکراری بودن دادهها)، این خطاها را نادیده میگیرد.
13- متد insertUsing
به شما اجازه میدهد دادهها را از یک کوئری دیگر درج کنید.
ArchivedUser::insertUsing(['name', 'email'], function ($query) {
$query->select('name', 'email')->from('users')->where('active', 0);
});این کد کاربران غیر فعال را از جدول users انتخاب کرده و در جدول archived_users درج میکند.(توضیح سایر متد ها در قسمت های بعد).
14- متد insertGetId
یک رکورد جدید درج میکند و شناسه (ID) آن رکورد را برمیگرداند.
User::insertGetId(
['name' => 'John']
);
15- متد upsert
چندین رکورد را درج یا بهروزرسانی میکند. این متد برای شرایطی مناسب است که شما میخواهید رکوردهایی که وجود دارند را بهروزرسانی کنید و رکوردهایی که وجود ندارند را ایجاد کنید.
User::upsert([
['email' => 'john@gmail.com', 'name' => 'John'],
['email' => 'jane@gmail.com', 'name' => 'Jane']
], ['email'], ['name']);
اگر کاربری با همان ایمیل وجود داشته باشد، فقط نامش بهروزرسانی میشود؛ وگرنه رکورد جدیدی ایجاد میشود.
16- متد updateOrInsert
این متد شبیه updateOrCreate است، با این تفاوت که مستقیماً با دیتابیس کار میکند و مدل را باز نمیگرداند.
17- متد fill
برای پر کردن مدل با دادههای مشخص استفاده میشود. این متد مدل را ذخیره نمیکند؛ تنها مقادیر فیلدها را تنظیم میکند.
$user = new User;
$user->fill(['name' => 'John']);
$user->save();
#laravel #لاراول #فصل_۴
@AmirhDeveloper
.
فصل چهار - مدلها و Eloquent ORM
بخش دوم - مدل ها - قسمت سوم (متدهای ویرایش، حذف)
1- متد update
برای بهروزرسانی رکوردهای موجود در دیتابیس استفاده میشود.
این کد فیلد name تمام کاربران با ایمیل مشخص شده را به 'John' تغییر میدهد.
2- متد increment
برای افزایش مقدار یک فیلد عددی استفاده میشود.
این کد مقدار فیلد age کاربر با id 1 را به اندازه 2 افزایش میدهد.
3- متد decrement
برای کاهش مقدار یک فیلد عددی استفاده میشود.
این کد مقدار فیلد age کاربر با id 1 را به اندازه 2 کاهش میدهد.
4- متد incrementEach
برای افزایش مقدار یک فیلد عددی در چندین رکورد به طور همزمان استفاده میشود.
این کد مقدار فیلد credits را برای کاربران با شناسههای 1، 2 و 3 به اندازه 5 افزایش میدهد.
5- متد decrementEach
برای کاهش مقدار یک فیلد عددی در چندین رکورد به طور همزمان استفاده میشود.
این کد مقدار فیلد credits را برای کاربران با شناسههای 1، 2 و 3 به اندازه 5 کاهش میدهد.
6- متد delete
برای حذف رکوردهای موجود در دیتابیس استفاده میشود.
این کد کاربر با id 1 را از دیتابیس حذف میکند.
7- متد truncate
برای حذف تمام رکوردها از یک جدول و بازنشانی auto-increment استفاده میشود.
این کد تمام کاربران را از جدول users حذف میکند و شناسه خودکار را به مقدار اولیه بازنشانی میکند.
8- متد deleteQuietly
مشابه delete است، اما رویدادهای مدل را تحریک نمیکند.
9- متد forceDelete
برای حذف دائم رکوردها از دیتابیس استفاده میشود، حتی اگر از ویژگی Soft Delete استفاده شود.
این کد کاربر با id 1 را به طور دائم از دیتابیس حذف میکند.
10- متد forceDeleteQuietly
مشابه forceDelete است، اما رویدادهای مدل را تحریک نمیکند.
11- متد destroy
برای حذف یک یا چند رکورد با شناسههای مشخص استفاده میشود.
این کد کاربران با شناسههای 1، 2 و 3 را از دیتابیس حذف میکند.
12- متد forceDestroy
برای حذف دائم یک یا چند رکورد حتی با استفاده از ویژگی Soft Delete استفاده میشود.
این کد کاربران با شناسههای 1، 2 و 3 را به طور دائم از دیتابیس حذف میکند، حتی اگر در حالت Soft Delete باشند.
13- متد restore
برای بازیابی رکوردهایی که Soft Delete شدهاند، استفاده میشود.
این کد کاربر با id 1 را که Soft Delete شده بود، بازیابی میکند.
14- متد restoreQuietly
مشابه restore است، اما رویدادهای مدل را تحریک نمیکند.
15- متد replicate
برای ایجاد یک کپی از یک مدل موجود استفاده میشود.
این کد یک کپی از کاربر با id 1 ایجاد کرده و آن را به عنوان یک رکورد جدید ذخیره میکند.
16- متد withTrashed
به شما اجازه میدهد رکوردهایی که Soft Delete شده اند را نیز در نتایج جستجو بازگردانید.
این کد تمام کاربران با نام 'John' را برمیگرداند، حتی آنهایی که Soft Delete شدهاند.
17- متد onlyTrashed
به شما اجازه میدهد تنها رکوردهایی که Soft Delete شده اند را در نتایج جستجو بازگردانید.
این کد تمام کاربران با نام 'John' که Soft Delete شدهاند را برمیگرداند.
18- متد trashed
بررسی میکند که آیا یک رکورد خاص Soft Delete شده است یا خیر.
این کد بررسی میکند که آیا کاربر با id برابر 1 Soft Delete شده است یا خیر و اگر بله، کدی را اجرا میکند.
▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.
بخش دوم - مدل ها - قسمت سوم (متدهای ویرایش، حذف)
1- متد update
برای بهروزرسانی رکوردهای موجود در دیتابیس استفاده میشود.
User::where('email', 'example@gmail.com')->update(['name' => 'John']);این کد فیلد name تمام کاربران با ایمیل مشخص شده را به 'John' تغییر میدهد.
2- متد increment
برای افزایش مقدار یک فیلد عددی استفاده میشود.
User::where('id', 1)->increment('age', 2);این کد مقدار فیلد age کاربر با id 1 را به اندازه 2 افزایش میدهد.
3- متد decrement
برای کاهش مقدار یک فیلد عددی استفاده میشود.
User::where('id', 1)->decrement('age', 2);این کد مقدار فیلد age کاربر با id 1 را به اندازه 2 کاهش میدهد.
4- متد incrementEach
برای افزایش مقدار یک فیلد عددی در چندین رکورد به طور همزمان استفاده میشود.
User::whereIn('id', [1, 2, 3])->incrementEach('credits', 5);این کد مقدار فیلد credits را برای کاربران با شناسههای 1، 2 و 3 به اندازه 5 افزایش میدهد.
5- متد decrementEach
برای کاهش مقدار یک فیلد عددی در چندین رکورد به طور همزمان استفاده میشود.
User::whereIn('id', [1, 2, 3])->decrementEach('credits', 5);این کد مقدار فیلد credits را برای کاربران با شناسههای 1، 2 و 3 به اندازه 5 کاهش میدهد.
6- متد delete
برای حذف رکوردهای موجود در دیتابیس استفاده میشود.
User::where('id', 1)->delete();این کد کاربر با id 1 را از دیتابیس حذف میکند.
7- متد truncate
برای حذف تمام رکوردها از یک جدول و بازنشانی auto-increment استفاده میشود.
User::truncate();
این کد تمام کاربران را از جدول users حذف میکند و شناسه خودکار را به مقدار اولیه بازنشانی میکند.
8- متد deleteQuietly
مشابه delete است، اما رویدادهای مدل را تحریک نمیکند.
9- متد forceDelete
برای حذف دائم رکوردها از دیتابیس استفاده میشود، حتی اگر از ویژگی Soft Delete استفاده شود.
User::find(1)->forceDelete();
این کد کاربر با id 1 را به طور دائم از دیتابیس حذف میکند.
10- متد forceDeleteQuietly
مشابه forceDelete است، اما رویدادهای مدل را تحریک نمیکند.
11- متد destroy
برای حذف یک یا چند رکورد با شناسههای مشخص استفاده میشود.
User::destroy([1, 2, 3]);
این کد کاربران با شناسههای 1، 2 و 3 را از دیتابیس حذف میکند.
12- متد forceDestroy
برای حذف دائم یک یا چند رکورد حتی با استفاده از ویژگی Soft Delete استفاده میشود.
User::forceDestroy([1, 2, 3]);
این کد کاربران با شناسههای 1، 2 و 3 را به طور دائم از دیتابیس حذف میکند، حتی اگر در حالت Soft Delete باشند.
13- متد restore
برای بازیابی رکوردهایی که Soft Delete شدهاند، استفاده میشود.
User::where('id', 1)->restore();این کد کاربر با id 1 را که Soft Delete شده بود، بازیابی میکند.
14- متد restoreQuietly
مشابه restore است، اما رویدادهای مدل را تحریک نمیکند.
15- متد replicate
برای ایجاد یک کپی از یک مدل موجود استفاده میشود.
$user = User::find(1);
$newUser = $user->replicate();
$newUser->save();
این کد یک کپی از کاربر با id 1 ایجاد کرده و آن را به عنوان یک رکورد جدید ذخیره میکند.
16- متد withTrashed
به شما اجازه میدهد رکوردهایی که Soft Delete شده اند را نیز در نتایج جستجو بازگردانید.
$users = User::withTrashed()->where('name', 'John')->get();این کد تمام کاربران با نام 'John' را برمیگرداند، حتی آنهایی که Soft Delete شدهاند.
17- متد onlyTrashed
به شما اجازه میدهد تنها رکوردهایی که Soft Delete شده اند را در نتایج جستجو بازگردانید.
$users = User::onlyTrashed()->where('name', 'John')->get();این کد تمام کاربران با نام 'John' که Soft Delete شدهاند را برمیگرداند.
18- متد trashed
بررسی میکند که آیا یک رکورد خاص Soft Delete شده است یا خیر.
$user = User::find(1);
if ($user->trashed()) {
//
}
این کد بررسی میکند که آیا کاربر با id برابر 1 Soft Delete شده است یا خیر و اگر بله، کدی را اجرا میکند.
.
Please open Telegram to view this post
VIEW IN TELEGRAM