Задать вопрос
  • Насколько критично использование миграций в Laravel для одиночного проекта с одним разработчиком?

    procode, ты можешь с тем же успехом этот первый дамп обернуть в одну миграцию с одной операцией - импортом этой БД.
  • Где у меня ошибка (php)?

    Сослан Хлоев, нет проверки на существование POST аргументов.
  • Где у меня ошибка (php)?

    А тернарный тут причём, если в коде оператор нулевого слияния (null coalescing)?

    При этом код совершенно корректный и лучше даже написан чем в вашем ответе (и меньше ошибок содержит в том числе).
  • Как передать объект БД в класс?

    Павел Корнилов, подключение к БД не может быть синглтоном по определению. По очевидными причинам: Соединений к БД может быть несколько.
  • Почему Undefined variable в AuthServiceProvider?

    Обожаю когда берутся за фреймворки не зная и десятой части (судя по вопросам на Тостере) основ языка. Может стоит чуть пересмотреть свою позицию? Или не?
  • Как отключить incrementing?

    vism, ну это да. Плюс UUID должен быть всё же бинарным, т.к. на строковых просадки по скорости просто адовые.
  • Как отключить incrementing?

    Только метод должен называться не boot, а bootUUID
  • Undefined variable при проверке переменной?

    jazzus, зависит от того что требуется. Если в указанном примере, то ни тот, ни другой, т.к. для отображения глобальных ошибок (к в данном случае) достаточно выкинуть любое HTTP исключение, а в случае форм - они (ошибки) автоматом создаются на уровне валидаторов.
  • Проблема заголовка Sec-Web-Socket-Accept, как исправить?

    Миша, а нахрена в хедерах \r\n в конце? Заголовки и так их отправляют.
  • Проблема заголовка Sec-Web-Socket-Accept, как исправить?

    Миша, если работает, то да. Если не работает, то хз, но я именно так реализовывал для себя под swoole
  • Что означает ошибка при запуске шаблона YII2?

    Вообще-то нет. PEAR тут никаким боком.

    Кто-то просто не читал мануалы и забыл поставить зависимости композера на сервере.
  • VK PHP SDK не работает, что делать?

    Хорошо, я поставил как у тебя. Но теперь, уже ошибка с другим классом.

    15x03243, я надеюсь, что когда-нибудь ты сможешь скопировать текст из примера.

    На досуге предлагаю прочитать этот раздел: php.net/manual/ru/language.namespaces.php чтобы хотя бы чуть-чуть знать что пишешь.
  • VK PHP SDK не работает, что делать?

    15x03243, а папки тут причём? JhaoDa выше правильно написал. Спрашивалось тысячу раз, отвечалось ещё больше. Сам вопрос не относится к композеру, а принадлежит разделу "Базовые основы PHP".
  • Как сделать так, что функция выполнялась каждую минуту?

    Гуглил, но нашел только про ReactPhp, но этот вариант не подходит. Может есть решения полегче?


    1) Почему?
    2) В качестве альтернативы можно использовать Amp
  • Нормально ли так проверять авторизацию?

    karasique,
    1) Андрей всё правильно написал. Проблема работоспособности кода именно в кукисах. Это данные на клиенте, которые можно отредактировать. А значит потенциальная ДЫРИИЩЩЩЩА. Я попытался одновременно и об этом написать, и решение предложить, и упростить код, так, чтобы потом было проще всё это допиливать.
    2) А про допил костылей: Следуя логике, что объект - это самодостаточная шляпа, которая отвечает за представление какого-то одного куска функционала - не думаю, что доставит проблем реализовать примитивную проверку прав самому ;)

    Подумаем... Создаём класс "проверяльщик прав" (Authorization) с методом "хватает возможностей" (can) а дальше можем завязать его на что угодно: "$auth->can($worker, 'READ_MESSAGES');" Ну или даже так: "$auth->can($worker, $message, 'read')"

    Со временем потихоньку становится понятно зачем всякие разработчики используют 100500 разных объектов, интерфейсы и прочую шляпу. Сейчас же можно не заострять на этом внимание: Либо делать топорно, костыльно и в лоб, либо посмотреть как реализовано у других (в Symfony, Zend или Laravel), но думаю сейчас это будет избыточным, т.к. опыта просто не хватит понять "зачем оно всё так".

    spoiler
    Если знаний языка достаточно, чтобы понять что такое объекты, интерфейсы, трейты, циклы, функции и прочее - можно начинать смотреть на всякие фреймворки. Symfony в этом плане будет довольно тяжеловат для старта, а по одной только конфигурацией его можно просто покончить жизнь самоунынием. Yii - отличная рабочая лошадка, но учиться на нём - печально, т.к. пропагандирует огромное количество сомнительных и крайне паршивых решений ради скорости разработки однотипных проектов. Laravel - довольно сбалансированный вариант между низким уровнем старта и возможностями для развития, а костыли там довольно профессионально скрыты от лишних глаз =)))
  • Нормально ли так проверять авторизацию?

    А зачем может вообще пригодится

    karasique, а как ты создашь нового рабочего?

    $worker = new Worker();
    $worker->save();
    
    // Ну или так:
    $database->save($worker);


    Я писал в основном не о том "пригодится или нет вот прямо сейчас", а о том как можно улучшить всё это дело. Если "рабочий" умеет считываться откуда-то, то наверное он должен уметь и сохраняться туда. Логично?

    P.S. Можно, сделать, например вот так:
    spoiler
    class Worker extends User
    {
        // ...
        public function __construct(array $data)
        {
            $this->workerData = $data;
        }
    
        public function rename(string $name)
        {
            $this->workerData['name'] = $name;
        }
    }
    
    class WorkersDatabaseRepository
    {
        public function findById(int $id)
        {
            // $data = select * from ... where id = $id
            return new Worker($data);
        }
    
        public function save(Worker $worker) { /** код обновления */ }
    }
    
    
    // Получаем рабочего по ID из БД
    $worker = $db->findById(42);
    // Переименовываем 
    $worker->rename('Vasya');
    // и сохраняем туда новые данные
    $db->save($worker);


    Что получаем:
    spoiler
    1) У "рабочего" функционал только его, мы можем один раз его написать и забыть
    2) У места, откуда читаются данные и куда сохраняются только одна зона ответственности - получить их и сохранить.
    3) Мы можем запросто взять и сохранить того же рабочего в совершенно иное место.
    4) Или, например, получить из одной базы и сохранить в другую "$a->save($b->findById(42))"
    5) Мы не зависим от кукисов и от заголовков, они в другом месте, которое работает с ними. А значит при ошибках или проблемах с ними - не надо весь код перелопачивать.


    А вот пример того, на какие куски можно поделить это всё:
    spoiler
    class SessionAuthentication
    {
        public function __construct(DatabaseRepository $db) { ...}
        public function login(Worker $worker) { ... }
        public function current() { ... }
    }
    
    $auth = new SessionAuthentication($db);
    $auth->current(); // или Worker или null
    $uath->login($worker); // Прописываем в сессию ID переданного рабочего


    И опять же получаем что:
    spoiler

    1) Аутентификация у нас живёт совершенно отдельно
    2) Если понадобится - мы можем заменить сессии на что угодно другое, да хоть на БД
    3) Очень простой интерфейс логина при передаче воркера) и получения текущего пользователя.

    Минусы:
    1) Завязано на сессии, т.е. не можем иметь более одного залогиненного пользователя (ну, например, админ хочет походить из под другого пользователя и посмотреть как оно всё выглядит)
    2) Завязано на Worker, т.е. мы не можем подменить реализацию рабочего на что-то ещё
    3) Возможно внутри это вся завязано на id рабочего, а значит каждый объект обязан будет иметь его.


    Продолжать, короче, можно много, но в результате имеем:
    1) Рабочий - это некое существо, задача которого просто менять данные в массивчике.
    2) Логика получения и сохранения данных отдельно, задача этой шняги - получить этот массивчик и сохранить этот массивчик.
    3) Аутентификация - тоже отдельный кусок, задача которого управлять состоянием - получать и сохранять куда-то информацию о статусе текущего юзверя.
  • В чем недостатки такого решения?

    Столько замечаний, но среди них не заметил основного ответа

    Он в самом первом предложении, предлагаю прочитать его =)

    Необходимо что-то типа: while ($voteService->isLocked()) {

    Отличное решение! Вместо того, чтобы просто обновить значение в одном запросе - писать while, который может просто грохнуть в 504 весь сайт. Можно ещё добавить sleep на всякий случай, чтобы наверняка! Ведь каждому известно, что медленные сайты производят впечателние того, что он очень крутой и там много всякого кода внутри.