در لاراول برای تعیین نام جدول pivot به صورت customize شده در رابطه "many to many" از کدوم متود استفاده میشه؟
Anonymous Quiz
27%
PivotTable()
10%
Table()
52%
WithPivot()
11%
Using()
👍5❤3
Forwarded from CleverDevs (Mahdi)
Good 🆚 Bad Refactor
وقتی یه پروژه رو میخوایم ریفکتور کنیم چیکارا نکنیم که وضع بدتر شه؟ (این پارت یکه.)
1. Don't Change The Base
بیس کد فعلی رو تا حد امکان تغییر ندید، صرفا شرایط فعلی رو بهتر کنید. مثال:
قبل:
function processUsers(users: User[]) {
const result = [];
for (let i = 0; i < users.length; i++) {
if (users[i].age >= 18) {
const formattedUser = {
name: users[i].name.toUpperCase(),
age: users[i].age,
isAdult: true
};
result.push(formattedUser);
}
}
return result;
}بعد از یه ریفکتور بد:
import * as R from 'ramda';
const processUsers = R.pipe(
R.filter(R.propSatisfies(R.gte(R.__, 18), 'age')),
R.map(R.applySpec({
name: R.pipe(R.prop('name'), R.toUpper),
age: R.prop('age'),
isAdult: R.always(true)
}))
);
بعد از یه ریفکتور خوب:
function processUsers(users: User[]): FormattedUser[] {
return users
.filter(user => user.age >= 18)
.map(user => ({
name: user.name.toUpperCase(),
age: user.age,
isAdult: true
}));
}توی ریفکتور اول بیس کد کلا تغییر کرد و از یه پکیج جدید استفاده شد و احتمال زیاد بقیه کسایی که تو پروژه هستن باهاش آشنایی ندارن و کار برای همه سخت میشه.
#CleanCode SRC
@CleverDevs @CleverDevsGp
👍6🔥1
در لاراول متود is برای مقایسه دو مدل استفاده میشه. این متود بررسی میکنه که آیا دو شی مدل دارای همون ID و از همون جدول در دیتابیس هستن یا نه.
یعنی با استفاده ازین متود میتونید تشخیص بدید که آیا دو مدل دقیقا یکی هستن یا خیر.
کاربردش؟
مثلا زمانی که میخوایم بررسی کنیم که آیا کاربری که وارد شده، با کاربر خاصی که دسترسی ادمین داره، یکی هست یا نه میتونیم ازین متود استفاده کنیم.
#Laravel
@GoldenCodeir
(در منبع چگونگیه استفادش ذکر شده👇🏾)
https://x.com/MilwadDev/status/1826975907027849647?t=zrwzckb_Q5-nwjYITz0doA&s=35
یعنی با استفاده ازین متود میتونید تشخیص بدید که آیا دو مدل دقیقا یکی هستن یا خیر.
کاربردش؟
مثلا زمانی که میخوایم بررسی کنیم که آیا کاربری که وارد شده، با کاربر خاصی که دسترسی ادمین داره، یکی هست یا نه میتونیم ازین متود استفاده کنیم.
#Laravel
@GoldenCodeir
(در منبع چگونگیه استفادش ذکر شده👇🏾)
https://x.com/MilwadDev/status/1826975907027849647?t=zrwzckb_Q5-nwjYITz0doA&s=35
X (formerly Twitter)
Milwad Khosravi ⚡️ (@MilwadDev) on X
In Laravel, you can use the is method to determine if two models have the same ID and belong to the same table✅
Also, we have the isNot method but I will explain it in separate posts👍
#laravel #php #eloquent #model #milwad
Also, we have the isNot method but I will explain it in separate posts👍
#laravel #php #eloquent #model #milwad
👍4❤1🔥1🤔1
برای تنظیم وضعیت "checked" یک check box در لاراول به صورت شرطی میتونید از یه دستور Blade با نام checked@ استفاده کنید.
با همین دستور به راحتی میتونید مشخص کنید که بر اساس یک شرط خاص ،آیا check box باید تیک خورده باشه یا نه.
فایدش چیه؟
کدمون تمیز تر میشه، دیگه نیاز به دستورات شرطیه اضافی نیست.
(طرز کارش هم خیلی راحته و در تصویر موجوده)
#laravel
@GoldenCodeir
(به منبع و مثالش دقت کنین👇🏾)
https://x.com/OussamaMater/status/1827421279986585742?s=35
با همین دستور به راحتی میتونید مشخص کنید که بر اساس یک شرط خاص ،آیا check box باید تیک خورده باشه یا نه.
فایدش چیه؟
کدمون تمیز تر میشه، دیگه نیاز به دستورات شرطیه اضافی نیست.
(طرز کارش هم خیلی راحته و در تصویر موجوده)
#laravel
@GoldenCodeir
(به منبع و مثالش دقت کنین👇🏾)
https://x.com/OussamaMater/status/1827421279986585742?s=35
👍7🔥1
Forwarded from CleverDevs (Mahdi)
Bye Bye try-catch blocks!
مثل اینکه یه آپدیت برای Js قراره بیاد و ارور هندلینگ رو متحول کنه.
الان، برای ارور هندلینگ از try-catch استفاده میکنیم، ولی توی این آپدیت قراره
Safe Assignment Operator
اضافه شه، که خیلی سینتکس تمیز تری داره:
async function getData() {
const [error, response] ?= await fetch("https://api.example.com/data");
if (error) return handleError(error);
return response;
}چندتا مزیتش:
👈 نستینگ و تودرتو بودن کدها کمتر میشه.
👈 ایپیآی های مختلف، ممکنه ارور هندلینگ متفاوتی داشته باشن، و با این روش دیگه نیاز نیست توی بلاک catch شرطهای مختلف بذاریم.
👈 میتونیم با استفاده از Symbol.result ارور
هندلینگ سفارشی داشته باشیم، اینجوری:
function example() {
return {
[Symbol.result]() {
return [new Error("Error message"), null];
},
};
}
const [error, result] ?= example();// البته فعلا چیزی برای جایگزینی بلاک finally گفته نشده که میتونه یکی از معایبش باشه.
#Js #Es Source
@CleverDevs @CleverDevsGp
👍7
در لاراول میتونید دیسکهای ذخیرهسازی custome شده رو بدون نیاز به تغییر دادن فایل config/filesystems ایجاد کنید.
کاربردش؟
این قابلیت برای مواردی که ممکنه مسیر ذخیرهسازی تغییر کنه یا به صورت داینامیک تعیین میشه میتونه خیلی کار راه انداز باشه.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنین👇🏾)
https://x.com/laravelbackpack/status/1828394539867930675?t=uPya--8IeMfyqPo3nHWD2A&s=35
کاربردش؟
این قابلیت برای مواردی که ممکنه مسیر ذخیرهسازی تغییر کنه یا به صورت داینامیک تعیین میشه میتونه خیلی کار راه انداز باشه.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنین👇🏾)
https://x.com/laravelbackpack/status/1828394539867930675?t=uPya--8IeMfyqPo3nHWD2A&s=35
X (formerly Twitter)
Backpack for Laravel (@laravelbackpack) on X
#Laravel Tip
You can create custom disks at runtime without the need to have the config in your config/filesystems file.
This can be handy to manage files in custom paths.
You can create custom disks at runtime without the need to have the config in your config/filesystems file.
This can be handy to manage files in custom paths.
👍10🔥1
Forwarded from Web Application Security
Same Origin Policy/SOP چیست =
فرض کنین روی مرورگر دوتا Tab باز هست که یکی attacker.com و دیگری bank.com هست، اگه هکر از attacker.com یه درخواست xhr میزد به bank.com و اطلاعات بانکی کاربر رو میتونست بخونه، هیچ امنیتی وجود نداشت. ولی مرورگرا جلوی این اتفاق رو میگیرن با SOP. SOP کارش اینه که اجازه نمیده یه صفحه تو مرورگر به اطلاعات یه صفحه دیگه دسترسی داشته باشه، مگر اینکه با هم Same Origin باشن. حالا اصلا Origin چیه؟ ترکیب protocol و host name و port میشه یه Origin، و اگه دوتا دامنه حداقل تو یکی از این 3 شرط با هم برابر نباشند، دیگه Same Origin نیستند و به اصطلاح Cross Origin هستند و مرورگر اجازه نمیده که به اطلاعات همدیگه دسترسی داشته باشند.
برای مثال دوتا سایت زیر با هم Same Origin هستند :
http://Google.com:8080/search/index.php?key=stuff#top
http://Google.com:8080
نکته : path و پارامتر و fragment توی Origin تاثیری ندارن.
نکته : SOP به صورت پیشفرض روی همه مرورگرها هست و وب سرور نقشی تو فعال سازی این مکانیزم امنیتی نداره بر خلاف CSP(در آینده کاور میشه)
ولی دوتا سایت زیر با هم Cross Origin هستند :
http://Google.com:80
http://Google.com:443
دلیلش هم تفاوت داشتن پورت هاس.
حالا دقیقا SOP کجا و چطور کار میکنه؟
وقتی کاربر سایت attacker.com رو باز میکنه این سایت یه کد مخرب xhr با جاوااسکریپت نوشته که کاربر رو مجبور میکنه یه درخواست بزنه به Bank.com (کاربر متوجه درخواست نمیشه) و درخواست هم با موفقیت ارسال میشه و اطلاعات کاربر رو تو Bank.com میخونه، ولی وقتی میخواد اطلاعات رو در اختیار attacker.com که Cross Origin هست قرار بده، SOP میاد تو بازی و جلوی این کار رو میگیره. پس SOP با ارسال درخواست کاری نداره و فقط موقع برگشتن response جلوشو میگیره.
تا الان یاد گرفتیم که SOP جلوی خوندن اطلاعات Cross Origin رو میگیره، ولی آیا همیشه اینطوره؟ خیر. SOP روی یه سری فایلا اعمال نمیشه و همین باعث موارد امنیتی میشه. برای مثال SOP روی عکس ها اعمال نمیشه و میتونیم از هر سایتی به هر سایتی درخواست بزنیم و عکس رو تو سایتمون لود کنیم. و همچنین روی فایل های Javanoscript اعمال نمیشه. یعنی هر فایل جاوااسکریپتی که تو سایت ما هست، میتونه توسط Origin های دیگه خونده بشه و اینجا ممکنه تحت شرایطی باعث به وجود اومدن آسیب پذیری بشه(در آینده کاور میشه).
باور غلطی که خیلیا دارن اینه که SOP همیشه روی وب اپلیکیشن ما کار میکنه:)
در صورتی که اینطور نیست و این مکانیزم امنیتی مختص پروتکل HTTP هست و اگه سایت از پروتکل websocket استفاده کرده باشه ، SOP اعمال نمیشه:))
#SOP
#websocket
فرض کنین روی مرورگر دوتا Tab باز هست که یکی attacker.com و دیگری bank.com هست، اگه هکر از attacker.com یه درخواست xhr میزد به bank.com و اطلاعات بانکی کاربر رو میتونست بخونه، هیچ امنیتی وجود نداشت. ولی مرورگرا جلوی این اتفاق رو میگیرن با SOP. SOP کارش اینه که اجازه نمیده یه صفحه تو مرورگر به اطلاعات یه صفحه دیگه دسترسی داشته باشه، مگر اینکه با هم Same Origin باشن. حالا اصلا Origin چیه؟ ترکیب protocol و host name و port میشه یه Origin، و اگه دوتا دامنه حداقل تو یکی از این 3 شرط با هم برابر نباشند، دیگه Same Origin نیستند و به اصطلاح Cross Origin هستند و مرورگر اجازه نمیده که به اطلاعات همدیگه دسترسی داشته باشند.
برای مثال دوتا سایت زیر با هم Same Origin هستند :
http://Google.com:8080/search/index.php?key=stuff#top
http://Google.com:8080
نکته : path و پارامتر و fragment توی Origin تاثیری ندارن.
نکته : SOP به صورت پیشفرض روی همه مرورگرها هست و وب سرور نقشی تو فعال سازی این مکانیزم امنیتی نداره بر خلاف CSP(در آینده کاور میشه)
ولی دوتا سایت زیر با هم Cross Origin هستند :
http://Google.com:80
http://Google.com:443
دلیلش هم تفاوت داشتن پورت هاس.
حالا دقیقا SOP کجا و چطور کار میکنه؟
وقتی کاربر سایت attacker.com رو باز میکنه این سایت یه کد مخرب xhr با جاوااسکریپت نوشته که کاربر رو مجبور میکنه یه درخواست بزنه به Bank.com (کاربر متوجه درخواست نمیشه) و درخواست هم با موفقیت ارسال میشه و اطلاعات کاربر رو تو Bank.com میخونه، ولی وقتی میخواد اطلاعات رو در اختیار attacker.com که Cross Origin هست قرار بده، SOP میاد تو بازی و جلوی این کار رو میگیره. پس SOP با ارسال درخواست کاری نداره و فقط موقع برگشتن response جلوشو میگیره.
تا الان یاد گرفتیم که SOP جلوی خوندن اطلاعات Cross Origin رو میگیره، ولی آیا همیشه اینطوره؟ خیر. SOP روی یه سری فایلا اعمال نمیشه و همین باعث موارد امنیتی میشه. برای مثال SOP روی عکس ها اعمال نمیشه و میتونیم از هر سایتی به هر سایتی درخواست بزنیم و عکس رو تو سایتمون لود کنیم. و همچنین روی فایل های Javanoscript اعمال نمیشه. یعنی هر فایل جاوااسکریپتی که تو سایت ما هست، میتونه توسط Origin های دیگه خونده بشه و اینجا ممکنه تحت شرایطی باعث به وجود اومدن آسیب پذیری بشه(در آینده کاور میشه).
باور غلطی که خیلیا دارن اینه که SOP همیشه روی وب اپلیکیشن ما کار میکنه:)
در صورتی که اینطور نیست و این مکانیزم امنیتی مختص پروتکل HTTP هست و اگه سایت از پروتکل websocket استفاده کرده باشه ، SOP اعمال نمیشه:))
#SOP
#websocket
❤7👍3
در لاراول Bulk Dispatch به معنیه ارسال گروهی از تسکها به صف بطور همزمان هستش. یعنی بجای اینکه هر تسک رو جداگانه ارسال کنیم میتونیم تعداد زیادیشون رو یکجا ارسال کنیم به صف.
مزایاش؟؟
کمتر شدن زمان پردازش
بهبود عملکرد
کاهش تعداد درخواست های ارسالی به صف ها
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین 👇🏾)
https://x.com/OussamaMater/status/1829246628613464507?s=35
مزایاش؟؟
کمتر شدن زمان پردازش
بهبود عملکرد
کاهش تعداد درخواست های ارسالی به صف ها
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین 👇🏾)
https://x.com/OussamaMater/status/1829246628613464507?s=35
X (formerly Twitter)
OussamaMater (@OussamaMater) on X
Laravel Tip 💡: Bulk Dispatch
While Laravel offers batches to dispatch jobs, sometimes you just want to fire and forget. In that case, you can dispatch the jobs in bulk instead of individually 🚀
#laravel
While Laravel offers batches to dispatch jobs, sometimes you just want to fire and forget. In that case, you can dispatch the jobs in bulk instead of individually 🚀
#laravel
🔥3👍2
Forwarded from CleverDevs (Mammad)
Named Arguments توی php چیه و چه کاربردی داره ؟
این فیچر که توی php8 اضافه شده به ما کمک میکنه که آرگومان های تابع رو به جای ترتیب بر اساس اسم هاشون به تابع پاس بدیم
مثلا تابع زیر رو تصور کنید
یک تابع سادس که میاد یه کاربر اضافه میکنه. تابع برای سه تا از پارامتر هاش مقدار دیفالت داره یعنی اگه پاسش ندیم اون مقدار دیفالت رو در نظر میگیره حالا فک کنید بخوایم یه کاربر اضافه کنیم و میخوایم شهر و سنش همون مقدار دیفالت باشه ولی جنسیتش رو ست کنیم اگه بخوایم پیشفرض و بر اساس ترتیب آرگومان هارو پاس بدیم نیازه که حتما مقدار شهر و سن رو هم توی آرگومان ها پاس بدیم تا بتونیم مقدار جنسیت رو بدیم اما در عوض میتونیم از طریق اسم پارامتر ها آرگومان هارو پاس بدیم مثل کد پایین
حالا اگه اسم آرگومان هارو مشخص نمیکردیم مجبور بودیم هر چهارتا آرگومان رو پاس بدیم و خب کدوم شلوغ تر و سخت تر میشد
این قابلیت برای توابعی که تعداد پارامتر زیادی دارن و بیشترشون هم آپشنال هستن خیلی کاربردیه
اگه میخواید بیشتر در بارش بخونید میتونید به این لینک سر بزنید
https://stitcher.io/blog/php-8-named-arguments
#php
@CleverDevs - @CleverDevsGp
این فیچر که توی php8 اضافه شده به ما کمک میکنه که آرگومان های تابع رو به جای ترتیب بر اساس اسم هاشون به تابع پاس بدیم
مثلا تابع زیر رو تصور کنید
function createNewUser($name , $city = "Tehran" , $age = "18", $gender = ""){
$user = new User();
$user->name = $name;
$user->city = $city;
$user->age = $age;
$user->gender = $gender;
$user->save();
}یک تابع سادس که میاد یه کاربر اضافه میکنه. تابع برای سه تا از پارامتر هاش مقدار دیفالت داره یعنی اگه پاسش ندیم اون مقدار دیفالت رو در نظر میگیره حالا فک کنید بخوایم یه کاربر اضافه کنیم و میخوایم شهر و سنش همون مقدار دیفالت باشه ولی جنسیتش رو ست کنیم اگه بخوایم پیشفرض و بر اساس ترتیب آرگومان هارو پاس بدیم نیازه که حتما مقدار شهر و سن رو هم توی آرگومان ها پاس بدیم تا بتونیم مقدار جنسیت رو بدیم اما در عوض میتونیم از طریق اسم پارامتر ها آرگومان هارو پاس بدیم مثل کد پایین
createNewUser(name : "Mammad" , gender : "male");
حالا اگه اسم آرگومان هارو مشخص نمیکردیم مجبور بودیم هر چهارتا آرگومان رو پاس بدیم و خب کدوم شلوغ تر و سخت تر میشد
این قابلیت برای توابعی که تعداد پارامتر زیادی دارن و بیشترشون هم آپشنال هستن خیلی کاربردیه
اگه میخواید بیشتر در بارش بخونید میتونید به این لینک سر بزنید
https://stitcher.io/blog/php-8-named-arguments
#php
@CleverDevs - @CleverDevsGp
👏12❤2
بیشتره کاربرا عادت دارن از یک پسورد برای همه حسابهاشون استفاده کنن. حالا اگه یک سایت هک بشه، باقیه اکانت هاشونم به خطر میفته.
در لاراول یک قانونی هست به نام "uncompromised" که کمک میکنه از ایجاد پسورد هایی که قبلاً در سایتهای دیگه لو رفتن جلوگیری بشه که باعث میشه رمز ایمنتری ایجاد بشه.
حالا چجوری این کارو میکنه؟
یه سرویس هست با نام HIBP که پسورد های لورفته در دیتابیسش هست.
این uncompromised نقش رابط بین laravel و سرویسHIBP رو داره و تهش متوجه میشه پسورد ایمنه یا نه و حالا اگه ایمن نباشه هم ولیدیشن به خطا میخوره.
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین👇🏾)
https://x.com/OussamaMater/status/1829613512168976836?s=19
در لاراول یک قانونی هست به نام "uncompromised" که کمک میکنه از ایجاد پسورد هایی که قبلاً در سایتهای دیگه لو رفتن جلوگیری بشه که باعث میشه رمز ایمنتری ایجاد بشه.
حالا چجوری این کارو میکنه؟
یه سرویس هست با نام HIBP که پسورد های لورفته در دیتابیسش هست.
این uncompromised نقش رابط بین laravel و سرویسHIBP رو داره و تهش متوجه میشه پسورد ایمنه یا نه و حالا اگه ایمن نباشه هم ولیدیشن به خطا میخوره.
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین👇🏾)
https://x.com/OussamaMater/status/1829613512168976836?s=19
X (formerly Twitter)
OussamaMater (@OussamaMater) on X
Laravel Tip 💡: Safer Passwords for Users
Users tend to use the same password for all websites, which puts them in danger if their password has been leaked. You can make sure that the user inputs an uncompromised password using the "uncompromised" rule 🚀…
Users tend to use the same password for all websites, which puts them in danger if their password has been leaked. You can make sure that the user inputs an uncompromised password using the "uncompromised" rule 🚀…
👍5🔥1
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
#javanoscript #geolocation
💎 گرفتن لوکیشن کاربر با جاوااسکریپت 💎
با استفاده از Geolocation API در جاوااسکریپت میتونید به سادگی موقعیت جغرافیایی کاربر رو دست بیارید و توی بخش های مختلف ازش استفاده کنید.
این API به شما اجازه میده با دریافت اجازه از کاربر، عرض و طول جغرافیایی دقیقش رو به دست بیارید.
نمونه کد 🚀
navigator.geolocation.getCurrentPosition((position) => {
console.log(`
Lat:${position.coords.latitude},
Long:${position.coords.longitude}
`);
});🌐 مثال استفاده در پروژه واقعی
🆔 Channel | Group | YouTube
👍4
در لاراول برای استفاده از Service Container و ثبت یک سرویس با نام مستعار (alias)کدوم گزینه رو باید استفاده کرد؟
Anonymous Quiz
33%
app()->bind('aliasName', function() { return new ServiceClass(); });
15%
app()->singleton('aliasName', ServiceClass::class);
28%
app()->bind(ServiceClass::class, 'aliasName');
24%
app()->alias('ServiceClass', 'aliasName');
❤3🔥2
در لاراول میتونیم با استفاده از دستور php artisan db خیلی ساده و سریع به دیتابیس از طریق CLI متصل شیم و میتونیم از طریق CLI با دیتابیس در تعامل باشیم تا عملیات های مدنظرمونو انجام بدیم.
اگه چندتا دیتابیس باشه چی؟؟
اینجوری باید دیتابیس مدنظر مشخص بشه:
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/OussamaMater/status/1831784043488403463?t=ygcQomWuuX0wo0KwCJud1w&s=19
اگه چندتا دیتابیس باشه چی؟؟
اینجوری باید دیتابیس مدنظر مشخص بشه:
php artisan db mysql
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/OussamaMater/status/1831784043488403463?t=ygcQomWuuX0wo0KwCJud1w&s=19
👍5