• Как решить проблему с конкуренцией запросов на чтение в PHP?

    MrLoki
    @MrLoki
    I will.
    Никак. Вы думаете о параллельной среде как об однопоточной. Можете принудительно пускать юзверей в один поток, тогда такой проблемы не возникнет.

    Иначе алгоритм выглядит так:
    b51629f9d4a34e85a4bbd5173a7ba794.png
    Те пользователи что зашли и получили данные в промежутке пока «десятый» получил данные и закрыл страницу, тоже дойдут до конца и сохранят свои данные.

    Чтобы пустить пользователей в один поток на запись, можете лочить таблицу между получением данных и записью инкремента, или использовать кэш для счётчиков, там это всё будет быстрее, но суть та же — дождаться пока один пользователь завершит сессию прежде чем пускать другого.
    Ответ написан
    7 комментариев
  • Как в Yii2 организовать scope?

    MrLoki
    @MrLoki
    I will.
    Начните уже читать доки, это же основа фреймворка вообще.
    www.yiiframework.com/doc-2.0/guide-db-active-recor...

    class Model extends ActiveRecord {
        public static function find() {
            return new MyQuery(get_called_class());
        }
    }
    
    class MyQuery extends ActiveQuery {
        public function withFullUrl($url) {
            $this->andWhere(['full_url' => $url]);
            return $this;
        }
    }


    Теперь модель и query разделены, поэтому всё что относится к запросам и формированию этого самого запроса — в отдельном классе.
    Ответ написан
    1 комментарий
  • Yii2. Как организовать обмен данными БД между разработчиками?

    MrLoki
    @MrLoki
    I will.
    Как вариант: www.yiiframework.com/doc-2.0/guide-db-migrations.html правда для больших справочников всё равно придётся делать дампы и накатывать их из миграции.

    Либо шареный коннект к одной удаленной БД для всех разработчиков. Но этот вариант может привести к другим неожиданным побочным эффектам.
    Ответ написан
    7 комментариев
  • Как прикрутить Twig к Slim Framework без композитора?

    MrLoki
    @MrLoki
    I will.
    Да, сейчас у большинства компонентов в PHP есть зависимость как минимум от автолоадера композера — не видел чтоб кто-то делал этот файл самостоятельно, все рассчитывают, что композер сгенерирует его.

    Но, есть, и другой способ. Клонируем всё, например, в vendor, затем туда-же клонируем https://github.com/symfony/ClassLoader, и настраиваем. Как настроить в readme.md достаточно доходчиво написано. Кстати ложить это в файл autoload.php совсем не обязательно, если делаете настройку сами — можно положить прямо в index.php, или кто там у вас фронт-контроллер.

    И не забывайте, что компоненты сейчас не распространяются целиком, смотрите файл composer.json в том же твиге и качайте вручную все зависимости.
    Ответ написан
    Комментировать
  • Зачем в yii2 классы и объекты для генерации html?

    MrLoki
    @MrLoki
    I will.
    Ну вы даёте, одну из толковых частей фреймворка обзываете.
    В большом и сложном проекте, как правило, есть большая и сложная логика, а большая и сложная логика — предполагает большие и сложные условия. Городить условия во view — дело неблагодарное, потому что view — только представление и ничего больше, и чем оно проще тем лучше.

    Далее по списку.
    Вы в своем примере в HTML совершили ошибку, которая будет стоить вам гибкости.
    href="/index.php?r=/client/create"
    Тут должен быть использован генератор url, но тогда код становится уже сложнее и козырнуть «простотой и понятностью» не выйдет, не так ли? Это позволяет, например на начальном этапе не париться о «красивых» URL, ссылаясь на action/controller, а ближе к концу за 1 раз настроить роутинг по всему проекту, ничего не меняя во вью.

    Попробуйте нарисовать checkbox в html. Не простой, а выбранность которого будет зависеть, от параметра модели. Я подскажу:
    <input type="checkbox" value="1" name="name" <?php if($model->selected) ?>checked <?php endif ?>>

    Уже не так красиво?
    Ещё можете нарисовать select чтоб уж совсем убедиться в необходимости Html-хелпера.

    Сейчас вы можете сказать, про вынесение генерации HTML в файлы, но я вас заверю. Во-первых это породит либо множество файлов и кучу условий (одна форма с кастомным select другая со стоковым, но с label, у третьей ещё что-то), и подключение этой кучи файлов будет выполняться дольше, а без компиляции шаблонов — постоянно дольше. Во-вторых, вы снова теряете в гибкости.

    В Yii есть проблемы, но хелпер Html — не одна из них.
    Ответ написан
    Комментировать
  • Как работать с Android VK SDK?

    MrLoki
    @MrLoki
    I will.
    А зачем? Токен может отвалиться не только из-за времени жизни.
    Запрашивать access_token также необходимо при смене пользователем логина или пароля или удалением приложения в настройках доступа.

    Если запросы с этим токеном начинают отдавать ошибку(User authorization failed.), можно перехватить её и переавторизоваться.
    Если срок использования ключа истек, то необходимо повторно провести все описанные выше шаги, но в этом случае пользователю уже не придется дважды разрешать доступ.
    Ответ написан
    Комментировать
  • Насколько хороша либо плоха сильная связанность в Yii, и возможно ли сделать подобие Service Locator для Yii?

    MrLoki
    @MrLoki
    I will.
    SL или DiC, для Yii не подходит, об этом говорили создатели фреймворка, в том числе на хабре. Для внешней логики можно накрутить что-то свое.
    Но внутри
    wbP2PVdFiMqkfBqjE0RyS8E6m.png

    Если смотрите на DiC или SL, попробуйте Symfony2, Zend 2, Laravel 4 или что-то еще. У Yii свой путь, привыкайте к глобальному доступу.

    Отвечая на вопрос разруливания компонентов.
    Конфигурируем в секции components и, получаем доступ через Yii::app(). Где угодно.

    Модули, есть. Но работают странно, и мы с ними друг-друга не поняли. Попробуйте вы.
    Ответ написан
    4 комментария
  • Symfony 2 Assetic + фильтр compass?

    MrLoki
    @MrLoki
    I will.

    Компас – набор компонентов для sass. Для работы с sass/scss у симфонии есть встроенный в assetic фильтр, которому в конфиге можно указать стиль(как раз то о чем вы спрашиваете) и разрешить использовать компас.

    Пример моей настройки assetic, в которой я попросил его автоматом применять scss к файлам оканчивающимся на .scss.

    app/config/config.yml

    assetic:
        filters:
            scss:
                style: 'compressed'
                compass: true
                apply_to: "\.scss$"
    

    Вывод стилей теперь работает так:

    {% stylesheets '@ApplicationBundle/Resources/public/scss/style.scss' %}
    <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
    {% endstylesheets %}
    

    Ответ написан
    3 комментария
  • Обучение ИТ-специалистов — онлайн или оффлайн?

    MrLoki
    @MrLoki
    I will.
    Онлайн.
    Ответ написан
    Комментировать
  • Покритикуйте конфиг виртуального хоста?

    MrLoki
    @MrLoki
    I will.
    А где вообще хоть одно закрытие директив? Ни Directory, ни VirtualHost не закрыты.
    Зачем, кстати, cgi-bin? Оно используется?

    Для проверки синтаксиса можно запустить Апач как то так:

    Fedora:
    #service httpd configtest


    На Debian-based кажется что то вроде:
    #apache2 -t


    Так же интересен должен быть ключ -S, который покажет, как сервер разобрал конфиг.
    Ну и конечно же дока
    Ответ написан
  • Проверка доступности файла в BAT?

    MrLoki
    @MrLoki Автор вопроса
    I will.
    @echo off
    attrib +R test1.txt |>Nul FindStr /i "ЌҐв ¤®бвгЇ :" && echo "File is denied!"


    Вроде победил.
    Ответ написан
    Комментировать