مجید
4 سال پیش توسط مجید مطرح شد
5 پاسخ

اینترفیس Responsable

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

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


ثبت پرسش جدید
moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 4 سال پیش مطرح شد
1

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


Muhammad
تخصص : Back-End Developer
@muhammad 4 سال پیش آپدیت شد
1

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

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


مجید
تخصص : Laravel-Nuxt
@MajidDeveloper 4 سال پیش مطرح شد
0

@mohaligateway

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


مجید
تخصص : Laravel-Nuxt
@MajidDeveloper 4 سال پیش آپدیت شد
moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 4 سال پیش مطرح شد
0

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

public function __construct

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


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

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