در لاراول متود boot در کلاسهای مدل با چه منظوری استفاده میشه؟؟
Anonymous Quiz
37%
برای اجرای کدهای ابتدای هر درخواست HTTP به طور خودکار
8%
برای تعریف و مدیریت روابط بین مدلهامون
44%
برای ثبت و مدیریت Model Events و اعمال تغییرات قبل یا بعد از عملیاتهای CRUD
11%
برای مدیریت مایگریشن های دیتابیس و تغییرات ساختاریش
❤5👍5
Forwarded from Pishro App
تو دنیای برنامه نویسی یکسری قرارداد های نامگذاری وجود داره برای اینکه بتونیم کدهای خوانایی بزنیم و ازونجایی که در دنیای برنامه نویسی چیزهای زیادی مانند متغیرها، توابع، کلاس ها، متد ها و ... وجود داره توسعه دهنده ها تصمیم گرفتن تا از کیس تایپ های مختلفی استفاده کنند برای نامگذاری.
اکثر ( اگر نگیم همه ) زبان های برنامه نویسی هر کلمه رو یک چیز کاملا جدا و منحصر فرد در نظر میگیرند. مثال زیر رو برای نامگذاری یک متغیر در نظر بگیرید
Number of donuts = 34
سه کلمه ی (number, of, donuts) در یک زبان برنامه نویسی به صورت مستقل باهاشون رفتار میشه به علت اینکه کارکتر اسپیس بین انها قرار گرفته است. برای اینکه برنامتون به درستی کار بکنه باید کارکتر های اسپیس رو حذف بکنید و اونرو به یک استرینگ واحد به شیوه خاصی تبدیل کنید.
4 نوع تایپ کیس داریم که جلوتر بهتون توضیح میدم ولی در همین ابتدا بگم هیچ جواب قاطعی برای اینکه کدوم بهتره وجود نداره.
شما باید با توجه به بست پرکتیس های زبان پروژتون انتخاب کنید که قراره از کدوم تایپ کیس استفاده کنید.
—————————————————————-
1- snake_case
- تمام حروف باید کوچک باشند.
- هر کلمه با استفاده از _ به هم وصل میشود.
بیشتر در زبان پایتون این قابل مشاهده هست و در زبان هایی مثل جاوا، جاوااسکریپت کمتر دیده میشه.
● کاربرد ها :
- ساختن متغیر ها، نام متد ها
- اسامی جدول و ستون های یک دیتابیس
همچنین یک ورژن دیگه از snake case وجود داره که از حروف بزرگ استفاده میشه و معمولا در زبان های برنامه نویسی مواقعی استفاده میشه که نشان دهنده داده ای است که در طول برنامه تغییر نخواهد کرد.
—————————————————————-
2- kebab-case
- تمام حروف باید کوچک باشند.
- هر کلمه با استفاده از – به هم وصل میشود.
● کاربرد ها :
- در یو ار ال ها (URLs) مشاهده میشود.
—————————————————————-
3- camelCase
- حرف اول کلمه اول کوچک و حرف اول بقیه کلمات بزرگ است.
● کاربرد ها :
- در زبان های جاوا، جاوااسکریپت واسه ساخت متغیر ها و توابع و اسامی متد ها استفاده میشود
—————————————————————-
4- PascalCase
- حرف اول تمام کلمات بزرگ نوشته میشود.
● کاربرد ها :
- در نامگذاری کلاس ها در اکثر زبان ها کاربرد دارد.
—————————————————————-
منبع
👾 @pishroapp
اکثر ( اگر نگیم همه ) زبان های برنامه نویسی هر کلمه رو یک چیز کاملا جدا و منحصر فرد در نظر میگیرند. مثال زیر رو برای نامگذاری یک متغیر در نظر بگیرید
Number of donuts = 34
سه کلمه ی (number, of, donuts) در یک زبان برنامه نویسی به صورت مستقل باهاشون رفتار میشه به علت اینکه کارکتر اسپیس بین انها قرار گرفته است. برای اینکه برنامتون به درستی کار بکنه باید کارکتر های اسپیس رو حذف بکنید و اونرو به یک استرینگ واحد به شیوه خاصی تبدیل کنید.
4 نوع تایپ کیس داریم که جلوتر بهتون توضیح میدم ولی در همین ابتدا بگم هیچ جواب قاطعی برای اینکه کدوم بهتره وجود نداره.
شما باید با توجه به بست پرکتیس های زبان پروژتون انتخاب کنید که قراره از کدوم تایپ کیس استفاده کنید.
—————————————————————-
1- snake_case
- تمام حروف باید کوچک باشند.
- هر کلمه با استفاده از _ به هم وصل میشود.
بیشتر در زبان پایتون این قابل مشاهده هست و در زبان هایی مثل جاوا، جاوااسکریپت کمتر دیده میشه.
● کاربرد ها :
- ساختن متغیر ها، نام متد ها
- اسامی جدول و ستون های یک دیتابیس
همچنین یک ورژن دیگه از snake case وجود داره که از حروف بزرگ استفاده میشه و معمولا در زبان های برنامه نویسی مواقعی استفاده میشه که نشان دهنده داده ای است که در طول برنامه تغییر نخواهد کرد.
—————————————————————-
2- kebab-case
- تمام حروف باید کوچک باشند.
- هر کلمه با استفاده از – به هم وصل میشود.
● کاربرد ها :
- در یو ار ال ها (URLs) مشاهده میشود.
—————————————————————-
3- camelCase
- حرف اول کلمه اول کوچک و حرف اول بقیه کلمات بزرگ است.
● کاربرد ها :
- در زبان های جاوا، جاوااسکریپت واسه ساخت متغیر ها و توابع و اسامی متد ها استفاده میشود
—————————————————————-
4- PascalCase
- حرف اول تمام کلمات بزرگ نوشته میشود.
● کاربرد ها :
- در نامگذاری کلاس ها در اکثر زبان ها کاربرد دارد.
—————————————————————-
منبع
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
در لاراول، برای دریافت توکنهای Bearer از request header میتونین به جای اینکه خودتون عملیات parse کردن token رو دستی انجام بدین ، از متود ()bearerToken استفاده کنید.
در واقع این متود به شما این امکان را میده که Bearer توکن رو بهسادگی از request header دریافت و در عملیاتهای مدنظر ازش استفاده کنین.
تفاوت استفاده از این متود با حالته معمولی در تصویر زیر کاملا گویاست.
#لاراول
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1823803584611541115?s=35
در واقع این متود به شما این امکان را میده که Bearer توکن رو بهسادگی از request header دریافت و در عملیاتهای مدنظر ازش استفاده کنین.
تفاوت استفاده از این متود با حالته معمولی در تصویر زیر کاملا گویاست.
#لاراول
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1823803584611541115?s=35
X (formerly Twitter)
OussamaMater (@OussamaMater) on X
Laravel Tip💡: Get Bearer Tokens Elegantly
Building an API with Laravel? You can retrieve the bearer token using the "bearerToken" method on the request object without having to manually parse it 🚀
#laravel
Building an API with Laravel? You can retrieve the bearer token using the "bearerToken" method on the request object without having to manually parse it 🚀
#laravel
👍6🔥3
Forwarded from CleverDevs (Mammad)
-اصل The Newspaper Metaphor در کلین کد
این اصل میگه که به یه روزنامه ای که خوب نوشته شده فکر کنید . شما از بالا شروع میکنید و تا پایین میخونیدیش .با خوندن عنوان مقاله می فهمید که اون صفحه در باره چیه و با خوندن پاراگراف اول هم یه خلاصه ای از محتوای صفحه میگیرید.
سورس کد هم تقریبا یه چیز مشابه به اینه شما با خوندن اسم فایل (یا حالا توی oop اسم کلاس) هدف کلی اون سورس فایل رو می فهمید قسمت های بالای کد که میتونه شامل توابع مهم یا متغیر ها و پراپرتی های مهم باشه (مثل پارگراف اول مقاله توی روزنامه) تا کسی که کد رو میخونه خلاصه ای از سورس دستش بیاد.
یه روزنامه شامل بخش های زیادیه که معمولا کوچیکن و در کنار هم با همچین شرایطی قرار گرفتنن تا روزنامه قابل خوندن باشه فرض کنید کل روزنامه فقط یه داستان یا مقاله بلند بود که خوندنش رو سخت میکرد سورس کد هم باید یه شرایط مشابهی داشته باشه تا قالب بندی خوبی داشته باشه یعنی فایل های مختلف با اسم درست و حسابی در کنار هم بیان و بدنه اصلی سورس کد کل برنامه رو بسازن
#CleanCode
@CleverDevs - @CleverDevsGp
این اصل میگه که به یه روزنامه ای که خوب نوشته شده فکر کنید . شما از بالا شروع میکنید و تا پایین میخونیدیش .با خوندن عنوان مقاله می فهمید که اون صفحه در باره چیه و با خوندن پاراگراف اول هم یه خلاصه ای از محتوای صفحه میگیرید.
سورس کد هم تقریبا یه چیز مشابه به اینه شما با خوندن اسم فایل (یا حالا توی oop اسم کلاس) هدف کلی اون سورس فایل رو می فهمید قسمت های بالای کد که میتونه شامل توابع مهم یا متغیر ها و پراپرتی های مهم باشه (مثل پارگراف اول مقاله توی روزنامه) تا کسی که کد رو میخونه خلاصه ای از سورس دستش بیاد.
یه روزنامه شامل بخش های زیادیه که معمولا کوچیکن و در کنار هم با همچین شرایطی قرار گرفتنن تا روزنامه قابل خوندن باشه فرض کنید کل روزنامه فقط یه داستان یا مقاله بلند بود که خوندنش رو سخت میکرد سورس کد هم باید یه شرایط مشابهی داشته باشه تا قالب بندی خوبی داشته باشه یعنی فایل های مختلف با اسم درست و حسابی در کنار هم بیان و بدنه اصلی سورس کد کل برنامه رو بسازن
#CleanCode
@CleverDevs - @CleverDevsGp
👍6❤2
در لاراول میتونید ستونهایی ایجاد کنید که به طور خودکار از دادههای یه سری ستونه دیگه محاسبه بشن.
در واقع لاراول بهمون این امکان رو داده که این نوع ستونها رو بدون نیاز به نوشتن SQL پیچیده در مایگریشن ها تعریف کنیم.
در تصویر زیر از امکانات خود لاراول برای پیاده سازیه ستون هایی جهته عملیات های محاسباتی استفاده شده.
یعنی full_price نتیجه ی عملیات ضربه unit_price و quantity خواهد بود.
#لاراول
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1824534160868016268?s=09
در واقع لاراول بهمون این امکان رو داده که این نوع ستونها رو بدون نیاز به نوشتن SQL پیچیده در مایگریشن ها تعریف کنیم.
در تصویر زیر از امکانات خود لاراول برای پیاده سازیه ستون هایی جهته عملیات های محاسباتی استفاده شده.
یعنی full_price نتیجه ی عملیات ضربه unit_price و quantity خواهد بود.
#لاراول
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1824534160868016268?s=09
X (formerly Twitter)
OussamaMater (@OussamaMater) on X
Laravel Tip💡: Generated Columns
Did you know that Laravel can handle generated columns in migrations out of the box? No need to write raw SQL in your migration to create these columns 🚀
#laravel
Did you know that Laravel can handle generated columns in migrations out of the box? No need to write raw SQL in your migration to create these columns 🚀
#laravel
🔥6👍2
در لاراول برای اضافه کردن شرط "OR" به کوئری از کدوم متود استفاده میشه؟
Anonymous Quiz
3%
whereNotNull()
8%
orWhereIn()
8%
Where()
82%
orWhere()
❤2👍1
Forwarded from CleverDevs (Mammad)
-اصل Method Names در کلین کد
این اصل میگه که نام متد ها باید فعل باشه مثل postPayment , deletePage , save و غیره و غیره
شما میتونید از get , set و is تو اسم متد هاتون استفاده کنید (اینا تو جاوا استاندارد هستن ولی خب تو بقیه زبون ها هم خوبه که استفاده کنید)
کد بالا مثال دقیقی از کلمات set ,get,is هستش که برای گرفتن از get برای ثبت کردن از set و برای چک کردن از is استفاده کرده
#CleanCode
@CleverDevs - @CleverDevsGp
این اصل میگه که نام متد ها باید فعل باشه مثل postPayment , deletePage , save و غیره و غیره
شما میتونید از get , set و is تو اسم متد هاتون استفاده کنید (اینا تو جاوا استاندارد هستن ولی خب تو بقیه زبون ها هم خوبه که استفاده کنید)
string name = employee.getName();
customer.setName("mike");
if (paycheck.isPosted())...
کد بالا مثال دقیقی از کلمات set ,get,is هستش که برای گرفتن از get برای ثبت کردن از set و برای چک کردن از is استفاده کرده
#CleanCode
@CleverDevs - @CleverDevsGp
👍8❤2
وقتی از ریلیشن های belongsTo یا hasOne استفاده میکنیم ممکنه بعضی از دیتاها وجود نداشته باشن و در نتیجه با null مواجه شیم.
اینجا مدلهای پیشفرض میتونه ازین مشکل جلوگیری کنه و در هر شرایطی یک شی از مدل برگردونه، حتی خالی پس میتونیم مطمئن شیم که با null قرار نیست مواجه شیم.
در مثال زیر با متود ()withDefault مشخص شده که در صورت null بودنه دیتا باید 'Guest Author' رو برگردونه.
#laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1825632694342136191?s=19
اینجا مدلهای پیشفرض میتونه ازین مشکل جلوگیری کنه و در هر شرایطی یک شی از مدل برگردونه، حتی خالی پس میتونیم مطمئن شیم که با null قرار نیست مواجه شیم.
در مثال زیر با متود ()withDefault مشخص شده که در صورت null بودنه دیتا باید 'Guest Author' رو برگردونه.
#laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1825632694342136191?s=19
X (formerly Twitter)
OussamaMater (@OussamaMater) on X
Laravel Tip 💡: Use Default Models
When working with "hasOne" or "belongsTo" relationships, we often check whether they are nullable before accessing their properties. In such cases, you can use default models and be sure you will never get null values 🚀…
When working with "hasOne" or "belongsTo" relationships, we often check whether they are nullable before accessing their properties. In such cases, you can use default models and be sure you will never get null values 🚀…
❤6🔥1
در لاراول برای تعیین نام جدول 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