Crazy Dev ❤️‍🔥💻
44 subscribers
112 photos
16 videos
11 files
69 links
Senior or Crazy ?! ❤️‍🔥
Download Telegram
SQL Interview Questions

#sql
#interview
❤1
Docker Tips&Tricks

#docker
#deployment
❤1
CICD / Github Actions

#github
#cicd
Laravel Authentication Tips&Tricks

#laravel
#authentication
Laravel Deployment Checklist

#laravel
#deployment
Linux Terminal Commands

#linux
#command
Laravel New Command

php artisan dev

#php
#laravel
#artisan
#development
❤1
Laravel DB::listen(...)

DB::listen() hooks into every SQL query Laravel executes and provides the SQL, bindings, and execution time. Register one listener in a service provider to log slow queries or investigate N+1 problems across the application.

https://www.linkedin.com/posts/povilas-korop-laravel-developer_laravel-tip-dblisten-hooks-into-every-share-7480195268878057472-do-U
❤1
‏Repository Pattern در پروژه‌های لاراول 🧱

یکی از چیزهایی که پروژه‌های لاراول بزرگ را قابل‌نگهداری‌تر می‌کند، جدا کردن منطق دسترسی به دیتابیس از باقی لایه‌هاست. این‌جاست که Repository Pattern خیلی کمک می‌کند.

ایده ساده است: به‌جای این‌که کنترلر مستقیم با Model و کوئری‌ها درگیر شود، با یک اینترفیس صحبت می‌کند. پشت این اینترفیس هر وقت خواستیم می‌توانیم Eloquent را عوض کنیم، کش اضافه کنیم یا منبع داده را تغییر بدهیم، بدون این‌که کنترلر بشکند. 🔧

۱) تعریف Interface برای Repository
<?php

namespace App\Repositories;

interface UserRepositoryInterface
{
public function paginate(int $perPage = 15);

public function findById(int $id);

public function create(array $data);
}


۲) پیاده‌سازی با Eloquent
<?php

namespace App\Repositories;

use App\Models\User;

class EloquentUserRepository implements UserRepositoryInterface
{
public function paginate(int $perPage = 15)
{
return User::query()->latest()->paginate($perPage);
}

public function findById(int $id)
{
return User::query()->findOrFail($id);
}

public function create(array $data)
{
return User::query()->create($data);
}
}


۳) Bind کردن در Service Container لاراول
این کار را معمولاً در AppServiceProvider انجام می‌دهیم:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\UserRepositoryInterface;
use App\Repositories\EloquentUserRepository;

class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->bind(UserRepositoryInterface::class, EloquentUserRepository::class);
}
}


حالا هرجا UserRepositoryInterface را type-hint کنیم، به‌طور خودکار EloquentUserRepository تزریق می‌شود. این همان قدرت Dependency Injection در لاراول است. ⚡️

۴) استفاده در Controller تمیزتر
<?php

namespace App\Http\Controllers;

use App\Repositories\UserRepositoryInterface;
use App\Http\Requests\StoreUserRequest;

class UserController extends Controller
{
public function __construct(
private readonly UserRepositoryInterface $users
) {}

public function index()
{
$users = $this->users->paginate(20);

return view('users.index', compact('users'));
}

public function store(StoreUserRequest $request)
{
$this->users->create($request->validated());

return redirect()->route('users.index');
}
}


حالا کنترلر فقط روی flow و پاسخ تمرکز دارد، نه روی جزئیات کوئری‌ها. این کار:

• تست‌نویسی را ساده‌تر می‌کند (می‌توان Mock از Repository ساخت) ✅
• وابستگی به Eloquent را از سطح کنترلر کم می‌کند ✅
• تغییرات دیتابیس یا اضافه‌کردن لایه cache را راحت‌تر می‌کند ✅

برای مطالعه عمیق‌تر، مستندات Service Container لاراول را ببینید:
https://laravel.com/docs/container

کم‌کم که پروژه بزرگ‌تر می‌شود، استفاده درست از Repository Pattern می‌تواند ساختار کد را منظم‌تر، testableتر و قابل‌گسترش‌تر کند. از قدم‌های کوچک شروع شود؛ مثلاً از ماژول User یا Order و بعد سایر بخش‌ها را به این الگو مهاجرت بدهید. 🚀

🔖 #Laravel #PHP #لاراول #Laravel #Repository_Pattern #Clean_Code #Service_Container #PHP #Architecture

👤 Developix

💎 Channel: @DevelopixLaravel
اگه تا الان ابزار Git رو یادنگرفتین یا آموزش خوبی براش ندیدین،

سایت GitByBit با هدف آموزش Hands-On مشکلتون رو حل میکنه.

حتی اگه گیت هم بلدین یه نگاه به سایتش بکنین. اینقدر این سایت رو جذاب ساخته آقای الکساندر شوتس که میتونی از نگاه کردن به لندینگ پیج سایت بسیار لذت ببری :)

