• Почему не ставится Drupal (Time-out)?

    @kuzin_val
    Попробуй увеличить лимит nginx proxy_connect_timeout/
    Ответ написан
    Комментировать
  • Как пользоваться Transliterator?

    Vasiliskov
    @Vasiliskov
    Упрощённый вариант, без раскуривания доки по транслитерейту:
    transliterator_transliterate('Latin-ASCII', transliterator_transliterate('Latin', $sourceString));
    Ответ написан
    Комментировать
  • Что такое «101»?

    @werwooolf
    Классы кодируются как 3-4 буквы предмета + 3 цифры уровня класса. Сотни в коде примерно соответствуют году обучения в 4-летнем колледже.
    1хх — freshhman (1 курс) — вводные классы
    2xx — sophmore (2 курс)
    3xx — junior (3 курс)
    4xx — senior (4 курс) — специализированные классы повышенного уровня сложности

    Студенту нельзя (или просто не рекоммендуется) брать курсы по номеру выше чем его год обучения.
    Для магистров и аспирантов классы будут соотвественно начинаться с 5хх-9хх.

    Десятки и сотни в номере обозначают разные классы, чаще всего нумерация идет в порядке увеличения сложности, или зависимости классов. Так, например, чтобы взять класс FIN345 («Финансы — средний уровень») нужно обязательно взять FIN302 — «Введение в финансы» и тп. А FIN445 будет наверняка на порядок сложнее чем FIN345.

    Итого, 101 — самый начальный воодный класс в любом предмете, например МАТ101 — введение в математику или BIO101 — введение в биологию.
    Ответ написан
    1 комментарий
  • Ежедневная смена бэкграунда - как реализовать?

    Exomode
    @Exomode
    Архитектор ПО
    cron/crontab
    Запуск PHP скрипта по расписанию cron. Когда не вс...
    Будет выполнять действие асинхронно по интервалу времени.
    Как вы реализуете логику cron-задачи, уже полностью от вас зависит. Либо будет подменять картинку, либо весь стиль целиком, просто у вас должен быть конфиг, который будет переключаться cron'ом, по нему движок сайта определит, какой контент в данный момент времени отдать клиенту.
    Ответ написан
    Комментировать
  • Как наследовать методы родительского контроллера при роутинге через аннотации?

    voronkovich
    @voronkovich
    При помощи YAML и XML это не сделать. Если очень хочется, создайте файл routing.php и загрузите его:
    # app/config/routing.yml
    routes:
        resource: 'routing.php'

    Затем, в это файле настройте маршрутизацию програмно, т.е. через PHP.

    Еще один вариант - использовать слушатель события kernel.request и, в зависимости от запроса, менять переменную _controller.

    UPD: Еще один способ (возможно, для вас наилучший) - сделать собственный загрузчик маршрутов. См. https://symfony.com/doc/current/routing/custom_rou...
    Ответ написан
    Комментировать
  • Doctrine DQL: как выбрать объекты из двух таблиц с разными условиями?

    Melkij
    @Melkij
    PostgreSQL DBA
    Проблема - условие WHERE работает только для первой таблицы, а из второй выбираются все элементы.

    Вывод неверен. Выполняются оба условия, гарантированным seqscan'ом по events, если повезёт то index scan'ом по weekday. А в результате, как в запросе и написано - выборки перемножаются между собой в cross join.

    Если таблицы не связаны и нужен плоский список - то здесь нужен именно union all. Глупая доктрина его не умеет. Возможные методы извращения без union глупая доктрина не умеет тем более.
    Значит или обучать доктрину делать union all (вероятно, нетривиально)
    или делать два запроса (всё равно у вас сейчас seqscan, значит производительность вам не нужна и explain никто не смотрел)
    или делать вьюшку в базе с union all и ходить к ней вместо таблиц (и проверить, умеет ли планировщик каждой из поддерживаемых баз вообще прокидывать условия внешнего запроса во вьюшки с union all)
    или использовать native query с нормальным SQL

    PS: да, я с доктриной работал и именно поэтому её сильно не люблю за ограниченность синтаксиса, при том всё равно с нещадно текущими абстракциями и необходимостью знать и учитывать чем именно каждая поддерживаемая база отличается от других. И нафига эта доктрина тогда вообще жрёт столько cpu и памяти?
    Ответ написан
    4 комментария
  • Как поставить Doctrine 2.6?

    daager
    @daager
    В тексте всё есть. В конфиге у вас прописана другая версия.
    https://github.com/symfony/symfony-standard/issues/858
    https://github.com/symfony/symfony-installer/pull/236
    Ответ написан
    Комментировать
  • Можно ли так обезопасить PHPMyAdmin на сервере?

    @Silm
    Во первых переименуйте. Во вторых добавьте базовую аутентификацию на папаку с phpmyadmin в дополнение ко встроенной в него авторизации. Иногда ее можно настроить прямо в панели хостинга или погуглите как это сделать в ручную: "базовая http-аутентификация".

    Ещё, вместо phpmyadmin можно использовать adminer. Представляет из себя 1 фай, который можно загрузить по FTP куда угодно и, насколько помню, для авторизации требует кроме логина и пароля ввести еще и имя базы.

    https://www.adminer.org/
    Ответ написан
    1 комментарий
  • Как получить адрес текущего файла сессии?

    riky
    @riky
    Laravel
    не будет это работать на всех ОС и серверах.

    банально потому что файлами для хранения сессий далеко не все пользуются. есть еще мемкеши, редис, базы и тд.

    лучше бы написали зачем вы такие костыли делаете? даже предположить затрудняюсь, хотя с пхп 5+ лет работаю.
    Ответ написан
    6 комментариев
  • Нужно ли использовать связи в таблицах MySQL, если используешь ORM?

    supervaleha
    @supervaleha
    Web-development
    Имхо нужно. Долгое время сам не юзал, ввиду программного контроля целостности - но все-таки пришел, путем своих ошибок, к применению ключей.

    Так или иначе хуже они тебе не делают, а лишний слой контроля целостности может очень помочь в критичной ситуации.
    Ответ написан
    Комментировать
  • Как сделать такой паттерн preg_match?

    @synapse_people
    <?php
    $arr = array('/page_name.html',
    '/page_name.html/1',
    '/page_name.html/2',
    '/page_name.html/999',
    '/page_name.html14',
    );
    
    foreach($arr as $a) {
    
    $matches = array();
    preg_match('~\\/(?P<page_name>.*?)\.html(?:\\/(?P<num>\\d+))?$~', $a, $matches);
    printf("%s => ",$a);
    
    if ($matches) {
    	printf(" %s; ", $matches['page_name']);
    
    	if (isset($matches['num'])) {
    		printf("[%d]", $matches['num']);
    	} else {
    		echo "No page set";
    	}
    } else {
    	echo "No matches";
    }
    
    echo PHP_EOL;
    }

    Вывод:
    /page_name.html =>  page_name; No page set
    /page_name.html/1 =>  page_name; [1]
    /page_name.html/2 =>  page_name; [2]
    /page_name.html/999 =>  page_name; [999]
    /page_name.html14 => No matches
    Ответ написан
    6 комментариев
  • Присвоить значение или бросить исключение: какая конструкция?

    27cm
    @27cm
    TODO: Написать статус
    Причина, почему так, как вы хотите, не работает - throw не возвращает никакого значения. Не будет работать даже вот такая простая конструкция:
    $return = throw new Exception();

    Если очень хочется, есть такой вариант - объявить вспомогательную функцию, в которую и обернуть throw (функция по умолчанию будет возвращать null):
    function throwme($e) { throw $e; }
    
    $data = $this->title_map[$page_type] ?? throwme(new EngineError('...'));


    Подробнее можно почитать тут:
    stackoverflow.com/a/1211497

    P.S.: Идея с конструкцией вроде $var = $test ?? throw new Exception() мне нравится.
    Ответ написан
    2 комментария
  • Что за формат: b'string'?

    27cm
    @27cm
    TODO: Написать статус
    Since PHP-5.2.1 we have an artifact of PHP-6 in the engine means we can define binary strings but such definitions haven't any effect.
    <...>
    That’s because PHP 6 was going to have Unicode strings by default, alongside binary strings (to PHP 5 and 7, just “strings”). These “binary strings” are just strings.

    Источник: grokbase.com/t/php/php-internals/1528wb2rj9/php6-a...
    Ответ написан
    2 комментария
  • Можно ли включать OPcache при разработке?

    Alexufo
    @Alexufo
    противоречивый, сложный, весь компьютерный.
    посмотрите настройки opcache в php.ini
    Там есть пункт который действительно разрешает кешировать php файл на некоторое время и его изменение не приведет к моментальному изменению в браузере. Но, по моему, по дефолту он отключен. Просто протестируйте.
    Ответ написан
    1 комментарий
  • Где внедрять зависимости?

    riky
    @riky
    Laravel
    пара вопросов на засыпку.
    - кто уполномочен создавать роутер, сейчас он без параметров но потом может быть нужны будут параметры. например роутеру понадобится доступ к базе или банальный путь к файлу с роутами где они прописаны.

    данный пример не очень показателен тк скорее всего у вас один бутстрап файл, один фронтконтроллер, и один роутер и к тому же один проект, либо проекты одинаковые. поэтому все изменения вы все равно сможете сделать в одном месте, либо в бутстрапе либо в конструкторе этом.

    а представьте в другом проекте вам нужна будет другая реализация роутера? где вы будете вносить изменения?
    правильно создать новый роутер, и передать в фронт контроллер из бутстрапа, тогда у вас будет потом не тронутый фронт контроллер, иначе если вы будете менять конструктор ФК то этот класс становится не переносимым.

    очень рекомендую также использовать DI контейнер например из симфони
    symfony.com/doc/current/components/dependency_inje...

    тоже его в какой то момент начал использовать когда еще болел темой "я пишу свой фреймворк".
    очень сложная это задача для новичка - сделать правильную архитектуру, хотя для самообучения это супер.
    Ответ написан
    Комментировать
  • Где внедрять зависимости?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Эммм... Контроллер создает роутер? Вам не кажется это странным?
    На самом деле роутер должен создаваться ДО создания контроллера. То есть он сперва должен быть создан, инициализирован используя конфигурацию, после чего на основе указанных роутов и запроса определить какой именно был вызван и тогда лишь наступает очередь контроллера.

    public function __construct(Request $request, Settings $settings, Router $router, Logger $logger)

    Почему не используете тот же ServiceLocator?
    Ответ написан
    Комментировать
  • Надо ли расписывать всё по переменным?

    sabramovskikh
    @sabramovskikh
    Можно, но читаемость кода ухудшилась.
    Моожно вообще тогда все в строку писать, все вычисление какойнить астрономической сущности
    Ответ написан
    Комментировать
  • Надо ли расписывать всё по переменным?

    Denormalization
    @Denormalization
    В первом варианте лучше читаемость. Ты не в твиттер пишешь, чтобы ужимать код.
    Чем выше читаемость - тем проще поддержка кода.
    Ответ написан
    3 комментария
  • Почему ругается PHPStorm?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Это один из многочисленных багов парсера PhpStorm, писать нужно в их трекер (сначала поискать, может кто-то об этом уже писал): https://youtrack.jetbrains.com/issues
    Ответ написан
    2 комментария
  • Как отладить рассылку с помощью mail()?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    www.xmailserver.org этот можете как сервер локальный
    Ответ написан
    Комментировать