کانال آموزشی لاراول
3.06K subscribers
120 photos
4 videos
38 links
📌 کانال اتاق برنامه نویسی
@PapiDon_coding
Download Telegram
🚀 به زودی پلتفرم ما با آموزش‌های جامع‌تر و گام به گام، همراه با مثال‌های بیشتر و جزئی تر، آماده خواهد شد. تا از هر آنچه که می‌خواهید بیشتر و بهتر بدانید، لذت ببرید. 😊🫶

🔔 اطلاع‌رسانی مربوط به پلتفرم تنها در همین کانال انجام خواهد شد. 🌟🔥

#PapiDon
❤‍🔥16👍51
🔍 مهارت‌های اساسی غیرفنی (Soft Skills) برای برنامه‌نویسان 🔍

همگان می‌دانند که برنامه‌نویسان نیاز به مهارت‌های فنی خاص خودشان دارند. اما آیا می‌دانید که مهارت‌های غیرفنی نیز در موفقیت آن‌ها نقش پررنگی دارد؟

🔹 1. ارتباط موثر: با مشتریان، تیم و مدیران.
🔹 2. حل مسئله: شناسایی و رفع چالش‌ها.
🔹 3. یادگیری مداوم: با تغییرات فناوری هم‌گام باشید.
🔹 4. کار گروهی: همکاری با افراد با تخصص‌های متفاوت.
🔹 5. مدیریت زمان: اولویت‌بندی و انجام وظایف در زمان مقرر.
🔹 6. پذیرش نقد: استفاده از فیدبک برای بهبود.
🔹 7. مدیریت استرس: مقابله با فشارهای کاری.
🔹 8. رویکرد مشتری‌مدار: فهم و پاسخ به نیازهای مشتری.
🔹 9. تصمیم‌گیری: در مواقع حساس و ناخواسته.
🔹 10. مسئولیت‌پذیری: پذیرش خطاها و یادگیری از آن‌ها.

🚀 هرگز فراموش نکنید که موفقیت در دنیای برنامه‌نویسی نه تنها به دانش فنی بستگی دارد، بلکه به توانایی‌های انسانی و تعامل با دیگران نیز وابسته است.


#PapiDon
@PapiDon_state
❤‍🔥43👍2
🔍 آشنایی با سیستم LAMP

آیا تا به حال با این سوال روبرو شده‌اید که LAMP چیست؟

🌐 What is LAMP ?

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


🔢 مولفه‌های LAMP:

1. L: Linux – سیستم‌عامل مبتنی بر لینوکس
2. A: Apache – وب‌سرور محبوب و متن‌باز
3. M: MySQL – پایگاه داده
4. P: PHP – زبان برنامه‌نویسی (گاهی به Perl یا Python هم می‌پردازند).


@PapiDon_state
👍5❤‍🔥3
🔍 Str::mask()

امروز با شما یک تابع جالب در لاراول به نام ()Str::mask را مرور می‌کنیم.

🎯 ماسک کردن بخشی از رشته با یک کاراکتر خاص (مانند *).

🔧 نحوه استفاده:
فرض کنید می‌خواهید چند کاراکتر از یک رشته را مخفی کنید، مثلاً ارقام وسط یک شماره کارت:

$card = Str::mask('1234567890123456', 5, 12); 

// Result : 1234********3456

در این مثال، کاراکترهای پنجم تا دوازدهم رشته با * جایگزین شده‌اند.
و اگر پارامتر دوم را ندهیم از کاراکتر پنجم به بعد رشته * جایگزین خواهد شد.


@PapiDon_state
👍203
Manage your energy, not your time. If you do that, time works itself out.

📌انرژی خود را مدیریت کن، نه زمانت را. اگر این کار را انجام دهی، زمان خود به خود درست می‌شود

