Ответы пользователя по тегу PHP
  • PHP, как решить конфликт множественного использования trait?

    @dzhebrak
    Как вариант, в OtherFirstTrait и OtherSecondTrait можно не использовать ErrorTrait, а сделать абстрактный метод с той же сигнатурой, что и в ErrorTrait. В ChildClass в свою очередь использовать ErrorTrait, OtherFirstTrait, OtherSecondTrait.

    Пример:
    trait ErrorTrait
    {
    	public function someMethod($someArg) {
    		echo __TRAIT__ . ": " . $someArg . "\n";
    	}
    }
    
    trait OtherFirstTrait
    {
    	abstract public function someMethod($someArg);
    
    	public function someMethod1($someArg) {
    		echo __TRAIT__ . ": " . $someArg . "\n";
    		$this->someMethod($someArg);
    	}
    }
    
    trait OtherSecondTrait
    {
    	abstract public function someMethod($someArg);
    
    	public function someMethod2($someArg) {
    		echo __TRAIT__ . ": " . $someArg . "\n";
    		$this->someMethod($someArg);
    	}
    }
    
    abstract class MainClass
    {
    	use ErrorTrait;
    }
    
    class ChildCLass extends MainClass
    {
    	use OtherFirstTrait, OtherSecondTrait;
    }
    
    $o = new ChildCLass();
    $o->someMethod("test ErrorTrait");
    print("\n");
    $o->someMethod1("test OtherFirstTrait");
    print("\n");
    $o->someMethod2("test OtherSecondTrait");

    Вывод:
    ErrorTrait: test ErrorTrait
    
    OtherFirstTrait: test OtherFirstTrait
    ErrorTrait: test OtherFirstTrait
    
    OtherSecondTrait: test OtherSecondTrait
    ErrorTrait: test OtherSecondTrait
    Ответ написан
    3 комментария
  • Проверка карты на валд?

    @dzhebrak
    Да, можно проверить с помощью регулярных выражений. В symfony есть хороший пример:
    https://github.com/symfony/symfony/blob/8a7c776b92...
    Ответ написан
    Комментировать
  • Как запретить доступ к сайту с других стран?

    @dzhebrak
    Если ваши конкуренты мешают вашей деятельности сейчас, то вполне возможно, что будут и после того, как вы запретите доступ из стран кроме Казахстана - достаточно будет найти новые прокси. Более того в такой реализации нужно будет дополнительно разрешать доступ для поисковых ботов, чтобы не было проблем с seo.

    Возможно, лучшим решением будет скрывать (или как-то помечать) от вашего менеджера заявки, которые были сделаны посетителями не из Казахстана. Менеджер не будет их видеть, зато ваши конкуренты будут и дальше тратить свое время на фейковые заявки.

    Вот пример, как можно определить страну и заблокировать всех, кто не из Казахстана:
    $ip = $_SERVER['REMOTE_ADDR'];
    $ipInfo = json_decode(file_get_contents("http://ip-api.com/json/{$ip}?fields=status,message,country,countryCode"), true);
    
    if(isset($ipInfo['country']) && $ipInfo['country'] != 'Kazakhstan') {
    	//print('BLOCKED COUNTRY');	
        http_response_code(403);
    	  die('Forbidden');
    }
    Ответ написан
    5 комментариев
  • Как сформулировать массив в данной верстке?

    @dzhebrak
    Да, вы верно определили элементы массива - осталось только создать массив. У вас получится что-то вроде следующего:

    $items = [
    	'My Tasks' => [ // уникальный ключ для каждого элемента
    		'text' => '130 / 500', // текст, который показывается для элемента в span
    		'color' => 'bg-fusion-400', // цвет
    		'progress_wrapper_class' => 'mb-3', // класс для progress (уникальный у User Testing) или использовать if, как в примере ниже
    		'progress_value' => 65, // значение progress bar
    	],
    	'Transfered' => [
    		'text' => '440 TB',
    		'color' => 'bg-success-500',
    		'progress_wrapper_class' => 'mb-3',
    		'progress_value' => 34,
    	],
            // остальные элементы
    ];

    Далее вам необходимо перебрать этот массив с помощью foreach:
    <?php foreach ($items as $key => $item) : ?>
            <div class="d-flex <?php if ($key == 'My Tasks'): ?>mt-2<?php endif; ?>">
                <?= $key ?>
                <span class="d-inline-block ml-auto"><?= $item['text'] ?></span>
            </div>
            <div class="progress progress-sm mb-3">
                <div class="progress-bar <?= $item['color'] ?>" role="progressbar" style="width: <?= $item['progress_value'] ?>%;" aria-valuenow="<?= $item['progress_value'] ?>" aria-valuemin="0" aria-valuemax="100"></div>
            </div>
    <?php endforeach; ?>

    Но в современной разработке все-таки чаще используются шаблонизаторы вроде twig.
    Ответ написан
    3 комментария
  • Проверка подключения файла?

    @dzhebrak
    Еще один часто используемый способ - в index.php (точка входа) объявить константу, например,:

    define('INDEX_LOADED', true);

    а в других файлах (подключаемых) добавить проверку:
    if(!defined("INDEX_LOADED")) {
    	die('Inсlude only');
    }

    Или можно вынести подключаемые файлы за webroot.
    Ответ написан
    Комментировать
  • Best practices в именовании классов, методов и переменных?

    @dzhebrak
    Может есть какой-то сервис/рейтинг популярных слов (прилагательных, существительных) для нейминга, чтобы пополнить словарный запас?

    source-code-wordle.de
    https://onym.co/
    Ответ написан
    Комментировать