ru
Feedback
| AmirHossein |

| AmirHossein |

Открыть в Telegram

نوشته‌های یک برنامه‌نویس ناشی 🫂 @StartUnity

Больше
635
Подписчики
-324 часа
-87 дней
-230 день
Архив постов
استریم‌ ها در PHP - قسمت اول در PHP، استریم (Stream) یک سازوکار انتزاعی برای مدیریت ورودی و خروجی داده‌ها است. به زبان ساده، استریم‌ها به شما امکان می‌دهند انواع مختلف منابع داده (مانند فایل‌های سیستم، درخواست‌های شبکه، داده‌های فشرده و ...) را از طریق یک رابط یکسان بخوانید یا بنویسید. به جای آنکه برای هر نوع منبع تابع‌ها یا روش‌های جداگانه‌ای داشته باشید، PHP با استفاده از استریم‌ها یک مجموعه توابع عمومی (مثل fopen, fread, fwrite و ...) فراهم کرده که با همه این منابع به شکل یکنواخت رفتار می‌کنند. هر استریم رَپر (Stream Wrapper) در PHP در واقع یک پروتکل یا طرح (scheme) خاص را پیاده‌سازی می‌کند که به صورت scheme:// استفاده می‌شود. برای مثال، file:// برای دسترسی به سیستم فایل محلی، http:// برای منابع وب، یا php:// برای منابع داخلی PHP استفاده می‌شود. ‏PHP به طور پیش‌فرض تعداد زیادی استریم رپر داخلی دارد که بسیاری از کارهای معمول را پوشش می‌دهند. شما می‌توانید توسط این استریم‌ها به سادگی کارهایی مثل خواندن فایل‌ها، دریافت داده از وب, نوشتن خروجی، خواندن ورودی خام درخواست‌ها و حتی کار با داده‌های فشرده‌شده را انجام دهید، بدون اینکه نگران جزئیات سطح پایین هر کدام باشید. استریم‌های داخلی PHP - ‏php:// 1- php://input این استریم برای دسترسی به دادهٔ ورودی خام HTTP در PHP استفاده می‌شود. به طور خاص، این استریم محتوای خام بدنهٔ درخواست HTTP را (معمولاً در درخواست‌های POST یا PUT) ارائه می‌کند، بدون هیچ‌گونه پردازش یا parse خودکار. زمانی که نیاز دارید ورودی خام درخواست را بخوانید (مثلاً دریافت داده‌های JSON از یک API کلاینت یا پردازش درخواست‌های RESTful)، این استریم بسیار مفید است. برخلاف متغیرهای سراسری مانند $_POST که فقط داده‌های form-urlencoded را می‌گیرند، این استریم اجازه می‌دهد انواع داده‌ها (JSON, XML, متن خام و ...) را مستقیماً از بدنهٔ درخواست دریافت کنید.
$json = file_get_contents("php://input");
$data = json_decode($json, true);
echo "Hello " . $data["user"];
در این مثال، محتوای خام ورودی HTTP با file_get_contents از php://input خوانده شده و سپس از JSON به آرایه PHP تبدیل می‌گردد. در نهایت نام کاربر خروجی گرفته می‌شود. اگر درخواست فوق رشتهٔ JSON
{"user": "Ali"}
را ارسال کرده باشد، خروجی برنامه Hello Ali خواهد بود. توجه داشته باشید php://input فقط خواندنی است و فقط یک بار می‌توان محتوا را از آن خواند، یعنی پس از خواندن، محتوای آن خالی می‌شود. همچنین در مورد درخواست‌های معمولی فرم (مانند multipart/form-data برای آپلود فایل)، استفاده از این استریم توصیه نمی‌شود، زیرا PHP آن داده‌ها را قبلاً پردازش کرده است. 2- php://output این استریم خروجی استاندارد اسکریپت PHP را نمایندگی می‌کند. هر داده‌ای که در آن نوشته شود، مستقیماً به خروجی معمول برنامه (همان چیزی که مرورگر دریافت می‌کند یا در CLI ترمینال نشان داده می‌شود) فرستاده می‌شود. زمانی که بخواهید با توابع استریم داده‌ای را به خروجی بفرستید (به جای استفاده از echo یا print)، می‌توانید php://output را مانند یک فایل باز کرده و در آن بنویسید. این قابلیت می‌تواند در سناریوهایی مفید باشد که یک تابع انتظار یک منبع استریم برای خروجی دارد یا هنگامی که می‌خواهید خروجی را از سایر عملیات جدا کنید.
$fp = fopen("php://output", "w");
fwrite($fp, "Hello World!");
fclose($fp);
در این قطعه کد، ما استریم خروجی را باز کرده‌ایم و یک خط متن را با fwrite در آن نوشتیم. نتیجهٔ اجرای این کد نمایش متن ذکر شده در خروجی (مثلاً مرورگر یا کنسول) است. در واقع کاری که fwrite در اینجا انجام می‌دهد معادل همان echo کردن رشته‌ها است. در قسمت های بعدی با سایر استریم‌ها در PHP آشنا خواهیم شد. #PHP #PHP_streams @AmirhDeveloper .

