راکت

اینترفیس Responsable

5 پاسخ

سلام.
یه اینترفیسی توی لاراول داریم به این صورت

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 اجرا میشه؟

ثبت پرسش جدید

پاسخ‌ها

5
moha li
moha li
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

سلام
بله اجرا میشه. یکی از کاربرد های interface وجود داشتن متد در کلاسی است که implement می کنیم. روی کلاس تاثیر نداره.
@MajidDeveloper

Muhammad
Muhammad
@muhammad

تخصص: Back-End Developer

سلام. باید ریسپانس رو برگردونید:

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

شاید پاسخ شما همین‌جا باشد

مجید
مجید
@MajidDeveloper

تخصص: Laravel-Nuxt

@mohaligateway

منظورم این هست که از آبجکت x متد toResponse را صدا نزنم. ولی خودکار بعد ساخت کلاس x ،اجرا بشه

مجید
مجید
@MajidDeveloper

تخصص: Laravel-Nuxt

moha li
moha li
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

می تونید از متد جادوئی __construct استفاده کنید.

public function __construct

موقع ساختن شی از کلاس این متد خود به خود اجرا میشه.
@MajidDeveloper

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام