Laravel -转换模型公共常量数组

prdp8dxp  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(140)

我有一个模型,其中有一个用于静态值的公共常量数组,即:

class StudentStatus extends Model
{
public const STATUSES = [
    0  => 'Unknown', // Blank & Other entries
    1  => 'Active', // Activo
    2  => 'Cancelled', // Cancelado
    3  => 'Concluded', // Concluido
];

到目前为止,我只会将报表或其他内容中的最终值翻译成所需的语言。然而,当我试图在select中翻译它时遇到了一个障碍。
控制器:

$statuses = StudentBursaryStatus::STATUSES; // gets the const and passes it to a view

查看:

{!! Form::select('status', [null=>__('Please select one').'...']+$statuses, null, ['class'=>'form-control kt-select2']) !!}

尝试运行__($statuses)会意外失败(“非法偏移类型”),因为正在尝试转换数组。尝试对模型中的每个值运行__()也会失败(“常量表达式包含无效操作”),即:

public const STATUSES = [
    0  => __('Unknown'), // Blank & Other entries
    1  => __('Active'), // Activo
    2  => __('Cancelled'), // Cancelado
    3  => __('Concluded'), // Concluido
];

除了通过控制器中的数组循环来手动转换每个值之外,还有更好的方法吗?

ou6hu8tu

ou6hu8tu1#

你不能用函数来定义预设变量的值,你可以在构造函数中定义它们,但那样它就不再是常量了。
所以我建议使用从常量创建转换数组的函数

public static function getStatusesTranslated()
{
    $translatedStatuses = [];
    foreach (self::STATUSES as $key => $status) {
        $translatedStatuses[$key] = __($status);
    }
    
    return $translatedStatuses;
}

然后:

$statuses = StudentBursaryStatus::getStatusesTranslated();
htrmnn0y

htrmnn0y2#

protected static $typeStrings = [
    0 => 'Unknown',
    1 => 'Active',
    2 => 'Cancelled',
    3 => 'Concluded',
];

public function getTypeAttribute($val)
{
    if( !isset( static::$typeStrings[ $val ] ) ) {
        //throw an exeption, presumably
    }
    return __('app.'.static::$typeStrings[ $val ]);
}

相关问题