یه مجموعه پست از PHP Streams هم نوشتم و در کنار پست های لاراول ارسال می‌کنم.

فصل شش - Requests and Response بخش دوم - اعتبارسنجی درخواست ها اعتبارسنجی ها عمدتا به 3 روش انجام می شوند. در این پست به 2 روش آن اشاره می شود و روش سوم در پست های بعدی کامل بررسی خواهد شد. یکی از روش های مرسوم اعتبارسنجی بر روی درخواست ها (ورودی ها POST، GET و...) فراخوانی متد validate از متغیر $request می باشد.
public function store(Request $request)
{
  $validated = $request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
  ]);
}
کد بالا درخواست ما را اعتبارسنجی می کند، به عنوان مثال، مقدار input با نام title باید required، unique و طول حداکثر 255 کاراکتر داشته باشد. اگر همه این ویژگی ها را داشته باشد اعتبارسنجی درخواست موفقیت آمیز بوده، در غیر اینصورت یک آرایه از error ها ایجاد می شود. روش دیگر اعتبارسنجی استفاده از فساد Validator است:
$validator = Validator::make($request->all(), [
  'title' => 'required|unique:posts|max:255',
  'body' => 'required',
]);
کد بالا همانند روش اول است، با این تفاوت که می توان اعتبارسنجی را روی داده های دلخواه (پارامتر اول متد make که برابر تمامی ورودی های درخواست قرار کرفته) انجام داد. هر دو روش مرسوم و پرکاربرد هستند که بسته به نیاز استفاده می شوند. پس از انجام اعتبار سنجی یک شئ از Validator باز می گردد که متدهایی در اختیار ما می گذارد، در ادامه به بررسی آنها خواهیم پرداخت. 1- متد fails این متد بررسی می‌کند که آیا عملیات اعتبارسنجی شکست خورده یا نه.
if ($validator->fails()) {
  return response('fails');
}
2- متد validated اگر اعتبارسنجی موفقیت‌آمیز باشد، این متد فقط داده‌های معتبر (validated) را بازمی‌گرداند. این روش، داده‌های تاییدشده را فیلتر می‌کند.
$validated = $validator->validated();
3- متد stopOnFirstFailure اگر بخواهید عملیات اعتبارسنجی به‌محض اولین خطا متوقف شود، از این متد استفاده می‌کنید.
$validator = Validator::make($request->all(), [
  'name' => 'required',
])->stopOnFirstFailure();
4- متد validate مقدار اعتبارسنجی‌شده را باز می‌گرداند یا اگر خطایی وجود داشته باشد، به‌صورت خودکار ValidationException پرتاب می‌کند. معمولاً در کنترلر استفاده می‌شود.
$validated = $request->validate([
  'name' => 'required',
]);
در این حالت اگر فیلدی نامعتبر باشد، لاراول به‌صورت خودکار به صفحه قبل برمی‌گردد و خطاها را نمایش می‌دهد. 5- متد validateWithBag مشابه validate() است ولی خطاها را داخل یک Error Bag خاص ذخیره می‌کند. برای مثال وقتی چند فرم در یک صفحه داریم و هرکدام باید خطاهای جداگانه داشته باشند.
$request->validateWithBag('updateProfile', [
  'name' => 'required',
]);
درصورت بروز خطا، ارورها در یک Bag با نام updateProfile ذخیره می شوند. 6- متد after پس از اجرای تمام قوانین اعتبارسنجی، می‌توانید با این متد، اعتبارسنجی‌های سفارشی اضافه کنید.
$validator->after(function ($validator) use ($request) {
  if ($request->password !== $request->confirm_password) {
    $validator->errors()->add('confirm_password', 'Password is incorrect.');
  }
});
7- متد errors لیست خطاهای اعتبارسنجی را باز می‌گرداند، معمولاً در ترکیب با fails() استفاده می‌شود.
$errors = $validator->errors();
8- متد sometimes اجرا شدن قوانین اعتبارسنجی را وابسته به شرط خاصی می‌کند.