معمولا ما به فکر این هستیم که چگونه زمان خود را به صورت بهینه‌تری استفاده کنیم، اما اگر انرژی‌امان را به درستی مدیریت نکنیم، حتی اگر زمان زیادی داشته باشیم، بهره‌برداری مناسبی از آن نخواهیم داشت.

🔋 مدیریت انرژی به مواردی مانند استراحت، تغذیه مناسب، ورزش، روانشناسی و حتی محیط کار مرتبط است. وقتی انرژی‌امان را به خوبی مدیریت می‌کنیم، بهره‌وری بیشتری خواهیم داشت و زمان خود را به صورت اثربخش‌تری استفاده می‌کنیم. از این رو، به جای اینکه تنها روی زمان متمرکز شویم، باید روی انرژی‌امان هم تمرکز داشته باشیم.

@PapiDon_state
👍72💯1
https://laravelpodcast.com/episodes

اگر علاقه دارید که اخبار، موضوعات جدید و کلا هرچیزی درباره دنیای لاراول رو در قالب پادکست بشنوید. اینجا رو حتما بهش یه سری بزنید. 🎙


📌@PapiDon_state
👍3
🔥 Laravel Octane 🔥

برای بهینه سازی پروژه های لاراول و افزایش سرعت آنها توسط تیم لاراول ارائه شده است. این پکیج برای رسیدن به چنین عملکردی از یکی از ابزار های Swoole یا RoadRunner (بعنوان Driver) به دلخواه کاربر استفاده می‌کند.

مزایا:

1️⃣ سرعت بیشتر
2️⃣ همگام‌سازی کمتر
3️⃣ سازگاری با Laravel

معایب:

1️⃣مشکلات Memory Leaks
2️⃣ چالش‌ها در Stateful Environments
3️⃣ پیچیدگی تنظیمات
4️⃣ سازگاری با برخی افزونه‌ها

🧐 مطالعه بیشتر :

🔗 https://laravel.com/docs/10.x/octane


📌@PapiDon_state
👍6❤‍🔥1
⚙️ Bun 1.0

یک ابزار همه‌کاره برای اجرا، ساخت، آزمون و اشکال‌زدایی جاوااسکریپت و تایپ‌اسکریپت است، از یک فایل تا یک برنامه کامل.

🔹 هدف اصلی "Bun" حذف کندی و پیچیدگی در توسعه است، بدون اینکه ویژگی‌های جاوااسکریپت را نادیده بگیرد.

🔹تا 4 برابر سریع‌تر از Node.js است و پشتیبانی کاملی از TypeScript و JSX دارد.

🔹 این ابزار دارای پلاگین‌ها، APIهای خاص و یک مدیر بسته سریع است.

🔹 یک باندل‌کننده و فشرده‌ساز جاوااسکریپت و تایپ‌اسکریپت است.

🔗 https://bun.sh/blog/bun-v1.0

📌@PapiDon_state
👍31
🚀 آشنایی با متد sole در لاراول

متد sole یک متد کمکی است که هم در کوئری بیلدر و هم در مجموعه‌ها (collections) در لاراول موجود است. وقتی از این متد استفاده می‌کنید، انتظار دارید که فقط یک نتیجه با شرایط معین دریافت کنید. اگر فقط یک نتیجه باشد، آن را دریافت می‌کنید، ولی اگر بیش از یک نتیجه یا حتی هیچ نتیجه‌ای وجود نداشته باشد، لاراول یک خطا به شما نمایش می‌دهد.

استفاده از sole در مجموعه‌ها (collections):

$collection = collect([1, 2, 3, 4]);

$item = $collection->filter(function ($value) {
return $value > 3;
})->sole();

در مثال بالا، متد filter یک مجموعه با مقدار 4 برمی‌گرداند. چون تنها یک مقدار با شرط داده شده وجود دارد، متد sole آن مقدار را برمی‌گرداند. در صورت وجود بیشتر یا کمتر از یک مقدار مطابقت داشته باشد، استثناء رخ می‌دهد.


📌@PapiDon_state
11👏5
"It always seems impossible until it's done."

🌟همیشه چیزها غیرممکن به نظر می‌رسند تا زمانی که انجام شوند.

این جمله به ما یادآور می‌شود که حتی اگر چیزی دشوار یا غیرممکن به نظر بیاید، با تلاش و پشتکار، می‌توان آن را به انجام رساند. بیایید با این انرژی و باور به توانمندی‌های خود، روزمان را شروع کنیم.


📌@PapiDon_state
👍81👏1
🚀 maatwebsite/excel in Larave

این پکیج، یک ابزار قدرتمند برای کار با فایل‌های Excel در فریم‌ورک لاراول است. این ابزار اجازه می‌دهد که به آسانی اطلاعات را از یک فایل Excel وارد و یا به آن خروجی دهید.

ویژگی‌ها:

1. وارد کردن اطلاعات با سرعت بالا
2. خروجی با فرمت‌های مختلف مانند XLS, XLSX, CSV
3. امکان مپ کردن ستون‌های فایل به مدل‌های دیتابیس
4. پشتیبانی از معیارها و فیلترهای مختلف

🛠نحوه نصب:

برای نصب این پکیج کافی است دستور زیر را در ترمینال خود اجرا کنید:

composer require maatwebsite/excel

📖 مستندات:

https://packagist.org/packages/maatwebsite/excel


📌@PapiDon_state
👍101
🚀 معرفی Pest در لاراول 🚀

آیا تا کنون با Pest آشنا شده‌اید؟

🔍 یک ابزار تست نویسی جدید و پویا در لاراول است. با این ابزار، می‌توانید تست‌های خود را با یک سینتکس زیباتر و ساده‌تر نوشته و اجرا کنید.

🌟 ویژگی‌های کلیدی:

1️⃣ سینتکس ساده و خواندنی: با استفاده از Pest، کدهای تست شما کوتاه‌تر، خواناتر و بهینه‌تر خواهد بود.

2️⃣ پشتیبانی از توابع Higher-order و متدهای Chainable : با این ویژگی، تست‌نویسی به یک تجربه انعطاف‌پذیر و قدرتمند تبدیل می‌شود.

⚙️ برای استفاده از Pest کافی است از طریق composer آن را نصب کنید:

composer require pestphp/pest --dev

🎉 اگر به دنبال بهبود فرآیند تست نویسی خود در لاراول هستید، Pest یک گزینه عالی است!

🔗 مستندات :
https://pestphp.com/


📌@PapiDon_state
👍62👏2
استفاده از متد __invoke در #لاراول

هر زمان که بخواهید یک کنترلر با تنها یک وظیفه داشته باشید، می‌توانید از متد جادویی __invoke استفاده کنید!

🔍 چرا؟

1️⃣ سادگی: نیازی به تعیین نام متد در مسیر ندارید.
2️⃣ خواندنی: کدتان تمیزتر و مستقیم‌تر می‌شود.

🌟 مثال:

کنترلر:
class ShowProfile extends Controller {
public function __invoke($id) {
// code ...
}
}


مسیر:
اگر از این متد در کنترلر استفاده کنید، نیازی به تعیین نام متد در مسیر (route) ندارید

Route::get('/user/{id}', ShowProfile::class);


همین! هر زمان که این مسیر فراخوانی می‌شود، متد __invoke اجرا می‌شود. 😍


@PapiDon_state
👍211
🔍 الگوی (Repository Pattern) در برنامه‌نویسی چیست؟

📚 فرض کنید می‌خواهید یک کتاب از کتابخانه بیرون بیاورید:

1️⃣ اگر مستقیما وارد انبار کتاب‌ها شوید و شروع به جستجو کنید، زمان زیادی می‌برد، گم می‌شوید و حتی ممکن است به دسترسی اطلاعات نادرست یا مناسبی نرسیده باشید.

