• В чем может быть проблема?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Должен вернуть одну строку с id 10 (последняя строка в выборке на скриншоте)
    Кому должен? Программа должна делать только то, что вы в ней написали. Строки по колонке mentions отсортированы, десятая строка выбрана. То, что нет других правил сортировки означает, что строки с одинаковым значением mentions можно выдавать в любом порядке.
    Ответ написан
    Комментировать
  • Как скрыть все компоненты кроме одного?

    0xD34F
    @0xD34F Куратор тега Vue.js
    В корне дерева комментариев храните идентификатор того, на который в данный момент пишется ответ, отдавайте его через provide / inject во вложенные компоненты, в которых, в зависимости от равенства полученного значения конкретному id, показывайте поле для ответа.

    https://jsfiddle.net/5uw1v9o6/
    Ответ написан
    Комментировать
  • Аутентификация через Vk в Laravel. Как должно быть?

    @assets
    Back-end developer
    Добрый день.

    Пароль не нужен. Авторизация идет через соц сеть по почте.
    https://github.com/laravel/socialite

    Пример авторизации вк,fb,google
    https://gist.github.com/Asetss/e4a744198e46edeb83b...
    Ответ написан
    Комментировать
  • Аутентификация через Vk в Laravel. Как должно быть?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Комментировать
  • Как должен быть реализован middleware?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    function app(Request $request) : Response {
        return new Response(200, "This is app response");
    }
    
    function myMiddleware(Request $request, callable $next) {
        $response = $next();
        $response->headers->add('Content-Type', 'text/html');
    
        return $response;
    }


    Это общий принцип. Декорация. Смотреть шаблон проектирования "адаптер" и "декоратор".

    updated

    упростим наше приложение до одной простой функции - handle, которая принимает запрос, и должна вернуть ответ. Это то как работает WEB и все вроде должно быть тут просто. Детали реализации функции нас не интересует. Внутри мы можем как-то в базу залесть, или еще чего сделать, это совершенно не важно. Нас интересуют аргумент и результат работы этой функции.

    Мидлвэром же будет являться любая функция, которая будет декорировать нашу. Задача этой функции такая же как и у функции приложения. Получаем на вход запрос, возвращаем результат. Единственное отличие в том, что в качестве второго аргумента функция мидлвэр получает следующую функцию в цепочке.

    То есть если например мидлвэру нужно сделать что-то с ответом - нам нужно сначала получить этот ответ у следующей функции в цепочке, и затем уже применить свои изменения, сформировать новый ответ и т.д. В качестве примера предлагаю такой вот простенький мидлвэр:

    function prettyErrorsMiddleware(Request $request, callable $next) : Response
    {
         // пробуем получить ответ от следующей функции в цепочке
         try {
              return $next($request); 
         } catch (Throwable $e) {
              // в случае необработанной ошибки, ловим ее
              // и формируем новый ответ с красивой версией этой ошибки
              return renderPrettyError($e);
         }
    }


    Имея реализацию подобного мидлвэра, мы можем реюзать его в любом проекте где требуется подобная функциональнать. Причем это удобно тестировать, это удобно комбинировать с другими "фичами" и мы всегда уверенны что получим красивое сообщение об ошибке.

    Поскольку речь идет о PHP мидлвэры можно сделать объектами:

    class PrettyErrorsMiddleware implements RequestHandler
    {
         private $errorRenderer;
         private $next;
    
         public function __construct(ErrorRenderer $errorRenderer, RequestHandler $next)
         {
                $this->errorRenderer = $errorRenderer;
                $this->next = $next;
         }
         public function handle(Request $request) : Response
         {
                // пробуем получить ответ от следующей функции в цепочке
                try {
                    return $this->next($request); 
                } catch (Throwable $e) {
                      // в случае необработанной ошибки, ловим ее
                      // и формируем новый ответ с красивой версией этой ошибки
                      return $this->errorRenderer->render($e);
                 }
          }
    }


    Мы так же можем прервать вызов цепочки наших функций. Например, мы можем сделать мидлвэр который занимается аутентификацией:

    function authentificatedEndpoint(Request $request, callable $next) : Response
    {
        // если мы не передали в запросе информацию о том кто мы и что мы
        // или эта информация не является правдой
        if (!$request->headers->has('X-Authorization') || !isAuthentificated($request->headers->get('X-Authorization'))) {
             // возвращаем ошибку 
             return new Response("You are not autnentificated!", 401);
        }
    
        // все хорошо, можно идти дальше по цепочке.
        return $next($request);
    }


    Опять же, можно делать очень много реюзабельных мидлвэров, комбинировать их в разные цепочки. Или например, мы можем иметь мидлвэр, который запускает в зависимости от каких-то условий разные цепочки мидлвэров делая композицию оных.

    Примерами таких вещей могут быть аутентификация, маршрутизация, CORS, логирование, кеширование, да что угодно! Вот небольшой список того что уже написано: https://github.com/oscarotero/psr7-middlewares#ava...
    Ответ написан
    6 комментариев
  • Lazy load для доменного объекта как реализовать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Или возможно есть более кашерное решение?


    Прокси объекты.

    https://github.com/Ocramius/ProxyManager

    Например так делает доктрина.
    Ответ написан
    1 комментарий
  • Как динамически обратиться к элементу массива?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    и что нужно? Вопрос все-таки как то криво задан, или неясно как проверять?
    function checkKey($path,$arr){
    $keys = explode(".",$path);
        foreach ($keys as $key){
            if(isset($arr["$key"]))$arr = $arr["$key"];
            else return false;
        }
    return true;
    }
    Ответ написан
    Комментировать
  • Покупка лицензии на themeforest для опенсорса есть ли такая возможность?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    ну конечно,
    расширенная это же и предлагает

    проблема в том, что даже на фри опен сорс все равно нужно приобретать расширенную

    ну а с учетом стоимости - дешевле заказать подобную у фрилансера с договором на все права
    Ответ написан
    Комментировать
  • Подсчет товаров в категории как реализовать?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    count group by ?
    Ответ написан
    Комментировать
  • Как спарсить xml по url?

    thewind
    @thewind
    php программист, front / backend developer
    Вторую строку надо стереть, хватит первой
    Ответ написан
    1 комментарий
  • Срабатывает статический вызов не статического метода, как так?

    @shagguboy
    в php 7 пофиксили. до этого это был BC BREAK
    Ответ написан
    Комментировать
  • Sphinx ищет не все слова, как исправить?

    sql_query = SELECT id, products_title,products_description FROM products
    а sql_attr_string убери, атрибуты - это не поле для поиска
    Ответ написан
    Комментировать