$validator->sometimes('email', 'required', function ($input) {
  return $input->subscribe == true;
});
در این مثال، اگر مقدار subscribe برابر با true باشد، فیلد email اجباری خواهد شد. متد های دیگری نیز وجود دارد که شامل آموزش نخواهد شد. درصوتی که یک اعتبارسنجی ناموفق باشد، خطا ها در متغیر $errors در سمت Blade در دسترس خواهد گرفت. به عنوان مثال:
@if ($errors->any())
  @foreach ($errors->all() as $error)
    {{ $error }}
  @endforeach
@endif
کد بالا درصورت وجود خطا اعتبارسنجی، خطا آنها را به کاربر نمایش می دهد. همچنین می توان از دایرکتیو @error استفاده کنید:
@error('title')
  <div class="alert alert-danger">{{ $message }}</div>
@enderror
این کد در صورتی که اینپوت title با خطا مواجه شود، متن خطای آن را به کاربر نمایش می دهد. اگر نیاز به خطا ها از یک Bag خاص داشتید می توانید پارامتر دوم را نیز کامل کنید:
@error('title', 'myBag')
تا این بخش با روش اعتبارسنجی درخواست ها و نمایش خطاهای آن آشنا شدید، در قسمت های بعدی با Ruleهای اعتبارسنجی (required|unique|...) آشنا خواهیم شد. #laravel #لاراول #فصل_۶ @AmirhDeveloper .

تعطیلات هم تموم شد، ایشالا از فردا ادامه دوره لاراول رو شروع می‌کنیم. یکم حمایت هم بکنید از کانال، از ۸۰۰ تا شدیم ۶۰۰ تا. 🤝❤️

دیگه LaraGram داره از کنترل خارج میشه
دیگه LaraGram داره از کنترل خارج میشه

سال نوی همه مبارک سال خوب و پربرکتی در کنار خانواده و دوستانتون داشته باشید❤️🔥

عید نوروز دلار پیشاپیش ۱۰۰ برهمگی تومن مبارک

فصل شش - Requests and Response بخش دوم - اعتبارسنجی درخواست ها لاراول یک سیستم اعتبارسنجی قدرتمند و انعطاف‌پذیر ارائه می‌دهد که به شما امکان می‌دهد داده‌ها را به راحتی بررسی کرده و از ورود اطلاعات نامعتبر جلوگیری کنید. اعتبارسنجی می‌تواند به روش‌های مختلفی انجام شود: 1- استفاده از متد validate در کنترلر
$request->validate([
  'name' => 'required|string|max:255',
  'email' => 'required|email|unique:users',
  'password' => 'required|min:8'
]);
این روش برای اعتبارسنجی ساده استفاده می‌شود. اگر داده‌ها نامعتبر باشند، لاراول به‌صورت خودکار یک پاسخ خطا ارسال می‌کند. 2- استفاده از کلاس‌های درخواست سفارشی (Form Request Validation) برای پروژه‌های بزرگ، بهتر است قوانین اعتبارسنجی را در یک کلاس مجزا تعریف کنید:
php artisan make:request RegisterRequest
سپس در کلاس ایجاد شده، قوانین را در متد rules مشخص کنید.
public function rules(): array
{
  return [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
  ];
}
ایجاد قوانین سفارشی (Custom Rules) علاوه بر قوانین پیش‌فرض لاراول، می‌توان قوانین سفارشی نیز ایجاد کرد. این ویژگی زمانی مفید است که نیاز به اعتبارسنجی خاصی داشته باشید که در قوانین پیش‌فرض موجود نیست.
php artisan make:rule ValidUsername
در کلاس ValidUsername می‌توان منطق اعتبارسنجی را تعریف و در پروژه استفاده کرد.
public function validate(string $attribute, mixed $value, Closure $fail): void
{
  if (strtoupper($value) !== $value) {
    $fail('The :attribute must be uppercase.');
  }
}
سفارشی‌سازی پیام‌های خطا لاراول به شما اجازه می‌دهد تا پیام‌های خطای اعتبارسنجی را شخصی‌سازی کنید:
$messages = [
  'email.required' => 'Entering an email is required.',
  'password.min' => 'The password must be at least 8 characters.',
];
$request->validate($rules, $messages);
این ویژگی برای چندزبانه کردن پیام‌های خطا نیز بسیار مفید است. سیستم اعتبارسنجی در لاراول بسیار قدرتمند، انعطاف‌پذیر و ساده است. با استفاده از روش‌های مختلف مانند Form Request Validation، Custom Rules و شخصی‌سازی پیام‌های خطا، می‌توان داده‌های ورودی را به شکلی بهینه مدیریت کرد و از بروز خطاهای امنیتی و عملکردی جلوگیری کرد. در پست‌های بعدی، به بررسی دقیق‌تر ساختار ولیدیشن‌ها و نحوه‌ی پیاده‌سازی قوانین سفارشی می‌پردازیم. #laravel #لاراول #فصل_۶ @AmirhDeveloper .