2️⃣ اما، وقتی به میز اطلاعات مراجعه می‌کنید و از کتابدار کمک می‌خواهید، او به سرعت می‌تواند کتاب مورد نظر شما را پیدا و به شما بدهد.

در این مثال:

🔹کتابدار: همان "Repository" است. او می‌داند که هر کتاب کجا قرار دارد و چگونه باید به آن دسترسی پیدا کرد.

🔹انبار کتاب‌ها: به منابع داده اطلاعاتی (مثل پایگاه‌های داده یا APIها) اشاره دارد.

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


📌@PapiDon_state
🔥10❤‍🔥21👍1🙏1
فرض کنید می‌خواهید از یک پایگاه داده لیستی از کتاب‌ها را دریافت کنید. بدون استفاده از الگوی Repository، ممکن است مستقیماً در کنترلر خود از مدل استفاده کنید:

بدون استفاده از Repository:
namespace App\Http\Controllers;

use App\Models\Book;
use Illuminate\Http\Request;

class BookController extends Controller
{
public function index()
{
$books = Book::all();
return view('books.index', compact('books'));
}
}

اما با استفاده از الگوی Repository، شما یک مخزن برای کتاب‌ها می‌سازید:

BookRepository.php

namespace App\Repositories;

use App\Models\Book;

class BookRepository
{
protected $book;

public function __construct(Book $book)
{
$this->book = $book;
}

public function all()
{
return $this->book->all();
}
}

حالا، در کنترلر خود، از این مخزن استفاده می‌کنید:

namespace App\Http\Controllers;

use App\Repositories\BookRepository;
use Illuminate\Http\Request;

class BookController extends Controller
{
protected $bookRepository;

public function __construct(BookRepository $bookRepository)
{
$this->bookRepository = $bookRepository;
}

public function index()
{
$books = $this->bookRepository->all();
return view('books.index', compact('books'));
}
}

با استفاده از این رویکرد:

1️⃣ کد شما تمیزتر و منظم‌تر می‌شود.
2️⃣ اگر روزی تصمیم به تغییر منبع داده (مثل استفاده از یک API به جای پایگاه داده) بگیرید، فقط باید مخزن مربوطه را تغییر دهید و نیازی به تغییر کنترلرها ندارید.
3️⃣ تست‌ها نیز آسان‌تر انجام می‌شوند. شما می‌توانید برای مخزن یک mock ایجاد کرده و از آن در تست‌ها استفاده کنید.

⚙️این فقط یک مثال ساده بود. در پروژه‌های واقعی، الگوی Repository می‌تواند بسیار پیچیده‌تر و قدرتمندتر باشد.

⚠️در لاراول به صورت پیش فرض دستوری برای ایجاد یک "Repository" وجود ندارد. اما شما می‌توانید به صورت دستی خودتان فایل‌ها را ایجاد کنید.
برای ایجاد یک "Repository" به صورت دستی:

1️⃣ ابتدا یک پوشه با نام "Repositories" در داخل پوشه "app" ایجاد کنید.
2️⃣درون این پوشه، یک فایل با نام Repositorie خود، مانند "BookRepository.php"، ایجاد کنید.

📌@PapiDon_state
👍121👏1🙏1
اگر تو نخواهی یاد بگیری، هیچ کس نمی‌تواند به تو کمک کند. اگر تو به یادگیری مصمم باشی، هیچ کس نمی‌تواند مانع تو باشد.

💪 @PapiDon_state
👍106👏1👌1
🛠 Factory Pattern 🛠

همیشه در هنگام نوشتن کد با مواردی مواجه می‌شویم که نیاز به ایجاد نمونه‌های متعدد از یک کلاس داریم. الگوی Factory به ما کمک می‌کند تا این فرایند را ساده‌تر و منظم‌تر کنیم.

🧐 چرا از الگوی Factory ؟

1️⃣جداسازی فرآیند ایجاد نمونه از کد اصلی.

