🔸در لاراول، بهصورت پیشفرض اگر کسی تلاش کند به رکوردی که وجود ندارد درخواست ارسال کند، با ارور
اما از نسخه ۸ لاراول به بعد، شما میتوانید بهکمک تابع missing در فایلهای Router، این سناریو را راحتتر هندل کنید.
#Route #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
404مواجه خواهد شد، که شما برای بررسی و تغییر این ارور
404به مقداری سفارشیسازی نیاز دارید.
اما از نسخه ۸ لاراول به بعد، شما میتوانید بهکمک تابع missing در فایلهای Router، این سناریو را راحتتر هندل کنید.
#Route #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
👍5❤4
💢 دستورات پرکاربرد در Collection - قسمت اول
🔺 بررسی تکراری بودن آیتمها
متد duplicates آیتمهایی را نشون میدهد که در یک کالکشن تکرار شده باشند. برای مثال در کالکشن زیر reza و ali تکرار شدهاند و خروجی تابع duplicates روی آن برابر با ali و reza
خواهد بود
🔺بررسی وجود یک key (کلید) خاص در یک کالکشن
با متد has میتوانید بررسی کنید که آیا یک کلید خاص در یک کالکشن وجود داره یا نه. خروجی این متد همیشه Boolean است
🔺فیلتر کردن آیتمها
آیتمهای یک کالکشن را میتوان با متد filter، فیلتر کرد. این متد یک تابع قبول میکند که در آن باید یک شرط را مشخص کنیم و این متد همه آیتمهایی را که برابر با شرط ما باشند را برمیگرداند
#collection
👤 Maryam
💎 Channel: @DevelopixLaravel
🔺 بررسی تکراری بودن آیتمها
متد duplicates آیتمهایی را نشون میدهد که در یک کالکشن تکرار شده باشند. برای مثال در کالکشن زیر reza و ali تکرار شدهاند و خروجی تابع duplicates روی آن برابر با ali و reza
خواهد بود
$collection = collect(['ali', 'reza', 'mohammad', 'ali', 'hassan', 'reza']);
$collection->duplicates();
// [3 => 'ali', 5 => 'reza']
🔺بررسی وجود یک key (کلید) خاص در یک کالکشن
با متد has میتوانید بررسی کنید که آیا یک کلید خاص در یک کالکشن وجود داره یا نه. خروجی این متد همیشه Boolean است
$collection = collect([
'team' => 'Real Madrid',
'color' => 'white',
]);
$collection->has('rating'); // false
$collection->has(['team', 'title']); // false
$collection->has(['team', 'color']); // true
🔺فیلتر کردن آیتمها
آیتمهای یک کالکشن را میتوان با متد filter، فیلتر کرد. این متد یک تابع قبول میکند که در آن باید یک شرط را مشخص کنیم و این متد همه آیتمهایی را که برابر با شرط ما باشند را برمیگرداند
$collection = collect([1, 2, 3, 4, 5, 6]);
$even_numbers = $collection->filter(function ($value, $key) {
return $value % 3 == 0;
});
#collection
👤 Maryam
💎 Channel: @DevelopixLaravel
👍8
🔸به کمک تابع
#String #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
()squishمیتوانید بهسادگی تمام اسپیس های اضافی و غیرضروری را از یک متن حذف کنید.
#String #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
👍9
💢 معرفی پکیج Laravel Debugbar
پکیج Debugbar لاراول توسط Barry vd. Heuvel ساخته شده است و به شما اجازه میدهد که تبهایی برای دیباگ کردن پروژه در حین کدنویسی داشته باشید تا روند دیباگ کردن تان سریعتر و بهتر پیش برود. همچنین این پکیج اطلاعات مفیدی از جمله: زمان اجرای کوئریها، کوئریهای فراخوانی شده در هر درخواست، زمان اجرای رندر شدن پروژه، نمایش View های لود شده در هر روت، نمایش پارامترهای ورودی هر View و ... را به شما نشان میدهد.
📌 روش نصب پکیج Laravel Debugbar
برای نصب این پکیج از طریق Composer ابتدا لازم است کد زیر را اجرا کنید:
سپس در فایل config/app.php و آرایه providers خط زیر را اضافه کنید:
و در نهایت کد زیر را به آرایه aliases اضافه کنید ( البته اگر میخواهید Facade را اضافه کنید):
📍 لازم به ذکر است که برای نمایش امکانات این پکیج لازم است که APP_DEBUG را در فایل env روی مقدار true تنظیم کرده باشید.
🔷 اطلاعات بیشتر و گیتهاب پکیج Laravel Debugbar
🔷 فیلم آموزشی کار با پکیج Laravel Debugbar
👤 Maryam
💎 Channel: @DevelopixLaravel
پکیج Debugbar لاراول توسط Barry vd. Heuvel ساخته شده است و به شما اجازه میدهد که تبهایی برای دیباگ کردن پروژه در حین کدنویسی داشته باشید تا روند دیباگ کردن تان سریعتر و بهتر پیش برود. همچنین این پکیج اطلاعات مفیدی از جمله: زمان اجرای کوئریها، کوئریهای فراخوانی شده در هر درخواست، زمان اجرای رندر شدن پروژه، نمایش View های لود شده در هر روت، نمایش پارامترهای ورودی هر View و ... را به شما نشان میدهد.
📌 روش نصب پکیج Laravel Debugbar
برای نصب این پکیج از طریق Composer ابتدا لازم است کد زیر را اجرا کنید:
composer require barryvdh/laravel-debugbar
سپس در فایل config/app.php و آرایه providers خط زیر را اضافه کنید:
'Barryvdh\Debugbar\ServiceProvider',
و در نهایت کد زیر را به آرایه aliases اضافه کنید ( البته اگر میخواهید Facade را اضافه کنید):
'Debugbar' => 'Barryvdh\Debugbar\Facade',
📍 لازم به ذکر است که برای نمایش امکانات این پکیج لازم است که APP_DEBUG را در فایل env روی مقدار true تنظیم کرده باشید.
🔷 اطلاعات بیشتر و گیتهاب پکیج Laravel Debugbar
🔷 فیلم آموزشی کار با پکیج Laravel Debugbar
👤 Maryam
💎 Channel: @DevelopixLaravel
👍8👎1
💢 آموزش View Composer
یکی از نکاتی که باعث بهینه شدن پروژه میشود این است که درخواستهایمان را به سمت سرور برای گرفتن اطلاعات از دیتابیس کمتر کنیم؛ موقعیتی را در نظر بگیرید که نیاز است یک سری اطلاعات از جدول مشخصی را به چندین ویو پاس بدهیم در این شرایط راحتترین کاری که میشود کرد این است که در روت مربوط به همه ویوها یک فانکشن ایجاد کنیم و برای هر کدام عمل کوئری انتخاب از دیتابیس را انجام دهیم و در نهایت داده دریافتی را به ویوهای مربوطه Compact کنیم.
در این شرایط علاوه بر ارسال درخواست تکراری به سمت دیتابیس ما با کدهای تکراری روبهرو هستیم که از بهینه و تمیز بودن کدها کم میکند؛ مورد دومی که شاید به ذهنتان برسد این است که یک متغیر پابلیک ایجاد کنیم و یک بار درخواست ارسال کنیم و چندین جا از آن استفاده کنیم ولی عیبی که این روش دارد این است که این متغیر داخل همه ویوها/کلاسهایی که نیاز به آن متغیر ندارند هم قابل دسترس است و نمیتوان به راحتی مشخص کرد که به کدام ویوها این متغیر ارسال شود.
برای حل چنین عیبهایی میتوان از View Composer ها استفاده کنیم با استفاده از این ویژگی لاراول میتوانیم یک کلاس یا یک تابع Callback به پروژه شناسایی کنیم و مشخص کنیم هر موقع یک View خاصی در حال رندر شدن بود آن کلاس یا تابع که به آن View Composer گفته میشود اجرا شود ( میتوانید نتیجه اجرای ویو کامپوزر و ویوتان هم برای بهینه شدن بیشتر پروژهتان کش کنید تا LCP سایتتان کمتر هم شود )
🔺نوشتن View Composer
ویوکامپوزرها معمولا در Service Provider ها تعریف میشوند که بهتر است یک سرویس پرووایدر اختصاصی ایجاد کنیم و درنهایت آن را به لیست مربوطه اضافه کنیم، برای ایجاد یک سرویس پرووایدر اختصاصی از کد زیر استفاده کنید:
با زدن این دستور یک فایل با نام ViewServiceProvider در مسیر زیر ایجاد میشود:
app/providers
بعد از ساخت فایل مربوطه باید سرویس پرووایدر مان را به لاراول شناسایی کنیم برای این کار تنها کافی است که به فایل config/app.php برید و سرویس پرووایدر تان را به آرایه Providers اضافه کنید با این کار سرویس پرووایدر مربوطه به پروژه شناسایی میشود و وقت آن است که ویو کامپوزر دلخواهمان را ایجاد کنیم.
🔺ایجاد View Composer
برای ایجاد یک ویو کامپوزر تنها کافی است به ViewServiceProvider که در مرحله قبلی ایجاد کردیم برویم و در متد boot این فایل از متد composer که در کلاس view قرار دارد استفاده کنیم:
🔺بررسی کد بالا
داخل پارامتر اول متد composer اسم ویوهایی که میخواهیم این دیتا را داشته باشند مینویسم لازم به ذکر است که میتوان در این قسمت یک آرایه بنویسم و یا مشخص کنیم به کل ویوهای یک پوشه این دیتا ارسال شود برای مثال:
در پارامتر دوم هم مقادیری که باید به ویوهای مربوطه ارسال شود را با with مشخص میکنیم، و درنهایت در ویوهای مربوطه از آنها استفاده میکنیم، صرفا با یک بار ارسال درخواست به سمت دیتابیس و عدم تکرار کد.
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
یکی از نکاتی که باعث بهینه شدن پروژه میشود این است که درخواستهایمان را به سمت سرور برای گرفتن اطلاعات از دیتابیس کمتر کنیم؛ موقعیتی را در نظر بگیرید که نیاز است یک سری اطلاعات از جدول مشخصی را به چندین ویو پاس بدهیم در این شرایط راحتترین کاری که میشود کرد این است که در روت مربوط به همه ویوها یک فانکشن ایجاد کنیم و برای هر کدام عمل کوئری انتخاب از دیتابیس را انجام دهیم و در نهایت داده دریافتی را به ویوهای مربوطه Compact کنیم.
در این شرایط علاوه بر ارسال درخواست تکراری به سمت دیتابیس ما با کدهای تکراری روبهرو هستیم که از بهینه و تمیز بودن کدها کم میکند؛ مورد دومی که شاید به ذهنتان برسد این است که یک متغیر پابلیک ایجاد کنیم و یک بار درخواست ارسال کنیم و چندین جا از آن استفاده کنیم ولی عیبی که این روش دارد این است که این متغیر داخل همه ویوها/کلاسهایی که نیاز به آن متغیر ندارند هم قابل دسترس است و نمیتوان به راحتی مشخص کرد که به کدام ویوها این متغیر ارسال شود.
برای حل چنین عیبهایی میتوان از View Composer ها استفاده کنیم با استفاده از این ویژگی لاراول میتوانیم یک کلاس یا یک تابع Callback به پروژه شناسایی کنیم و مشخص کنیم هر موقع یک View خاصی در حال رندر شدن بود آن کلاس یا تابع که به آن View Composer گفته میشود اجرا شود ( میتوانید نتیجه اجرای ویو کامپوزر و ویوتان هم برای بهینه شدن بیشتر پروژهتان کش کنید تا LCP سایتتان کمتر هم شود )
🔺نوشتن View Composer
ویوکامپوزرها معمولا در Service Provider ها تعریف میشوند که بهتر است یک سرویس پرووایدر اختصاصی ایجاد کنیم و درنهایت آن را به لیست مربوطه اضافه کنیم، برای ایجاد یک سرویس پرووایدر اختصاصی از کد زیر استفاده کنید:
php artisan make:provider ViewServiceProvider
با زدن این دستور یک فایل با نام ViewServiceProvider در مسیر زیر ایجاد میشود:
app/providers
بعد از ساخت فایل مربوطه باید سرویس پرووایدر مان را به لاراول شناسایی کنیم برای این کار تنها کافی است که به فایل config/app.php برید و سرویس پرووایدر تان را به آرایه Providers اضافه کنید با این کار سرویس پرووایدر مربوطه به پروژه شناسایی میشود و وقت آن است که ویو کامپوزر دلخواهمان را ایجاد کنیم.
🔺ایجاد View Composer
برای ایجاد یک ویو کامپوزر تنها کافی است به ViewServiceProvider که در مرحله قبلی ایجاد کردیم برویم و در متد boot این فایل از متد composer که در کلاس view قرار دارد استفاده کنیم:
View::composer('header',
funcation($view) {
$Categories = Category::all();
$view->with([
'category' => $Categories
]);
});
🔺بررسی کد بالا
داخل پارامتر اول متد composer اسم ویوهایی که میخواهیم این دیتا را داشته باشند مینویسم لازم به ذکر است که میتوان در این قسمت یک آرایه بنویسم و یا مشخص کنیم به کل ویوهای یک پوشه این دیتا ارسال شود برای مثال:
View::composer(['panel.*', 'users.header'], ... )
در پارامتر دوم هم مقادیری که باید به ویوهای مربوطه ارسال شود را با with مشخص میکنیم، و درنهایت در ویوهای مربوطه از آنها استفاده میکنیم، صرفا با یک بار ارسال درخواست به سمت دیتابیس و عدم تکرار کد.
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
👍13❤1👎1
💢 آدرسهای امضاء شده در لاراول
فرض کنید یک سیستم خبرنامه دارید و کاربری درخواست لغو اشتراک خبرنامه را دارد، URL مربوطه میتواند به شکل زیر باشد:
example.com/unsubscribe/4
وقتی کاربری این URL را باز میکند اشتراک خبرنامه کاربری با آیدی 4 لغو خواهد شد، حالا فرض کنید کاربری از روی عمد آیدی 4 را به 60 تغییر بدهد، در این صورت اشتراک خبرنامه کاربری با آیدی 60 هم بدون اطلاع خودش لغو خواهد شد. این سناریو میتواند به مرور باعث لغو اشتراک خبرنامه کلیه کاربران شود؛ یکی از ویژگیهایی که لاراول برای جلوگیری از این خرابکاری دارد، آدرسهای امضاء شده است؛ با استفاده از URL های امضا شده، میتوان تا حدودی از درخواستهای ایجاد شده با URL های اصلاح شده و همچنین از خرابکاریهای احتمالی جلوگیری کرد.
🔺ساختن یک Signed URL
در مثال بالا فرض کردیم URL لغو اشتراک خبرنامه به شکل زیر است:
example.com/unsubscribe/4
در نتیجه روت آن به این شکل خواهد بود:
برای امضاء و امن کردن این URL باید از متد signedRoute که در کلاس URL قرار دارد استفاده کنیم:
نتیجه کد بالا به شکل زیر خواهد داشت:
example.com/unsubcribe/1/?signature=f834ed8570e05de6c50ad10bd6abcf71e9867fcb14bdf2670b4bf572ce346f3b
و اگر کاربری این URL را تغییر داد به هیچوجه معتبر نخواهد بود و میتوان اینگونه از خراب کاریهای احتمالی جلوگیری کرد؛ همچنین لازم به ذکر است که با متد temporarySignedRoute میتوان یک تاریخ انقضاء برای URL مان مشخص کنیم و تعیین کنیم URL مربوطه تا چه زمانی میتواند معتبر باشد:
🔺 اعتبار سنجی آدرسهای امضاء شده
برای اعتبار سنجی آدرسهای مربوطه میتوانید از متد hasValidSignature که در کلاس Request قرار دارد استفاده کنید و بررسی کنید که URL مربوطه معتبر است یا خیر:
همچنین میتوانید از میدلور ValidateSignature استفاده کنید تا عملیات اعتبارسنجی خودکار انجام برای استفاده کردن از این میدلور فقط کافی است که به فایل Kernel.php بروید و کد زیر را اضافه کنید:
و در نتیجه این میدلور را به روتتان اضافه کنید:
از حالا به بعد این روت زمانی به درستی کار خواهد کرد که مقدار پارامتر signature معتبر باشید در غیر این صورت خطای 403 به کاربر نمایش داده میشود.
📍همچنین یک نمونه بسیار ساده از آدرسهای امضاء شده در این مخزن ایجاد کردهام که طبق نیاز میتوانید آن را تغییر داده و استفاده کنید
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
فرض کنید یک سیستم خبرنامه دارید و کاربری درخواست لغو اشتراک خبرنامه را دارد، URL مربوطه میتواند به شکل زیر باشد:
example.com/unsubscribe/4
وقتی کاربری این URL را باز میکند اشتراک خبرنامه کاربری با آیدی 4 لغو خواهد شد، حالا فرض کنید کاربری از روی عمد آیدی 4 را به 60 تغییر بدهد، در این صورت اشتراک خبرنامه کاربری با آیدی 60 هم بدون اطلاع خودش لغو خواهد شد. این سناریو میتواند به مرور باعث لغو اشتراک خبرنامه کلیه کاربران شود؛ یکی از ویژگیهایی که لاراول برای جلوگیری از این خرابکاری دارد، آدرسهای امضاء شده است؛ با استفاده از URL های امضا شده، میتوان تا حدودی از درخواستهای ایجاد شده با URL های اصلاح شده و همچنین از خرابکاریهای احتمالی جلوگیری کرد.
🔺ساختن یک Signed URL
در مثال بالا فرض کردیم URL لغو اشتراک خبرنامه به شکل زیر است:
example.com/unsubscribe/4
در نتیجه روت آن به این شکل خواهد بود:
Route::get('unsubscribe/{user_id}', '...')->name('unsubscribe');
برای امضاء و امن کردن این URL باید از متد signedRoute که در کلاس URL قرار دارد استفاده کنیم:
$url = URL::signedRoute('unsubscribe', ['user_id' => 1]);
نتیجه کد بالا به شکل زیر خواهد داشت:
example.com/unsubcribe/1/?signature=f834ed8570e05de6c50ad10bd6abcf71e9867fcb14bdf2670b4bf572ce346f3b
و اگر کاربری این URL را تغییر داد به هیچوجه معتبر نخواهد بود و میتوان اینگونه از خراب کاریهای احتمالی جلوگیری کرد؛ همچنین لازم به ذکر است که با متد temporarySignedRoute میتوان یک تاریخ انقضاء برای URL مان مشخص کنیم و تعیین کنیم URL مربوطه تا چه زمانی میتواند معتبر باشد:
$url = URL::temporarySignedRoute(
'unsubscribe',
now()->addMinutes(60), ['user' => 1]
);
🔺 اعتبار سنجی آدرسهای امضاء شده
برای اعتبار سنجی آدرسهای مربوطه میتوانید از متد hasValidSignature که در کلاس Request قرار دارد استفاده کنید و بررسی کنید که URL مربوطه معتبر است یا خیر:
Route::get('unsubscribe/{user_id}
/', function (Request $request) {
if (! $request->hasValidSignature()) {
abort(401);
}
// ...
});
همچنین میتوانید از میدلور ValidateSignature استفاده کنید تا عملیات اعتبارسنجی خودکار انجام برای استفاده کردن از این میدلور فقط کافی است که به فایل Kernel.php بروید و کد زیر را اضافه کنید:
protected $routeMiddleware = [
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
....
];
و در نتیجه این میدلور را به روتتان اضافه کنید:
Route::get('unsubscribe/{user_id}
', '...')->name('unsubscribe')->middleware('signed');
از حالا به بعد این روت زمانی به درستی کار خواهد کرد که مقدار پارامتر signature معتبر باشید در غیر این صورت خطای 403 به کاربر نمایش داده میشود.
📍همچنین یک نمونه بسیار ساده از آدرسهای امضاء شده در این مخزن ایجاد کردهام که طبق نیاز میتوانید آن را تغییر داده و استفاده کنید
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
👍10❤1
Forwarded from Developix Support
📌 اگر دنبال تبدیل شدن به یک برنامهنویس مطرح در دنیای فریلنسری و کسب درآمد بیشتر هستی، شرکت در این کارگاه رو از دست نده!
💻 کارگاه تجارت بینالمللی برای برنامهنویسها؛
(فریلنسرینگ حرفهای در مقیاس جهانی)
🗓 زمان: 30 شهریور تا 6 مهر 1402
حضوری و آنلاین (2 جلسه حضوری و 5 جلسۀ آنلاین)
📝 اطلاعات بیشتر و ثبتنام
🔻و یا برای کسب اطلاعات بیشتر کافیه به آیدی ما پیام بدی!
🆔 @MaktabSharif_Admin
🌐 وبسایت |📱کانال تلگرام | 📲 اینستاگرام
💻 کارگاه تجارت بینالمللی برای برنامهنویسها؛
(فریلنسرینگ حرفهای در مقیاس جهانی)
🗓 زمان: 30 شهریور تا 6 مهر 1402
حضوری و آنلاین (2 جلسه حضوری و 5 جلسۀ آنلاین)
📝 اطلاعات بیشتر و ثبتنام
🔻و یا برای کسب اطلاعات بیشتر کافیه به آیدی ما پیام بدی!
🆔 @MaktabSharif_Admin
🌐 وبسایت |📱کانال تلگرام | 📲 اینستاگرام
❤1
Forwarded from Developix Support
برای رشد در مسیر طراحی رابط کاربری فقط با یادگیری فیگما یا سایر ابزار ها نتیجه نمیگیرید. شما باید مهارت ساخت پورتفولیو، مذاکره، اعتماد بنفس، شبکه سازی و... را برای برندسازی شخصی و نفوذ به بازار های بین المللی یاد بگیرید.
حتی برای گرفتن پروژه های خوب و استخدام نیز به آن نیاز دارید.
دوره جامع اموزش طراحی UI با فیگما
میانبری به موفقیت در طراحی رابط کاربری
💥دوره جامع و پروژه محور + 5 پروژه واقعی
💥بیش از 60 ساعت آموزش
💥اقدام محور
💥منتورینگ شخصی، پُرسش و پاسخ نامحدود
💥جزوه رنگی و هدیه مکمل
💥شروع دوره بلافاصله بعد از خرید – در حال برگزاری
۱,۴۲۱,۰۰۰ تومان ۷۲۱,۰۰۰ تومان
برای شرکت در دوره پیام بدین یا از طریق سایت فوری ثبت نام کنید. 🚀
🤯ما 6 برابر هزینه دوره را یک ماه بعد از ثبت نامتان تضمین می کنیم و کنارتانیم تا به دست بیاورید.
ظرفیت فقط 5 نفر
@HosseinAslani3
https://hossein-aslani.com/product/%d8%af%d9%88%d8%b1%d9%87-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%81%db%8c%da%af%d9%85%d8%a7-%d8%a7%d8%b2-0-%d8%aa%d8%a7-100-%d8%a8%d9%87%d9%85%d8%b1%d8%a7%d9%87-5-%d9%be%d8%b1%d9%88%da%98%d9%87/
حتی برای گرفتن پروژه های خوب و استخدام نیز به آن نیاز دارید.
دوره جامع اموزش طراحی UI با فیگما
میانبری به موفقیت در طراحی رابط کاربری
💥دوره جامع و پروژه محور + 5 پروژه واقعی
💥بیش از 60 ساعت آموزش
💥اقدام محور
💥منتورینگ شخصی، پُرسش و پاسخ نامحدود
💥جزوه رنگی و هدیه مکمل
💥شروع دوره بلافاصله بعد از خرید – در حال برگزاری
برای شرکت در دوره پیام بدین یا از طریق سایت فوری ثبت نام کنید. 🚀
🤯ما 6 برابر هزینه دوره را یک ماه بعد از ثبت نامتان تضمین می کنیم و کنارتانیم تا به دست بیاورید.
ظرفیت فقط 5 نفر
@HosseinAslani3
https://hossein-aslani.com/product/%d8%af%d9%88%d8%b1%d9%87-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%81%db%8c%da%af%d9%85%d8%a7-%d8%a7%d8%b2-0-%d8%aa%d8%a7-100-%d8%a8%d9%87%d9%85%d8%b1%d8%a7%d9%87-5-%d9%be%d8%b1%d9%88%da%98%d9%87/
Forwarded from Developix Support
This media is not supported in your browser
VIEW IN TELEGRAM
دایناسورها در حال خرید در تهران 🤯
⚡️هیچوقت فکرشو میکردی که همچین تصویری رو ببینی؟
⚡️از آینده به تو سلام 😁
💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!
همینالان بهش پبام بده تا عکسش رو برات بفرسته😇
فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot
🌀هوشمصنوعی با پیشرفت فوقالعادش داره همه دنیار رو فرا میگیره 😉🤯
⚡️هیچوقت فکرشو میکردی که همچین تصویری رو ببینی؟
⚡️از آینده به تو سلام 😁
💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!
همینالان بهش پبام بده تا عکسش رو برات بفرسته😇
فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot
🌀هوشمصنوعی با پیشرفت فوقالعادش داره همه دنیار رو فرا میگیره 😉🤯
❤1👍1
💢 آشنایی با متد FirstOrCreate
از متد firstOrCreate در لاراول برای جستجو در جدولهای دیتابیس استفاده میشود و اگر رکورد با ویژگیهای مشخص یافت نشود، به طور خودکار یک رکورد جدید با آن ویژگیها را ایجاد و ذخیره میکند.
🔍 بررسی عملکرد متد firstOrCreate:
1⃣ رکوردی را با معیارهای مشخص شده را جست و جو میکند.
2⃣ اگر رکورد مورد نظر پیدا شد، آن را برمیگرداند، در غیر این صورت اگر رکورد پیدا نشد یک رکورد جدید با معیارهای مشخص شده میسازد.
🔺 مثال:
در این مثال اگر رکوردی با عنوان Article Title پیدا شد آن را برمیگرداند در غیر این صورت رکوردی با عنوان و محتوا ذکر شده به طور خودکار ساخته میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
از متد firstOrCreate در لاراول برای جستجو در جدولهای دیتابیس استفاده میشود و اگر رکورد با ویژگیهای مشخص یافت نشود، به طور خودکار یک رکورد جدید با آن ویژگیها را ایجاد و ذخیره میکند.
🔍 بررسی عملکرد متد firstOrCreate:
1⃣ رکوردی را با معیارهای مشخص شده را جست و جو میکند.
2⃣ اگر رکورد مورد نظر پیدا شد، آن را برمیگرداند، در غیر این صورت اگر رکورد پیدا نشد یک رکورد جدید با معیارهای مشخص شده میسازد.
🔺 مثال:
$article = Article::firstOrCreate(
['title' => 'Article Title'],
['content' => 'Content']
);
در این مثال اگر رکوردی با عنوان Article Title پیدا شد آن را برمیگرداند در غیر این صورت رکوردی با عنوان و محتوا ذکر شده به طور خودکار ساخته میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
👍15❤2
💢 معرفی متد ()Str::mask
از این متد برای ماسک کردن بخشی از یک رشته با یک کاراکتر خاص استفاده میشود (مثلا بخشی از شماره کارت، ایمیل و ... ). این متد در زمانی کاربرد دارد که میخواهیم اطلاعات حساسی را به کاربران بدون نمایش کامل اطلاعات نشان دهیم
🔺 مثال:
فرض کنید نیاز دارید چند کاراکتر از یک ایمیل را مخفی کنید:
- در خط دوم این مثال با استفاده از Str::mask از کاراکتر دوم تا چهار کاراکتر بعد آن با * جایگزین میشود.
- اگر پارامتر آخر را ننویسیم از کاراکتر دوم تا آخر رشته ماسک میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
از این متد برای ماسک کردن بخشی از یک رشته با یک کاراکتر خاص استفاده میشود (مثلا بخشی از شماره کارت، ایمیل و ... ). این متد در زمانی کاربرد دارد که میخواهیم اطلاعات حساسی را به کاربران بدون نمایش کامل اطلاعات نشان دهیم
🔺 مثال:
فرض کنید نیاز دارید چند کاراکتر از یک ایمیل را مخفی کنید:
$email = 'Maryam@gmail.com';
$maskedEmail = Str::mask($email, '*', 2, 4);
→ Ma****@gmail.com- در خط دوم این مثال با استفاده از Str::mask از کاراکتر دوم تا چهار کاراکتر بعد آن با * جایگزین میشود.
- اگر پارامتر آخر را ننویسیم از کاراکتر دوم تا آخر رشته ماسک میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
👍42🔥2
Statamic 🤗
یک cms ( سیستم مدیریت محتوا ) با زبان php و البته فریمورک جذاب laravel
⭕️ ویژگی ها :
✅ Flat File CMS :
درواقع در استاتامیک خبری از دیتابیس نیست و از فایل های yaml برای ذخیره سازی اطلاعات استفاده میشه
✅ Markdown Support :
این cms از مارک داون پشتیبانی میکنه و شما میتونید صفحه هاتون رو با markdown بسازید
✅ Extentions:
استاتامیک از پلاگین ها و افزونه ها پشتیبانی میکند
✅ Controll Panel:
بهتون یه کنترل پنل جذاب میشه که واقعا هم از لحاظ ظاهری جذابه هم از لحاظ کارایی :)
میتونید بیشتر خودتون توی سایت خودش به آدرس
https://statamic.com
و داکیومنت هاش به آدرس
https://statamic.dev
✳️✳️ تجربه شخصی من از این cms اینجوری بود که اولش خیلی نمیدونید داستان چیه 😂 ولی یکمی که باهاش کار کنید دستتون میاد ولی خب همین که روی فایل هست و دیتابیس نداره ممکنه همون اوایل یکمی اذیتتون کنه :)
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
یک cms ( سیستم مدیریت محتوا ) با زبان php و البته فریمورک جذاب laravel
⭕️ ویژگی ها :
✅ Flat File CMS :
درواقع در استاتامیک خبری از دیتابیس نیست و از فایل های yaml برای ذخیره سازی اطلاعات استفاده میشه
✅ Markdown Support :
این cms از مارک داون پشتیبانی میکنه و شما میتونید صفحه هاتون رو با markdown بسازید
✅ Extentions:
استاتامیک از پلاگین ها و افزونه ها پشتیبانی میکند
✅ Controll Panel:
بهتون یه کنترل پنل جذاب میشه که واقعا هم از لحاظ ظاهری جذابه هم از لحاظ کارایی :)
میتونید بیشتر خودتون توی سایت خودش به آدرس
https://statamic.com
و داکیومنت هاش به آدرس
https://statamic.dev
✳️✳️ تجربه شخصی من از این cms اینجوری بود که اولش خیلی نمیدونید داستان چیه 😂 ولی یکمی که باهاش کار کنید دستتون میاد ولی خب همین که روی فایل هست و دیتابیس نداره ممکنه همون اوایل یکمی اذیتتون کنه :)
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
👍12🔥3❤1
Forwarded from Developix Support
🔴 شتابان هاست 🔴
🔰 تخفیف ویژه 12 درصدی برای
خرید انواع🔹هاست🔹سرور
در شتابان هاست به مناسبت فرا رسیدن عید نوروز 🥳:
✅ https://shetabanhost.com/
🌟 کد تخفیف اختصاصی:
🔗 https://shetabanhost.com/
🌐 پشتیبانی ۲۴ ساعته شتابان هاست👇👇
☎️ 024-91311031
💎 Channel: @shetabanhostcom
🔰 تخفیف ویژه 12 درصدی برای
خرید انواع🔹هاست🔹سرور
در شتابان هاست به مناسبت فرا رسیدن عید نوروز 🥳:
✅ https://shetabanhost.com/
🌟 کد تخفیف اختصاصی:
shetabanhost
🔗 https://shetabanhost.com/
🌐 پشتیبانی ۲۴ ساعته شتابان هاست👇👇
☎️ 024-91311031
💎 Channel: @shetabanhostcom
❤30👍24🔥15
💢 معرفی EditorConfig
یک ابزار Standardizing است که برای تنظیم سبک کدنویسی و یکپارچهسازی پروژه استفاده میشود. این فایل به ادیتورها و IDEها میگوید که چگونه باید با فایلهای کد برخورد کنند، از جمله تنظیماتی مانند استفاده از فاصلههای تورفتگی، نوع پایان خط، و فضای خالی در انتهای خط و ...
🔺چرا باید از EditorConfig استفاده کنیم؟
1. یکپارچگی سبک کدنویسی: استفاده از EditorConfig به تیمهای توسعه کمک میکند تا سبک کدنویسی یکپارچهای را حفظ کنند، که این باعث افزایش خوانایی کد و کاهش اشکالات ناشی از تفاوتهای سبک کدنویسی میشود.
2. استانداردسازی تنظیمات: با استفاده از یک فایل editorconfig، تنظیمات مختلفی مانند تورفتگی، نوع پایان خط و ... به صورت یکپارچه و مشخص در کل پروژه تعیین میشود.
3. سهولت استفاده: استفاده از یک فایل editorconfig باعث میشود تا تنظیمات مورد نیاز توسعهدهندگان به صورت خودکار توسط ادیتورها و IDEها اعمال شود، بدون نیاز به هر بار تنظیم دستی آنها.
🔺راهنمای استفاده در Laravel:
1. ایجاد فایل editorconfig: در ریشه پروژه Laravel، یک فایل به نام editorconfig ایجاد کنید.
2. تعریف تنظیمات: در این فایل، تنظیمات مورد نیاز خود را تعریف کنید، مانند تورفتگی، نوع پایان خط و ...
3. استفاده در ادیتورها و IDEها: بعد از ایجاد فایل editorconfig، تنظیمات مشخص شده در آن به صورت خودکار توسط ادیتورها و IDEها اعمال میشود.
📌 با اینکه استفاده از EditorConfig به نظم و یکپارچگی کد کمک میکند، اما بهتر است تا با اعضای تیم خود از استفاده از آن مطمئن شوید و در مورد تنظیمات مورد نیاز توافق کنید.
💠 بررسی یک مثال از تعریف فایل EditorConfig
👤 Maryam
💎 Channel: @DevelopixLaravel
یک ابزار Standardizing است که برای تنظیم سبک کدنویسی و یکپارچهسازی پروژه استفاده میشود. این فایل به ادیتورها و IDEها میگوید که چگونه باید با فایلهای کد برخورد کنند، از جمله تنظیماتی مانند استفاده از فاصلههای تورفتگی، نوع پایان خط، و فضای خالی در انتهای خط و ...
🔺چرا باید از EditorConfig استفاده کنیم؟
1. یکپارچگی سبک کدنویسی: استفاده از EditorConfig به تیمهای توسعه کمک میکند تا سبک کدنویسی یکپارچهای را حفظ کنند، که این باعث افزایش خوانایی کد و کاهش اشکالات ناشی از تفاوتهای سبک کدنویسی میشود.
2. استانداردسازی تنظیمات: با استفاده از یک فایل editorconfig، تنظیمات مختلفی مانند تورفتگی، نوع پایان خط و ... به صورت یکپارچه و مشخص در کل پروژه تعیین میشود.
3. سهولت استفاده: استفاده از یک فایل editorconfig باعث میشود تا تنظیمات مورد نیاز توسعهدهندگان به صورت خودکار توسط ادیتورها و IDEها اعمال شود، بدون نیاز به هر بار تنظیم دستی آنها.
🔺راهنمای استفاده در Laravel:
1. ایجاد فایل editorconfig: در ریشه پروژه Laravel، یک فایل به نام editorconfig ایجاد کنید.
2. تعریف تنظیمات: در این فایل، تنظیمات مورد نیاز خود را تعریف کنید، مانند تورفتگی، نوع پایان خط و ...
3. استفاده در ادیتورها و IDEها: بعد از ایجاد فایل editorconfig، تنظیمات مشخص شده در آن به صورت خودکار توسط ادیتورها و IDEها اعمال میشود.
📌 با اینکه استفاده از EditorConfig به نظم و یکپارچگی کد کمک میکند، اما بهتر است تا با اعضای تیم خود از استفاده از آن مطمئن شوید و در مورد تنظیمات مورد نیاز توافق کنید.
💠 بررسی یک مثال از تعریف فایل EditorConfig
👤 Maryam
💎 Channel: @DevelopixLaravel
👍7
📍منابع آموزشی لاراول
- داکیومنت خود لاراول
- سایت Laracasts: این سایت آموزشهای پیشرفته و کاربردی با استفاده از ویدیوهای تخصصی داره.
- سایت Treehouse: به کمک این سایت میتوان با ابزارها و تکنولوژیهای مرتبط به لاراول و مبانی آن آشنا شد. شیوه دورههای این سایت به این شکل است که پایان هر بخش دارای تمرین و پرسش و پاسخ هست همچنین آزمونهایی برای تمرین کردن داره.
- سایت لاراول نیوز: به کمک این سایت میتوان فورا از اخبار و تغییرات فریمورک دوستداشتنیمون اطلاع پیدا کنیم (:
- سایت لاراول تریکس: این سایت ترفند و تریکهایی مفید داره که به روند پروژه کمک میکنه
🔴 کانالهای یوتیوب مناسب لاراول:
→ Matt Socha
→ Code With Dary
→ freeCodeCamp
→ Traversy Media
→ Laraveller
→ Laravel Daily
→ Laracon EU
→ Laracon AU
→ Laracon Online
→ Laracasts
→ Laravel
→ Freek Van der Herten
→ Christoph Rumpel
→ Nuno Maduro
📚 کتابهای پیشنهادی یادگیری لاراول:
→ Laravel: Up & Running
→ Cosuming APIs in Laravel
👤 Maryam
💎 Channel: @DevelopixLaravel
- داکیومنت خود لاراول
- سایت Laracasts: این سایت آموزشهای پیشرفته و کاربردی با استفاده از ویدیوهای تخصصی داره.
- سایت Treehouse: به کمک این سایت میتوان با ابزارها و تکنولوژیهای مرتبط به لاراول و مبانی آن آشنا شد. شیوه دورههای این سایت به این شکل است که پایان هر بخش دارای تمرین و پرسش و پاسخ هست همچنین آزمونهایی برای تمرین کردن داره.
- سایت لاراول نیوز: به کمک این سایت میتوان فورا از اخبار و تغییرات فریمورک دوستداشتنیمون اطلاع پیدا کنیم (:
- سایت لاراول تریکس: این سایت ترفند و تریکهایی مفید داره که به روند پروژه کمک میکنه
🔴 کانالهای یوتیوب مناسب لاراول:
→ Matt Socha
→ Code With Dary
→ freeCodeCamp
→ Traversy Media
→ Laraveller
→ Laravel Daily
→ Laracon EU
→ Laracon AU
→ Laracon Online
→ Laracasts
→ Laravel
→ Freek Van der Herten
→ Christoph Rumpel
→ Nuno Maduro
📚 کتابهای پیشنهادی یادگیری لاراول:
→ Laravel: Up & Running
→ Cosuming APIs in Laravel
👤 Maryam
💎 Channel: @DevelopixLaravel
👍11🔥4
بررسی DB::transaction
تصور کنید که میخواهید چندین عملیات روی دیتابیس انجام دهید، مثلاً در یک فروشگاه آنلاین: ذخیرهسازی سفارش جدید و کاهش موجودی محصولات در انبار. اگر هر یک از این عملیات جداگانه انجام شود و در یک مرحلهی بعدی یکی از آنها با موفقیت انجام نشود، دیتابیس به حالت نامناسبی وارد میشود؛ به عبارت دیگر، دیتابیس در وضعیت معتبر قرار نمی گیرد.
از DB::transaction در Laravel میتوان استفاده کرد تا اینگونه موارد را کنترل کند. این متد اطمینان حاصل میکند که تمامی عملیات در یک تراکنش انجام میشوند و در صورت بروز هرگونه خطا، تراکنش به حالت اولیه باز میگردد و هیچ تغییری در دیتابیس اعمال نمیشود.
⚙️ چگونگی استفاده از DB::transaction:
1️⃣ تعریف تراکنش
2️⃣ اجرای عملیات
3️⃣ تایید تراکنش
4️⃣ بازگشت در صورت خطا
📝 مثال: فرض کنید میخواهید یک فرآیند ثبت سفارش را پیادهسازی کنید. این فرآیند شامل ذخیرهسازی سفارش در جدول سفارشها و کاهش موجودی محصولات موجود در سبد خرید است.
❕ نکات کلیدی:
- استفاده از DB::transaction به کنترل تراکنشهای پایگاه داده کمک میکند و اطمینان حاصل میشود که همه چیز یا هیچ چیز انجام میشود.
- در صورت بروز خطا، تراکنش به حالت اولیه باز میگردد و تغییرات قبلی لغو میشوند.
👤 Maryam
💎 Channel: @DevelopixLaravel
تصور کنید که میخواهید چندین عملیات روی دیتابیس انجام دهید، مثلاً در یک فروشگاه آنلاین: ذخیرهسازی سفارش جدید و کاهش موجودی محصولات در انبار. اگر هر یک از این عملیات جداگانه انجام شود و در یک مرحلهی بعدی یکی از آنها با موفقیت انجام نشود، دیتابیس به حالت نامناسبی وارد میشود؛ به عبارت دیگر، دیتابیس در وضعیت معتبر قرار نمی گیرد.
از DB::transaction در Laravel میتوان استفاده کرد تا اینگونه موارد را کنترل کند. این متد اطمینان حاصل میکند که تمامی عملیات در یک تراکنش انجام میشوند و در صورت بروز هرگونه خطا، تراکنش به حالت اولیه باز میگردد و هیچ تغییری در دیتابیس اعمال نمیشود.
1️⃣ تعریف تراکنش
2️⃣ اجرای عملیات
3️⃣ تایید تراکنش
4️⃣ بازگشت در صورت خطا
DB::transaction(function () use ($order, $cart) {
try {
// 1️⃣ تعریف تراکنش
// اجرای عملیات
$order->save(); // ذخیره سفارش
foreach ($cart->items as $item) {
$product = Product::find($item['product_id']);
$product->stock -= $item['quantity'];
$product->save(); // کاهش موجودی محصول
}
// 3️⃣ تایید تراکنش
DB::commit();
} catch (\Exception $e) {
// 4️⃣ بازگشت در صورت خطا
DB::rollBack();
// مدیریت خطا، پیام به کاربر یا انجام دیگر عملیاتهای مورد نیاز
Log::error('Error occurred during transaction: ' . $e->getMessage());
// پرتاب خطا مجدد به عنوان نیازمند پیادهسازی
throw $e;
}
});
- استفاده از DB::transaction به کنترل تراکنشهای پایگاه داده کمک میکند و اطمینان حاصل میشود که همه چیز یا هیچ چیز انجام میشود.
- در صورت بروز خطا، تراکنش به حالت اولیه باز میگردد و تغییرات قبلی لغو میشوند.
👤 Maryam
💎 Channel: @DevelopixLaravel
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Forwarded from | کانال توسعهدهندگان PHP | (Erfan)
یکی از نکات بسیار مهمی که تقریبا در تمامی زبانها وجود دارد ولی برنامهنویسان از آن آگاه نیستند، منطق اجرای حلقهها میباشد
در تصویر بالا میتوانید ببینید که دو کد مشابه، که اکثرا هم حالت اول آن را مینویسیم، چقدر میتواند باعث غیربهینه بودن کد شود
نکته مهم این پست اینجاست که تمامی کد های داخل condition حلقه، در هر iteration اجرا میشوند و اگر حلقهتان از توابع داینامیک مثل count یا … استفاده میکند، در هر iteration شما آرایه را count میکنید که این بهینه نیست
💎 Channel: @DevelopixPHP
در تصویر بالا میتوانید ببینید که دو کد مشابه، که اکثرا هم حالت اول آن را مینویسیم، چقدر میتواند باعث غیربهینه بودن کد شود
نکته مهم این پست اینجاست که تمامی کد های داخل condition حلقه، در هر iteration اجرا میشوند و اگر حلقهتان از توابع داینامیک مثل count یا … استفاده میکند، در هر iteration شما آرایه را count میکنید که این بهینه نیست
💎 Channel: @DevelopixPHP
👍23
و بلاخره لاراول 11 منتشر شد😍🔥
( تیلر و تیم لاراول هدیه چهارشنبه سوری دادن😂❤️ )
📖 برای مشاهده تغییرات اعمال شده در ورژن 11 لاراول میتونید از وبلاگ لاراول بخونید
https://blog.laravel.com/laravel-11-now-available
📍 و میتونید از یوتوب لاراول توضیح کوتاهی رو ببینید
https://youtu.be/rmMCiP-iVYM?si=SyH0ESMiM4Pazw5p
📺 و ویدیو لاراکان که تیلر حرف میزنه
https://youtu.be/0g7HqfsCX4Y?si=HNXTRjNjfdHpPB3P
در پست های بعدی هم به تغییراتش میپردازیم📡😃
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
( تیلر و تیم لاراول هدیه چهارشنبه سوری دادن😂❤️ )
📖 برای مشاهده تغییرات اعمال شده در ورژن 11 لاراول میتونید از وبلاگ لاراول بخونید
https://blog.laravel.com/laravel-11-now-available
📍 و میتونید از یوتوب لاراول توضیح کوتاهی رو ببینید
https://youtu.be/rmMCiP-iVYM?si=SyH0ESMiM4Pazw5p
📺 و ویدیو لاراکان که تیلر حرف میزنه
https://youtu.be/0g7HqfsCX4Y?si=HNXTRjNjfdHpPB3P
در پست های بعدی هم به تغییراتش میپردازیم📡😃
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
👍14👎1
📡 دو کامند خفن artisan در ورژن 11 :)
💡 نمایش اطلاعات یک مدل ( مثل Attributes ، Relations )
دستور :
🛟 مثال عملی :
🛑 به خاطر اینکه خروجی بلند بالایی داریم در اینجا مثال خروجی رو نمیزارم ( خودتون برید تست کنید )
💡 نمایش اطلاعات یک تیبل از دیتابیس ( مثل سایز ، تعداد کالم ها ، ایندکس ها ، کالم ها )
دستور :
🛟 مثال عملی :
🛑 به خاطر اینکه خروجی بلند بالایی داریم در اینجا مثال خروجی رو نمیزارم ( خودتون برید تست کنید )
✂️ یک نکته هم از دیتابیس در ورژن یازده بگم که در ورژن یازده به صورت دیفالت از دیتابیس لوکال sqlite استفاده میشه ( صد درصد امکان تغییر هم هست )
📝 باز در ادامه به برخی دیگر از فیچر های اضافه شده میپردازیم :) ❤️
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
💡 نمایش اطلاعات یک مدل ( مثل Attributes ، Relations )
دستور :
php artisan model:show <ModelName>
🛟 مثال عملی :
php artisan model:show User
🛑 به خاطر اینکه خروجی بلند بالایی داریم در اینجا مثال خروجی رو نمیزارم ( خودتون برید تست کنید )
💡 نمایش اطلاعات یک تیبل از دیتابیس ( مثل سایز ، تعداد کالم ها ، ایندکس ها ، کالم ها )
دستور :
php artisan db:table <TableName>
🛟 مثال عملی :
php artisan db:table users
🛑 به خاطر اینکه خروجی بلند بالایی داریم در اینجا مثال خروجی رو نمیزارم ( خودتون برید تست کنید )
✂️ یک نکته هم از دیتابیس در ورژن یازده بگم که در ورژن یازده به صورت دیفالت از دیتابیس لوکال sqlite استفاده میشه ( صد درصد امکان تغییر هم هست )
📝 باز در ادامه به برخی دیگر از فیچر های اضافه شده میپردازیم :) ❤️
👤 Matin Soleymani
💎 Channel: @DevelopixLaravel
🔥8👍7