首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在StringTranslationTrait枚举中使用PHP8的推荐方法

在StringTranslationTrait枚举中使用PHP8的推荐方法
EN

Drupal用户
提问于 2023-03-23 10:02:37
回答 1查看 58关注 0票数 0

PHP8有一个新的很酷的"enum“特性,它应该取代所有的类常量,从而使编码更容易、更安全。我提到的一个问题是,许多常见的Drupal特征(最重要的是翻译特性)都具有属性,因此不能在枚举中使用。

所以我想做的是

代码语言:javascript
复制
 $this->t('summer'), // can't use OOP here :(
      Season::WINTER => $this->t('winter'),
    };
  }
}

我知道我仍然可以使用老式的程序代码。

代码语言:javascript
复制
    return match ($this) {
      Season::SUMMER => t('summer'), // that's what we did 20 years ago
      Season::WINTER => t('winter'),
    };

但是有没有“更漂亮”的方法呢?我在一个D10/PHP8 8项目中,程序代码是双支持的,但是在Drupal生态系统中,具有属性的特性非常常见。特别是获取常量的可翻译标签是非常常见的用例。

使用/注射Drupal性状(特别是StringTranslationTrait)的推荐方法是什么?

EN

回答 1

Drupal用户

回答已采纳

发布于 2023-03-23 16:20:55

根据apaderno的注释,您可以自己实例化类,而不是使用Drupal创建TranslatableMarkup实例。

代码语言:javascript
复制
use Drupal\Core\StringTranslation\TranslatableMarkup;

enum Season: string {

  case SUMMER = 'summer';
  case WINTER = 'winter';

  public function getLabel(): TranslatableMarkup {
    return match ($this) {
      Season::SUMMER => new TranslatableMarkup('summer'),
      Season::WINTER => new TranslatableMarkup('winter'),
    };
  }
}
票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/315174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档