Paradox
1 سال پیش توسط Paradox مطرح شد
4 پاسخ

ترجمه enum ها

سلام وقت بخیر
من برای جدول کاربرانم از enum استفاده کردم

    $table->string('gender');
<?php

namespace App\Enums;

enum Gender: string
{
    case Boy = "boy";
    case **** = "****";
}

مدل user

    protected $casts = [
        'gender' => Gender::class,
    ];

برای نمایش جنسیت به فارسی این کارو تو مدل user انجام دادم

    public function getGenderAttribute($attribute)
    {
        switch($attribute)
        {
            case "boy" :
                return "پسر";
            break;

            case "****" :
                return "دختر";
            break;
        }
    }

الان اکیه نمایش میده
ولی برای بخش های دیگه سایتم که با جدول یوزر رابطه داره به مشکل میخورم و ارور زیر نمایش میده وقتی هم اون کد سوییچ رو کامنت میکنم این ارور رفع میشه

Cannot instantiate enum App\Enums\Gender

راه حلی اگه هست لطفا راهنمایی کنید
ایا برای فارسی کردن این روش درسته ؟ یا روش بهتری وجود داره؟


ثبت پرسش جدید
مهدی مشایخی
تخصص : برنامه نویس پایتون - ماشین لرن...
@MahdiMashayekhi 1 سال پیش مطرح شد
0

@paradox
خیر ، همونطور که گفتم پی اچ پی این قابلیت رو نداره.

برای استفاده از enum در Laravel، شما نیاز به نصب ماژول PHP Enum دارید. برای این کار، می توانید از Composer استفاده کنید.
دستور زیر رو در ترمینال وارد کنید:

composer require ben-sampo/laravel-enum

پس از نصب باید ماژول Enum را به لیست پرووایدرهای لاراول اضافه کنید. برای این کار، فایل config/app.php را باز کنید و پرووایدر زیر را به لیست پرووایدرها اضافه کنید:

'providers' => [
// ...
BenSampo\Enum\EnumServiceProvider::class,
],

شما می توانید فایل app/Enum را بسازید و انواع enum را در آن تعریف کنید.مثال:

namespace App\Enums;
use BenSampo\Enum\Enum;
final class OrderStatus extends Enum
{
const Pending = 'pending';
const Processing = 'processing';
const Completed = 'completed';
const Cancelled = 'cancelled';
}

با این کار شما می توانید از enum تعریف شده در کلاس‌های لاراول استفاده کنید.


مهدی مشایخی
تخصص : برنامه نویس پایتون - ماشین لرن...
@MahdiMashayekhi 1 سال پیش مطرح شد
0

سلام
مشکل شما اینه که شما در سیستم شی گرایی Laravel به زبان PHP‌ از یک enum استفاده کردید و به خاطر اینکه زبان PHP از enum پشتیبانی نمیکنه به این مشکل خوردید احتمالا.

بهتره قبل از استفاده از enum در سایر بخش ها، بررسی کنید که ماژول پشتیبانی enum‌ با زبان PHP‌ خود را نصب کردید یا نه.

اگر می‌خواهید در بخشی از سیستم‌‌ خود از enum استفاده کنید، می‌توانید از پکیج های php-enum ‌یا MyCLabs\Enum که از آن‌ها در پروژه های php استفاده می‌شود استفاده کنید.

اگر شما از پکیج Laravel Enum برای تعریف enum استفاده میکنید این مشکل احتمالاً به دلیل خطا در تعریف enum شما است. یک راه حل می تواند تعریف مجدد کلاس enum شما باشد. در ضمن، پیشنهاد میکنم پس از اصلاح خطا، بر روی جدول user در پایگاه داده‌تان یک ستون با نام "gender" از نوع "string" اضافه کنید، به جای استفاده از enum.

سوالی داشتید در خدمتم.


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش مطرح شد
0

@MahdiMashayekhi
ممنونم از توضیحاتتون
من از پکیجی استفاده نکردم تو لاراول
به این دلیل هست یعنی ؟ بدون پکیج نمیشه استفاده کرد؟

ماژول پشتیبانی enum به چه صورت باید نصب کنم روی لاراول ؟

یعنی میتونه مشکل از فیلد دیتابیسم باشه ؟


مهدی مشایخی
تخصص : برنامه نویس پایتون - ماشین لرن...
@MahdiMashayekhi 1 سال پیش مطرح شد
0

@paradox
خیر ، همونطور که گفتم پی اچ پی این قابلیت رو نداره.

برای استفاده از enum در Laravel، شما نیاز به نصب ماژول PHP Enum دارید. برای این کار، می توانید از Composer استفاده کنید.
دستور زیر رو در ترمینال وارد کنید:

composer require ben-sampo/laravel-enum

پس از نصب باید ماژول Enum را به لیست پرووایدرهای لاراول اضافه کنید. برای این کار، فایل config/app.php را باز کنید و پرووایدر زیر را به لیست پرووایدرها اضافه کنید:

'providers' => [
// ...
BenSampo\Enum\EnumServiceProvider::class,
],

شما می توانید فایل app/Enum را بسازید و انواع enum را در آن تعریف کنید.مثال:

namespace App\Enums;
use BenSampo\Enum\Enum;
final class OrderStatus extends Enum
{
const Pending = 'pending';
const Processing = 'processing';
const Completed = 'completed';
const Cancelled = 'cancelled';
}

با این کار شما می توانید از enum تعریف شده در کلاس‌های لاراول استفاده کنید.


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش مطرح شد
1

@MahdiMashayekhi
ممنونم ازتون


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

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