‏LaraGram 3 طوری طراحی شده که دولوپر به هر سبک و روشی که دوست داره و مورد نیازش هست کد هاشو بنویسه. به عنوان مثال فقط 6 روش ب
+1
‏LaraGram 3 طوری طراحی شده که دولوپر به هر سبک و روشی که دوست داره و مورد نیازش هست کد هاشو بنویسه. به عنوان مثال فقط 6 روش برای هندل آپدیت ها وجود داره که توی تصاویر هست. هیچ قابلیتی نیست که توی LaraGram پیدا نشه، فقط و فقط مشکل Async رو داریم که محدود به زبات PHP هست، البته با روش هایی مثل Fork کردن پروسس ها، استفاده از Swoole و AMPHP و ... می تونیم جلوی بلاک شدن ربات رو بگیریم، که LaraGram به طور پیشفرض پروسس هارو Fork میکنه. هر قابلیتی هم که نباشه میشه به عنوان پکیج و سرویس براش نوشت و روی اون سوار کرد. مورد دیگه بهینگی هست، LaraGram بیشتر از 15 یا حتی 20 مگابایت حجم داره، که روز به روز بیشتر میشه، ولی به واسطه کش ها و سرویس کانتینر، با یک فایل 100 کیلوبایتی برابری میکنه. هیچ سرویسی اضافی و بی دلیل لود نمیشه و سربار اضافی ایجاد نمیکنه. قابلیت های فراتر از نیاز توسعه ربات تلگرامی توی LaraGram وجود داره، عملا هر کاری با اون امکان پذیر هست. ولی همه این ها تا زمانی که شناخته نشه و مورد استفاده و استقبال قرار نگیره فایده نداره. - LaraGram - Laraquest - Core @AmirhDeveloper .

یکی دیگه از ویژگی‌های کاملا منطقی LaraGram ورژن 3، سیستم Template هست. مشابه موتور Blade برای Laravel هست، با این تفاوت که La
+1
یکی دیگه از ویژگی‌های کاملا منطقی LaraGram ورژن 3، سیستم Template هست. مشابه موتور Blade برای Laravel هست، با این تفاوت که Laravel برای وب به صورت HTML خروجی می‌گیره، ولی ما برای ارسال پیام توی Telegram خروجی میگیریم. چنین چیزی احتمالا کاربردی نداره، کار رو هم ساده نمی‌کنه؛ ولی از اونجایی که ۸۰ درصد لاراول رو بازنویسی کردم، گفتم Blade هم بنویسم که ساختار اون رو هم یاد بگیرم. - LaraGram - Laraquest - Core @AmirhDeveloper .

فصل شش - Requests and Response بخش اول - پردازش درخواست و پاسخ در این قسمت به متدهای Response خواهیم پرداخت. ریسپانس‌ها، پاسخی هستند ک از سوی کنترلرها برای کلاینت return می‌شوند.
class UserController extends Controller
{
 public function store(Request $request)
 {
  // ...

  return response("User Stored!");
 }
}
کد بالا یک نمونه از شیوه ارسال ریسپانس را نشان می‌دهد که یک متن پس از ذخیره کاربر، به سمت مرورگر کلاینت ارسال می شود. معمولا برای ارسال ریسپانس از هلپر فانکشن ها استفاده می شود. در ادامه با این هلپر ها آشنا می شویم. 1- متد response ایجاد یک پاسخ ساده.
return response('Hello, World!');
متن "Hello, World!" در مرورگر نمایش داده می‌شود. 2- متد header افزودن یک هدر (header) به پاسخ.
return response('OK')->header('X-Custom-Header', 'MyValue');
3- متد withHeaders افزودن چندین header به پاسخ.
return response('Headers Set')->withHeaders([
 'X-Header-One' => 'Value1',
 'X-Header-Two' => 'Value2',
]);
4- متد cookie اضافه کردن cookie به پاسخ.
return response('Cookie Set')->cookie('user', 'JohnDoe', 60);
5- متد withoutCookie حذف یک cookie از پاسخ.
return response('Cookie Removed')->withoutCookie('user');
6- متد view بازگرداندن یک view به عنوان پاسخ. (فایل های Blade)
return response()->view('welcome');
نمای welcome.blade.php نمایش داده می‌شود. 7- متد json بازگرداندن یک JSON به عنوان پاسخ.
return response()->json(['name' => 'John', 'age' => 30]);
8- متد withCallback اضافه کردن JSONP callback به پاسخ JSON.
return response()->json(['name' => 'John'])->withCallback('myCallback');

