سلام.
یه اینترفیسی توی لاراول داریم به این صورت
namespace Illuminate\Contracts\Support;
interface Responsable
{
/**
* Create an HTTP response that represents the object.
*
* @param \Illuminate\Http\Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function toResponse($request);
}
class X implements Responsable
{
public function toResponse($request)
{
return response("Hello", 200);
}
}
حالا اگه کلاس X این اینترفیس را implement کنه و بعدا بیاییم از کلاس X فقط آبجکت بسازیم(متد toResponse را صدا نزنیم) آیا به صورت اتوماتیک ، متد toResponse کلاس X اجرا میشه؟
سلام
بله اجرا میشه. یکی از کاربرد های interface وجود داشتن متد در کلاسی است که implement می کنیم. روی کلاس تاثیر نداره.
@MajidDeveloper
سلام. باید ریسپانس رو برگردونید:
return new XResponse();
اینطوری لاراول خروجی toResponse رو به عنوان ریسپانس میفرسته. اگه چرخهی حیات یک Request توی لاراول رو نگاه کنین دقیقا متوجه میشین که این اتفاق (یعنی انتخاب نحوه چطور رفتار کردن با Response) رخ میده:
/**
* Static version of prepareResponse.
*
* @param \Symfony\Component\HttpFoundation\Request $request
* @param mixed $response
* @return \Symfony\Component\HttpFoundation\Response
*/
public static function toResponse($request, $response)
{
if ($response instanceof Responsable) {
$response = $response->toResponse($request);
}
.
.
.
گفته که اگه ریسپانس نمونهای از Responsable بود، متد toResponseاش رو صدا بزن و خروجی رو دوباره داخل response بریز.
امیدوارم واضح گفته باشم.
@MajidDeveloper
منظورم این هست که از آبجکت x متد toResponse را صدا نزنم. ولی خودکار بعد ساخت کلاس x ،اجرا بشه
می تونید از متد جادوئی __construct استفاده کنید.
public function __construct
موقع ساختن شی از کلاس این متد خود به خود اجرا میشه.
@MajidDeveloper
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