2️⃣انعطاف‌پذیری بیشتر: تغییر نحوه ایجاد نمونه بدون تغییر در کد اصلی.

3️⃣ مدیریت آسان‌تر و ساختار بهتر برای کد.

4️⃣کد خالص‌تر و منظم‌تر.

در Laravel، الگوی Factory همراه با Dependency Injection استفاده می‌شود، که ساخت نمونه‌های پیچیده‌تر را آسان‌تر می‌کند.

⚙️ با استفاده از Factory Pattern، می‌توانید نوشتار کد خود را منعطف‌تر و قابل مدیریت‌تر کنید.

📌@PapiDon_state
👍121
Factory Pattern

ما یک وب‌سایت فروش ماشین داریم. در این وب‌سایت، کاربر می‌تواند از میان انواع مختلف ماشین‌ها مثل Sedan یا SUV انتخاب کند. برای سادگی، ما می‌خواهیم هنگام ساخت یک ماشین جدید، تنها نوع ماشین مورد نظر کاربر را مشخص کنیم و سایر جزئیات مربوط به آن نوع ماشین بطور خودکار تعیین شود.

⚙️ بدون استفاده از الگوی Factory:

1️⃣ایجاد مدل‌ها
// app/Models/Sedan.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Sedan extends Model {
public function description() {
return "I'm a Sedan!";
}
}

// app/Models/SUV.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class SUV extends Model {
public function description() {
return "I'm an SUV!";
}
}


2️⃣استفاده از مدل‌ها در Controller

use App\Models\Sedan;
use App\Models\SUV;

public function createCar($type) {
if ($type === 'sedan') {
$car = new Sedan();
} elseif ($type === 'suv') {
$car = new SUV();
} else {
throw new Exception("Car type not recognized.");
}

return $car->description();
}


با استفاده از الگوی Factory

1️⃣ ایجاد یک Factory
// app/Factories/CarFactory.php
namespace App\Factories;

use App\Models\Sedan;
use App\Models\SUV;

class CarFactory {
public static function create($type) {
switch($type) {
case 'sedan':
return new Sedan();
case 'suv':
return new SUV();
default:
throw new Exception("Car type not recognized.");
}
}
}


2️⃣ استفاده از Factory در Controller
use App\Factories\CarFactory;

public function createCarUsingFactory($type) {
$car = CarFactory::create($type);
return $car->description();
}


🛠 همانطور که می‌بینید، با استفاده از الگوی Factory، کد Controller ساده‌تر و منظم‌تر شده و امکان افزودن نوع‌های جدیدی از ماشین‌ها به راحتی وجود دارد، بدون آنکه نیازی به تغییر Controller باشد.

📌@PapiDon_state
🔥7👍3👏31👌1
⚜️آشنایی با متد updateOrCreate

آیا تاکنون خواسته‌اید در لاراول یک رکورد را به روز کنید و اگر وجود نداشت، آن را ایجاد کنید؟ 🤔 updateOrCreate همان گزینه‌ی مورد نظر شماست!

🧐 چطور کار می‌کند؟

1️⃣ اول، بر اساس معیارهایی که مشخص کرده‌اید، جستجو می‌شود.

2️⃣ اگر رکورد با آن معیارها وجود داشت، داده‌ها به روز می‌شوند.

3️⃣ اگر وجود نداشت، یک رکورد جدید با آن مشخصات ایجاد می‌شود.

📌 مثال ساده:

$user = User::updateOrCreate(
['email' => 'sample@example.com'],
['name' => 'Ali']
);

در این مثال، اگر کاربری با ایمیل sample@example.com وجود داشت، نامش به Ali تغییر می‌کند. اگر نبود، کاربر جدیدی با این ایمیل و نام ایجاد می‌شود.

با `updateOrCreate`، همیشه اطمینان داشته باشید که داده‌هایتان به روز و بدون تکرار است!


📌@PapiDon_state
👍121