// Output:
// myCallback({"name":"John"});
9- متد download دانلود یک فایل از سرور.
return response()->download(storage_path('app/file.pdf'));
10- متد file نمایش یک فایل بدون دانلود.
return response()->file(storage_path('app/image.jpg'));
11- متد stream استریم داده‌ها (ارسال محتوا به صورت chunk-شده).
return response()->stream(function () {
    echo 'Streaming content...';
});
12- متد streamJson ارسال JSON به‌صورت استریم.
return response()->streamJson(['status' => 'processing']);
13- متد eventStream ارسال داده‌ها به‌صورت Server-Sent Events (SSE).
return response()->eventStream(function ($stream) {
    $stream->push(['message' => 'Hello, World!']);
});
14- متد streamDownload دانلود یک فایل به‌صورت stream.
return response()->streamDownload(function () {
    echo 'File content...';
}, 'myfile.txt');
15- متد redirect تغییر مسیر (redirect) به یک URL.
return redirect('/home');
16- متد route تغییر مسیر (redirect) به یک route.
return redirect()->route('dashboard');
17- متد action تغییر مسیر (redirect) به یک controller action.
return redirect()->action([HomeController::class, 'index']);
18- متد away تغییر مسیر (redirect) به یک URL خارجی.
return redirect()->away('https://google.com');
19- متد with ارسال داده‌های session همراه با redirect.
return redirect()->route('home')->with('message', 'Welcome back!');
یک message در session ذخیره می‌شود و پس از redirect قابل دسترسی است. 20- متد back بازگشت به صفحه‌ی قبلی.
return redirect()->back();
21- متد withInput ارسال داده‌های form input در session هنگام redirect.
return redirect()->back()->withInput();
#laravel #لاراول #فصل_۶ @AmirhDeveloper .

فصل شش - Requests and Response بخش اول - پردازش درخواست و پاسخ در این قسمت به سایر متدهای در دسترس از کلاس Request می پردازیم. 1- متد cookie مقدار یک کوکی را برمی‌گرداند.
$value = $request->cookie('user_token');
2- متد all تمام داده‌های ورودی (query parameters، POST data، JSON payloads) را به‌صورت آرایه برمی‌گرداند.
$data = $request->all();
3- متد collect داده‌های ورودی را به‌عنوان Collection لاراول برمی‌گرداند. کالکشن‌ها در لاراول مجموعه‌ای از داده‌ها هستند که امکانات پیشرفته‌ای برای کار با آرایه‌ها ارائه می‌دهند. در فصل های مربوطه به کار با کالکشن ها خواهیم پرداخت.
$collection = $request->collect();
4- متد input مقدار یک ورودی خاص را دریافت می‌کند.
$name = $request->input('name');
همچنین می توان input مورد نظر را به صورت پراپرتی دریافت کرد:
$name = $request->name;
5- متد query مقدار یک متغیر در query string را دریافت می‌کند.
$sort = $request->query('sort', 'asc');
پارامتر اول کلید کوئری و پارامتر دوم مقدار پیشفرض می باشد. 6- متد string مقدار یک ورودی را به‌عنوان Stringable لاراول برمی‌گرداند. در لاراول Stringable همانند کالکشن که برای کار با آرایه ها است، برای کار با رشته ها می باشد.
$name = $request->string('name');
این متد input با نام name را در قالب شئ از Stringable باز می گرداند و می توان متد های زیادی را بر روی آن فراخوانی کرد:
$name = $request->string('name')->upper();
7- متد integer مقدار ورودی را به عدد صحیح (integer) تبدیل می‌کند.
$age = $request->integer('age');
8- متد boolean مقدار ورودی را به مقدار بولی (true یا false) تبدیل می‌کند.
$active = $request->boolean('active');
9- متد date مقدار ورودی را به شیء Carbon تبدیل می‌کند. کربن نیز یک کلاس برای کار با زمان ها می باشد.
$birthday = $request->date('birthday');
10- متد enum مقدار ورودی را با یک enum مقایسه می‌کند.
$status = $request->enum('status', OrderStatus::class);
11- متد enums چند مقدار ورودی را با یک enum بررسی می‌کند.
$statuses = $request->enums('statuses', OrderStatus::class);
12- متد has بررسی می‌کند که آیا مقدار مشخصی در درخواست وجود دارد یا نه.
if ($request->has('name')) {
}
13- متد hasAny بررسی می‌کند که آیا حداقل یکی از مقادیر مشخص‌شده در درخواست وجود دارد یا نه.
if ($request->hasAny(['name', 'email'])) {
}
14- متد whenHas اگر مقدار مشخص‌شده در درخواست وجود داشته باشد، یک تابع را اجرا می‌کند.
$request->whenHas('name', function ($name) {
});
15- متد isNotFilled بررسی می‌کند که مقدار ورودی وجود نداشته باشد یا خالی باشد.
if ($request->isNotFilled('email')) {
}
16- متد filled بررسی می‌کند که مقدار مشخص‌شده در درخواست پر شده باشد.
if ($request->filled('email')) {
}
17- متد anyFilled بررسی می‌کند که حداقل یکی از مقادیر مشخص‌شده در درخواست پر شده باشد.
if ($request->anyFilled(['email', 'phone'])) {
}
18- متد whenFilled اگر مقدار مشخص‌شده در درخواست پر شده باشد، یک تابع را اجرا می‌کند.
$request->whenFilled('email', function ($email) {
});
19- متد missing بررسی می‌کند که مقدار مشخص‌شده در درخواست وجود نداشته باشد.
if ($request->missing('email')) {
}
20- متد whenMissing اگر مقدار مشخص‌شده در درخواست وجود نداشته باشد، یک تابع را اجرا می‌کند.
$request->whenMissing('email', function () {
});
21- متد merge مقدار جدیدی به داده‌های درخواست اضافه می‌کند.
$request->merge(['role' => 'admin']);
22- متد mergeIfMissing مقدار جدیدی را فقط در صورتی که وجود نداشته باشد اضافه می‌کند.
$request->mergeIfMissing(['role' => 'user']);
23- متد file یک فایل آپلودی را در قالب شئ از فایل دریافت می‌کند و می توان عملیات های مختلف مانند ذخیره سازی بر روی آن اجرا کرد.
$file = $request->file('avatar');
24- متد hasFile بررسی می‌کند که آیا فایلی آپلود شده است یا نه.
if ($request->hasFile('avatar')) {
}
25- متد old مقدار یک ورودی را از session دریافت می‌کند. (معمولا درخواست قبلی)
$oldValue = $request->old('name');
تا اینجا با تمامی متد های قابل فراخوانی از کلاس Request آشنا شده ایم، در قسمت بعدی به متد های Response خواهیم پرداخت. #laravel #لاراول #فصل_۶ @AmirhDeveloper .

