Проверьте, равен ли параметр определенной константе из модели - PullRequest
0 голосов
/ 03 октября 2019

В моей модели MeetingType у меня есть эта константа:

const EXAMPLE_SHAREHOLDERS_MEETING =
[
    'Shareholders meeting',
    'Management meeting',
    'General meeting',
    'Start meeting'
];

В моем контроллере я вызываю функцию из моей модели следующим образом:

$topics = MeetingType::get_meeting_type_topics($meetingTypeName);

Где $meetingTypeName равно 'Акционерамmeeting '.

Как проверить в моей функции / переключателе, соответствует ли переданный параметр моему константному массиву? Это функция, о которой я говорю:

/**
 * Define and return MeetingType Topics. 
 *
 * @param string $meetingTypeName
 * @return array
 */
public static function get_meeting_type_topics($meetingTypeName)
{
    switch (MeetingType::EXAMPLE_SHAREHOLDERS_MEETING) {
        case 'Shareholders meeting':
            $topics = [
                'Opening',
            ];
            break;
        case 'Management meeting':
            $topics = [
                'Aanwezigen / afwezigen',
            ];
            break;
        case 'General meeting':
            $topics = [
                'Opening',
            ];
            break;
        case 'Start meeting':
            $topics = [
                "Uitleg van deze vergadering",
            ];
            break;
    }

    return $topics;
}

Ответы [ 3 ]

3 голосов
/ 03 октября 2019

Вы можете переопределить ваши const EXAMPLE_SHAREHOLDERS_MEETING до

const EXAMPLE_SHAREHOLDERS_MEETING =
[
    'Shareholders meeting' => 'Opening',
    'Management meeting' => 'Aanwezigen / afwezigen',
    'General meeting' => 'Opening',
    'Start meeting' => "Uitleg van deze vergadering",
];

И в вашей функции вернуть что-то вроде:

public static function get_meeting_type_topics($meetingTypeName)
{
    return MeetingType::EXAMPLE_SHAREHOLDERS_MEETING[$meetingTypeName];
}
1 голос
/ 03 октября 2019

Я бы пошел с

class MeetingEntity {
// ...
  const SHAREHOLDERS_MEETING = 0;
  const MANAGEMENT_MEETING = 1;
  const GENERAL_MEETING = 2;
  const START_MEETING = 3;

  const MEETINGS_TYPES =
  [
    0 => self::SHAREHOLDERS_MEETING,
    1 => self::MANAGEMENT_MEETING,
    2 => self::GENERAL_MEETING,
    3 => self::START_MEETING,
  ];
// ...

По причинам, которые я несколько привык к этому шаблону. Это особенно полезно, когда ключи - это не цифры, а слова.

Чем вы можете воспользоваться переключателями с помощью чего-то простого:

switch($aMeetingType) {
    case MeetingEntity::SHAREHOLDERS_MEETING:
      // ....
      break;

или чуть более безопасного:

if (array_key_exists($aMeetingType, MeetingEntity::MEETING_TYPES)) {
    switch(MeetingEntity::MEETING_TYPES[$aMeetingType]) {
        case MeetingEntity::SHAREHOLDERS_MEETING:
            // ...
            break;
    }
} else { // throw
0 голосов
/ 03 октября 2019

Я предпочитаю подход @u_mulder. Но вот с некоторыми улучшениями:

public static function get_meeting_type_topics($meetingTypeName)
{
    if (!array_key_exists($meeetingName, MeetingType::EXAMPLE_SHAREHOLDERS_MEETING)) {
        return 'Not handled meeting';
    }
    return MeetingType::EXAMPLE_SHAREHOLDERS_MEETING[$meetingTypeName];
}
...