За последние 24 часа нас посетили 38328 программистов и 1282 робота. Сейчас ищут 968 программистов ...

Свои placeholders (Не для SQL)

Тема в разделе "PHP для новичков", создана пользователем Danil005, 23 ноя 2017.

  1. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Как сделать свои placeholders, например:

    Поле \"__FIELDS__\" должно иметь как минимум __COUNT__ __WORD__.

    Я делал таким образом:

    PHP:
    1. class DecodingMsg extends \Core {
    2.  
    3.     protected $CodeMap=[
    4.         '1'=>"Пожалуйста, заполните все поля.",
    5.         '2'=>"Неверная электронная почта.",
    6.         '3'=>"Поле \"__FIELDS__\" должно иметь как минимум __COUNT__ __WORD__.",
    7.         '4'=>'TestMsg',
    8.         '5'=>'Вы успешно создали новую учетную запись!',
    9.         '6'=>'Такой логин уже занят.',
    10.         '7'=>'Такая электронная почта уже используется.',
    11.         '8'=>'Неверный логин или пароль.',
    12.         '9'=> 'Вы успешно авторизировались! <a href="/" style="color:#bbbbbb">Продолжить.</a>',
    13.         'A1'=>'Error Authorization. Please report this error to administrations. (Code: #A1)',
    14.         'A2'=>'Error Authorization. Please report this error to administrations. (Code: #A2)',
    15.     ];
    16.  
    17.     private function DeclinationNumerals($number, $after) {
    18.         $cases = [2, 0, 1, 1, 1, 2];
    19.         return $after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
    20.     }
    21.  
    22.     private function GetNameInput($input, $capitalLetter=0) {
    23.         $input=explode('/', $input)[1];
    24.         if( $input == 'Login' ) {
    25.             if( $capitalLetter==0) return 'логин';
    26.             if( $capitalLetter==1) return 'Логин';
    27.         }
    28.  
    29.         if( $input == 'Email' ) {
    30.             if( $capitalLetter==0) return 'электронная почта';
    31.             if( $capitalLetter==1) return 'Электронная почта';
    32.         }
    33.  
    34.         if( $input == 'Password' ) {
    35.             if( $capitalLetter==0) return 'пароль';
    36.             if( $capitalLetter==1) return 'Пароль';
    37.         }
    38.  
    39.         if( $input == 'rPassword' ) {
    40.             if( $capitalLetter==0) return 'повторите пароль';
    41.             if( $capitalLetter==1) return 'Повторите пароль';
    42.         }
    43.     }
    44.  
    45.     private function Replace($str, $error) {
    46.         if( strripos($str, '__FIELDS__') ) {
    47.             $str=str_replace('__FIELDS__', $this->GetNameInput($error), $str);
    48.         }
    49.  
    50.         if( strripos($str, '__COUNT__') ) {
    51.             $str=str_replace('__COUNT__', explode('/', $error)[2], $str);
    52.         }
    53.  
    54.         if( strripos($str, '__WORD__') ) {
    55.             $str=str_replace('__WORD__', $this->DeclinationNumerals(explode('/', $error)[2], [
    56.                 'символ', 'символа', 'символов'
    57.             ]) , $str);
    58.         }
    59.  
    60.         return $str;
    61.     }
    62.  
    63.     public function Msg($error) {
    64.         if( explode('/', $error)[1] ) {
    65.             return $this->Replace($this->CodeMap[explode('/', $error)[0]], $error);
    66.         } else return $this->CodeMap[$error];
    67.     }
    68. }
    Возможно это не правильное решение...

    echo (new DecodingMsg)->Msg('3/4/8');