فصل شش - Requests and Response بخش اول - پردازش درخواست و پاسخ لاراول برای مدیریت درخواست‌ها از کلاس Illuminate\Http\Request استفاده می‌کند که قابلیت‌های زیادی برای دسترسی و فیلتر کردن داده‌های ورودی دارد. این کلاس معمولا در Controller ها یا Route-Closure ها استفاده می شود:
class UserController extends Controller
{
 public function store(Request $request)
 {
  $request->...
 }
}

// OR

Route::get('/', function(Request $request) {
 $request->...
});
در ادامه با متد های در دسترس از این کلاس آشنا می شویم. 1- متد path این متد مسیر درخواست شده را بدون دامنه برمی‌گرداند.
$request->path(); // posts/10
2- متد is بررسی می‌کند که مسیر درخواست با یک الگو مطابقت دارد یا نه.
if ($request->is('posts/*')) {
}
3- متد routeIs بررسی می‌کند که مسیر درخواست با نام روت خاصی مطابقت دارد یا نه.
if ($request->routeIs('post.show')) {
}
4- متد url آدرس کامل بدون query string را برمی‌گرداند.
$request->url(); // http://example.com/posts/10
5- متد fullUrl آدرس کامل شامل query string را برمی‌گرداند.
$request->fullUrl();
// http://example.com/posts/10?sort=desc
6- متد fullUrlWithQuery یک پارامتر کوئری را به URL اضافه می‌کند.
$request->fullUrlWithQuery(['page' => 2]); 
// http://example.com/posts?sort=desc&page=2
7- متد fullUrlWithoutQuery برخی از پارامترهای کوئری را از URL حذف می‌کند.
$request->fullUrlWithoutQuery(['sort']);
// http://example.com/posts?page=2
8- متد host دامنه درخواست را برمی‌گرداند.
$request->host(); // example.com
9- متد httpHost دامنه همراه با پورت را برمی‌گرداند.
$request->httpHost(); // example.com:8080
10- متد schemeAndHttpHost پروتکل (http یا https) و دامنه را برمی‌گرداند.
$request->schemeAndHttpHost();
// https://example.com
11- متد ip آدرس IP درخواست‌دهنده را برمی‌گرداند.
$request->ip(); // 192.168.1.1
12- متد ips لیست IPهای درخواست‌دهنده را برمی‌گرداند.
$request->ips();
// [192.168.1.1, 10.0.0.2]
13- متد method متد HTTP درخواست (GET, POST, PUT, DELETE) را برمی‌گرداند.
$request->method(); // POST
14- متد isMethod بررسی می‌کند که متد HTTP درخواست مقدار خاصی دارد یا نه.
if ($request->isMethod('post')) {
}
15- متد header مقدار یک هدر خاص را برمی‌گرداند.
$request->header('User-Agent'); // "Mozilla/5.0"
16- متد hasHeader بررسی می‌کند که آیا یک هدر مشخص در درخواست وجود دارد یا نه.
if ($request->hasHeader('Authorization')) {
}
17- متد bearerToken مقدار Bearer Token در هدر Authorization را برمی‌گرداند.
$request->bearerToken();
18- متد getAcceptableContentTypes لیستی از انواع محتوای مورد قبول در هدر Accept را برمی‌گرداند.
$request->getAcceptableContentTypes();
// ['application/json', 'text/html']
19- متد accepts بررسی می‌کند که آیا نوع محتوای مشخص‌شده پذیرفته شده است یا نه.
if ($request->accepts('application/json')) {
}
20- متد prefers نوع محتوای ترجیحی را برمی‌گرداند.
$request->prefers(['text/html', 'application/json']);
21- متد expectsJson بررسی می‌کند که آیا درخواست انتظار JSON دارد یا نه.
if ($request->expectsJson()) {
}
22- متد flash داده‌ها را برای درخواست بعدی در سشن ذخیره می‌کند.
$request->flash();
23- متد flashOnly برخی از داده‌ها را در سشن ذخیره می‌کند.
$request->flashOnly(['name', 'email']);
24- متد flashExcept تمام داده‌ها به‌جز موارد مشخص‌شده را در سشن ذخیره می‌کند.
$request->flashExcept(['password']);
25- متد only فقط مقادیر مشخص‌شده را از درخواست دریافت می‌کند.
$request->only(['name', 'email']);
26- متد except تمام مقادیر درخواست به‌جز موارد مشخص‌شده را دریافت می‌کند.
$request->except(['password']);
سایر متد ها در پست بعدی توضیح داده می‌شود. #laravel #لاراول #فصل_۶ @AmirhDeveloper .

