Golden Code – Telegram
Golden Code
737 subscribers
53 photos
248 links
نکات laravel, php و...
Download Telegram
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
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
👍6🔥3
Forwarded from CleverDevs (Mammad)
-اصل The Newspaper Metaphor در کلین کد

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

سورس کد هم تقریبا یه چیز مشابه به اینه شما با خوندن اسم فایل (یا حالا توی oop اسم کلاس) هدف کلی اون سورس فایل رو می فهمید قسمت های بالای کد که میتونه شامل توابع مهم یا متغیر ها و پراپرتی های مهم باشه (مثل پارگراف اول مقاله توی روزنامه) تا کسی که کد رو میخونه خلاصه ای از سورس دستش بیاد.

یه روزنامه شامل بخش های زیادیه که معمولا کوچیکن و در کنار هم با همچین شرایطی قرار گرفتنن تا روزنامه قابل خوندن باشه فرض کنید کل روزنامه فقط یه داستان یا مقاله بلند بود که خوندنش رو سخت میکرد سورس کد هم باید یه شرایط مشابهی داشته باشه تا قالب بندی خوبی داشته باشه یعنی فایل های مختلف با اسم درست و حسابی در کنار هم بیان و بدنه اصلی سورس کد کل برنامه رو بسازن

#CleanCode
@CleverDevs - @CleverDevsGp
👍62
در لاراول میتونید ستون‌هایی ایجاد کنید که به طور خودکار از داده‌های یه سری ستونه دیگه محاسبه بشن.
در واقع لاراول بهمون این امکان رو داده که این نوع ستون‌ها رو بدون نیاز به نوشتن SQL پیچیده در مایگریشن ها تعریف کنیم.

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

یعنی full_price نتیجه ی عملیات ضربه unit_price و quantity خواهد بود.
#لاراول
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1824534160868016268?s=09
🔥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 تو اسم متد هاتون استفاده کنید (اینا تو جاوا استاندارد هستن ولی خب تو بقیه زبون ها هم خوبه که استفاده کنید)
 
string name = employee.getName();
customer.setName("mike");
if (paycheck.isPosted())...



کد بالا مثال دقیقی از کلمات set ,get,is هستش که برای گرفتن از get برای ثبت کردن از set و برای چک کردن از is استفاده کرده

#CleanCode
@CleverDevs - @CleverDevsGp
👍82
وقتی از ریلیشن های belongsTo یا hasOne استفاده می‌کنیم ممکنه بعضی از دیتاها وجود نداشته باشن و در نتیجه با null مواجه شیم.

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

در مثال زیر با متود ()withDefault مشخص شده که در صورت null بودنه دیتا باید 'Guest Author' رو برگردونه.

#laravel
@GoldenCodeir
(به منبع و مثالش توجه کنید👇🏾)
https://x.com/OussamaMater/status/1825632694342136191?s=19
6🔥1
در لاراول برای تعیین نام جدول pivot به صورت customize شده در رابطه "many to many" از کدوم متود استفاده میشه؟
Anonymous Quiz
27%
PivotTable()
10%
Table()
52%
WithPivot()
11%
Using()
👍53
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
👍41🔥1🤔1
برای تنظیم وضعیت "checked" یک check box در لاراول به صورت شرطی میتونید از یه دستور Blade با نام checked@ استفاده کنید.

با همین دستور به راحتی میتونید مشخص کنید که بر اساس یک شرط خاص ،آیا 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
👍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
7👍3
در لاراول Bulk Dispatch به معنیه ارسال گروهی از تسک‌ها به صف بطور همزمان هستش. یعنی بجای اینکه هر تسک رو جداگانه ارسال کنیم میتونیم تعداد زیادیشون رو یکجا ارسال کنیم به صف.

مزایاش؟؟

‌کمتر شدن زمان پردازش
بهبود عملکرد
کاهش تعداد درخواست های ارسالی به صف ها
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین 👇🏾)
https://x.com/OussamaMater/status/1829246628613464507?s=35
🔥3👍2
Forwarded from CleverDevs (Mammad)
‏Named Arguments توی php چیه و چه کاربردی داره ؟

این فیچر که توی 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
👏122
بیشتره کاربرا عادت دارن از یک پسورد برای همه حسابهاشون استفاده کنن. حالا اگه یک سایت هک بشه، باقیه اکانت هاشونم به خطر میفته.

در لاراول یک قانونی هست به نام "uncompromised" که کمک میکنه از ایجاد پسورد هایی که قبلاً در سایت‌های دیگه لو رفتن جلوگیری بشه که باعث میشه رمز ایمن‌تری ایجاد بشه.

حالا چجوری این کارو میکنه؟

یه سرویس هست با نام HIBP که پسورد های لورفته در دیتابیسش هست.
این uncompromised نقش رابط بین laravel و سرویسHIBP رو داره و تهش متوجه میشه پسورد ایمنه یا نه و حالا اگه ایمن نباشه هم ولیدیشن به خطا میخوره.
#Laravel
@GoldenCodeir
(به منبع و مثالش توجه کنین👇🏾)
https://x.com/OussamaMater/status/1829613512168976836?s=19
👍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