بماند که چند سال طول کشیده بسازتش (پروژه بزرگی هست، بخشهای بسیار زیاد و هماهنگی خیلی زیادی با ابزارهای متنوع داره) ولی یادآور بسیار خوبیه که برای خلق یک محتوای خوب، هر چقدر هم که ابزار حرفهای در اختیار داشته باشی، "زمان" همچنان مهمترین فاکتوره. البته اینم بگم که ایشون دفعه اولشون نیست چنین سایت های آموزشی برای مطالب پیچیده میسازن.

#Git
#Github
#Learn
#AlexanderShvets

GitByBit https://gitbybit.com

@crzy_dev

Resource:
https://www.linkedin.com/posts/reza-shahmoradi-3332a21aa_aexaezaeqaepaezaevabraewahy-share-7481758349378711552-UdbI
❤2
Physics - Doppler Law

#Physics
#Doppler
Forwarded from Tech Stuff
هدر Content Security Policy

این هدر مشخص می‌کنه مرورگر اجازه داره فایل‌های جاوااسکریپت، CSS، تصویر و بقیه منابع رو از چه جاهایی بارگذاری کنه. این کار باعث میشه حتی اگه یه مهاجم موفق بشه کد مخرب رو مثلا از طریق XSS داخل صفحه inject کنه، مرورگر در خیلی از مواقع اجازه اجرای اون کد رو نده.

برای فعال کردنش کافیه هدر CSP رو توی responseهای HTTP قرار بدید و مشخص کنید هر نوع منبع از کجا مجازه لود بشه. مثال (1)، قانون اول (default-src 'self') میگه به طور پیش‌فرض همه منابع فقط از همون دامنه‌ای که خود سایت روی اون اجرا شده (same origin) بارگذاری بشن، مگر اینکه برای نوع خاصی از منابع قانون جداگانه‌ای تعریف شده باشه. قانون دوم (script-src) میگه اسکریپت‌ها فقط از همون دامنه سایت ('self') یا از https://cdn.example.com مجاز به بارگذاری هستن.

فرض کنید سایت شما از https://cdn.example.com برای فایل‌های جاوااسکریپت استفاده می‌کنه. اگر مهاجم بتونه کد (2) رو داخل صفحه تزریق کنه، مرورگر قبل از دانلود فایل، CSP رو بررسی می‌کنه. چون evil.com داخل script-src قرار نداره، درخواست رو بلاک می‌کنه و اسکریپت اجرا نمیشه(3).

@techstuff100
❤1
Forwarded from مـــیـــمـــ دالــ
دوستان یه تجربه مهم از کرون جاب laravel روی هاست اشتراکی داشتم گفتم با شما اشتراک بزارم

من یه مشکل داشتم که پیامک‌های یادآوری توی لوکال کار می‌کردن ولی روی هاست ارسال نمی‌شدن. بعد از کلی بررسی و تست مشخص شد مشکل از این بود که تابع proc_open روی هاست اشتراکی غیرفعال بود.

لاراول وقتی از schedule->command() داخل Kernel.php استفاده می‌کنه پشت‌صحنه به proc_open نیاز داره. چون این تابع روی هاست بسته بود Scheduler اجرا می‌شد ولی اون command مخصوص ارسال پیامک fail می‌شد.

راه‌حل من این بود
به‌جای php artisan schedule:run
خود دستور رو مستقیم داخل Cron Job گذاشتم

اگر روی هاست اشتراکی Laravel Scheduler کار نمی‌کنه حتما proc_open رو چک کنید
❤1
۱۰ گیگ حافظه سرور رو داکر بلعیده بود! 😤

🔥 CI/CD با SSH روی سرور. هر بار docker build. سرور کند شد. کانتینر و ایمیج ۲ گیگ هم نبودن. ۱۰ گیگ مال چی بود؟

docker system df
Build Cache: 9.8GB 😱

هر بیلد cache جدید می‌ساخت، قدیمی پاک نمی‌شد.

💡 چرا؟ داکر cache قدیمی رو نگه می‌داره. شاید یه image دیگه لازمش باشه. نتیجه: تلنبار میشه 📦

🧹 راه‌حل:
docker builder prune --filter "until=24h" --force

قدیمی‌تر از ۲۴ ساعت پاک میشه. امروزی می‌مونه.

🚀 دستورات 🧹
🟢 docker builder prune --force
🟢 docker builder prune --filter "until=24h" --force
🟡 docker builder prune --all --force
🔴 docker system prune --all --volumes --force

🤖 اسکریپت CI/CD
docker compose pull && docker compose up -d --force-recreate
docker builder prune --filter "until=24h" --force

⏰ کرون‌جاب شبانه
0 3 * * * docker builder prune --filter "until=24h" --force

📊 قبل: ۱۰ گیگ | بعد: زیر ۱ گیگ

🎓 درس: بعد از هر بیلد cache قدیمی رو پاک کن 🧠✨

#Docker #DevOps #CICD #LinuxTips #SysAdmin #PersianTech