فصل پنج - Requests and Response بخش اول - پردازش درخواست و پاسخ در فریمورک لاراول، مفاهیم Request (درخواست) و Response (پاسخ) جزو مهم‌ترین اجزای پردازش درخواست‌های وب محسوب می‌شوند. این دو مفهوم در الگوی MVC بخش ارتباط بین کاربر (Client) و سرور (Backend) را مدیریت می‌کنند. 1- درخواست (Request) ‏Request در لاراول به تمام داده‌هایی گفته می‌شود که از طرف کاربر (مثلاً مرورگر، Postman یا یک کلاینت دیگر) به سرور ارسال می‌شود. این داده‌ها می‌توانند شامل موارد زیر باشند: - داده‌های فرم (POST) - پارامترهای URL (GET) - هدرهای HTTP - کوکی‌ها - فایل‌های آپلود شده - اطلاعات احراز هویت لاراول برای مدیریت درخواست‌ها از کلاس Illuminate\Http\Request استفاده می‌کند که قابلیت‌های زیادی برای دسترسی و فیلتر کردن داده‌های ورودی دارد. در کنترلرها، برای دریافت اطلاعات ورودی، می‌توان از کلاس Request استفاده کرد:
class UserController extends Controller
{
 public function store(Request $request)
 {
  $name = $request->input('name');

  $email = $request->input('email', 'default@example.com');

  $data = $request->all();

  $token = $request->header('Authorization');
 }
}
2- پاسخ (Response) ‏Response یا پاسخ، همان داده‌ای است که لاراول پس از پردازش درخواست به کلاینت ارسال می‌کند. این پاسخ می‌تواند شامل: ‏- HTML‏ یا View ‏- JSON‏ یا API Response - ریدارکت (Redirect) - دانلود فایل - ارسال پیام‌های خطا یا موفقیت باشد. در کنترلرها، برای ارسال پاسخ، می‌توان از فساد یا هلپر Response استفاده کرد:
class UserController extends Controller
{
 public function store(Request $request)
 {
  return response('Hello, Laravel!');

  return response()->json([
    'message' => 'Success',
    'status' => 200
  ]);

  return response()->view('welcome', ['name' => 'John']);
 }
}
در ادامه این بخش به بررسی Request و Response و تمامی متد های در دسترس از آنها خواهیم پرداخت. #laravel #لاراول #فصل_۶ @AmirhDeveloper .

یادم رفت

از فردا فصل 6 رو شروع می‌کنیم.

توی لاراول 12 با زدن کامند: composer run dev می‌تونیم لاراول رو اجرا کنیم. این روش به طور خودکار کامندهای: php artisan serve
+1
توی لاراول 12 با زدن کامند:
composer run dev
می‌تونیم لاراول رو اجرا کنیم. این روش به طور خودکار کامندهای:
php artisan serve
php artisan queue:listen --tries=1
php artisan pail --timeout=0
npm run dev
..
رو اجرا می‌کنه. البته می‌تونیم توی لاراول های قدیمی تو هم با اضافه کردن script اون به فایل composer.json این قابلیت رو داشته باشیم. @AmirhDevelope .

Laravel 11.42 ✅❤️ یه سری شورت‌کات برای تاریخ توی الکوئنت اضافه شده که باهم مرور میکنیم. همشون مشخصه چیکار میکنند ولی یه توضیح ریز هم خواهیم داشت. 1. wherePast ✳️ فیلدی که ورودی میدید رو با تاریخ امروز مقایسه میکنه در صورتی که گذشته باشه برمیگردونه. 2. whereToday ✳️ اگر فیلیدی که ورودی میدید با تاریخ امروز یکسان باشه برمیگردونه. 3. whereFuture ✳️ فیلدی که وروردی میدید رو با تاریخ امروز مقایسه میکنه در صورتی که آینده باشه برمیگردونه. 4. whereNowOrFuture ✳️ فیلدی که وروردی میدید رو با تاریخ امروز مقایسه میکنه در صورتی که آینده باشه یا با تاریخ امروز یکسان باشه برمیگردونه. 5. whereNowOrPast ✳️ فیلدی که وروردی میدید رو با تاریخ امروز مقایسه میکنه در صورتی که گذشته باشه یا با تاریخ امروز یکسان باشه برمیگردونه. و چندتا تغییر دیگه که میتونید خودتون مطالعه کنید.

7 ماهی از انتشار ورژن 2 گذشته و ورژن 3 درحال توسعه هست. توی ورژن 3 تغییرات زیادی مخصوصا در پرفورمنس اعمال شده؛ سیستم های کش اکثر بخش های فریم‌ورک رو در بر گرفتن. همچنین Eloquent ORM به صورت کاملا اختصاصی بازنویسی شده. دلیل این بازنویسی این هست که، این ORM برای اجرا نیاز به کانتینر، ایونت‌ها، کیوها، و کلی چیز دیگه از لاراول داره. ما همه این سیستم هارو توی LaraGram داریم، ولی الوکوئنت دقیقا برای لاراول رو نیاز داره، به همین دلیل در کنار کانتینر LaraGram باید کانتینر Laravel هم لود بشه که منطقی نیست. اما‌ این بازنویسی تمامی وابستگی های خارجی رو حذف کرده و سرعت دوبرابر بهتر شده. از طرفی دو کرنل HTTP و Console اضافه شدن؛ کامند ها و درخواست ها به طور دقیق بررسی میشن، Gateها و Middlewareها روی اون ها اعمال میشن و خطاها به طور دقیق مدیریت میشن. سیستم چندزبانی اصافه شده. قابلیت مدیریت اتصال و توسعه چند ربات همزمان اضافه میشه. سیستمی تحت عنوان کامپوننت قراره اضافه بشه، که راستش خودم نمیدونم چی هست فقط میدونم قراره قابلیت باز استفاده از ماژول ها یا هرچیزی رو با فراخوانی یک تابع بده. مثلا شما نیاز نیست سیستم عضویت اجباری توسعه بدید، کافیه کامپوننت اون رو لود کنید. سیستم کیو و جاب اضافه میشه که می‌تونید به سادگی عملیات های زمان بندی شده رو توسعه بدید. قابلیت های جزئی هم طی توسعه اضافه میشن. و در نهایت احتمال اضافه شدن پروتکل MTProto در ورژن 3 هست؛ توسعه ش یکم سخت و زمانبر هست، برای همین قول نمیدم توی ورژن 3 بیاد، شاید توی ورژن 4 اضافه بشه، ولی میشه یک روز. و احتمالا چیزای دیگه که در آینده به ذهنم برسه. اگر ایده یا پیشنهادی دارید خوشحال میشم درمیون بذارید، یا توی توسعه کمک کنید. و اگر هم به پروژه استار بدید که خیلی بیشتر خوشحال میشم❤️ - LaraGram - Laraquest - Core @AmirhDeveloper .