Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
С помощью https://laravelshift.com/ выполнить "черновую" работу. Потому тестировать и допиливать. По пути можно наткнуться на отстутствие актуальной версии у стороннего пакета или обратную несовместимость кода на PHP. Ведь если фреймворк старый, то и пыха наверняка старая используется. Совсем без ручной работы не получится.
Круто. Но каким образом это связано с "GET method is not supported" ты разобрался?
Это нормально иметь два и более middleware.
Я думаю что ошибка "The GET method is not supported for this route. Supported methods: POST" происходит при обращении к api/v1/auth/login . Вероятно это результат редиректа при попытке обращения к кабинету от лица неаутентифицированного пользователя.
Я не пробовал L8 и Sanctum, поэтому это всё мои домыслы.
Ничего не знаю про пакет, который ты используешь. Но:
Мне кажется ты смешиваешь локализацию пользовательского интерфейса и локализацию контента. Страницы, которые ты помещаешь в Route::multilingual, вероятно должны выдавать контент на том или ином языке, независимо от того, какой язык является предпочтительным для пользователя, т.е. на каком языке пишутся меню и служебные сообщения. Не обязательно им совпадать!
Исходя из этого, твои два метода выбора языка должны устанавливать разные переменные внутри приложения и ты сможешь использовать их в разных в приложении независимо.
Наверняка ты смотришь не на тот маршрут, про который сообщение об ошибке.
На всякий случай, попробуй команды php artisan route:list и php artisan route:clear чтобы исключить вариант что ты изменил маршруты, а они по прежнему берутся из старого кеша.
Попробуй использовать отладку: доходит ли в твой метод управление? Посмотри чему равен Auth::user() и Auth::check(), как выполняются твои условия по шагам.
Пиши́те почти также как на сыром SQL:
$vehicles = Vehicle::join('carriers as c', 'c.id', '=', 'vehicles.carrier_id')
->where('c.user_id', '=', '1');
->orderBy('c.name')
->orderBy('vehicles.id')
->select('vehicles.*', 'c.name as carrier_name')
->get();
Eloquent это конечно ORM, но слабенький
В простейшем случае счётчик вообще не надо передавать, если он всегда одинаков. Определяй его в incl.
Другой вариант: передавать значение в @extends('layouts.parent', ['guest_count' => 20])
Третий вариант: получать значение через blade composer непосредственно в incl
Что будет "лучше/красивее" — это очень субъективно. Пробуй разное, развивай свой активный словарь и решай что лучше для тебя.
Видимо что-то изменилось - пути возможно. Надо дебажить: если не через xdebug, то выводя промежуточные значения в логи.
P.S. Ох, некропостингом занимаюсь. ))) Спамобот сбил меня с толку, изобразил живую дискуссию.
Ну не должно быть ошибки при соединении с БД. проект вообще работает с базой кроме этой миграции?
Попробуй установить все компоненты заново: удали папку vendors и файл composer.lock, затем сделай composer install. Должно пройти без ошибок.
Если цель теста в проверке что возникает исключение (а abort 404 вызывает исключение), то тебе нужен expectException()
Ну и, само собой, надо не накосячить с кодом. Ошибка 500 говорит о том, что где-то ты облажался. Я не могу ничего подсказать про конкретную библиотеку и походу никто здесь не в курсе.
https://thephp.cc/articles/questioning- … -practices
https://phpunit.de/manual/6.5/en/writin … exceptions
Ларавель использует симфоневский Http Foundation, поэтому вероятно сходное поведение будет и в множестве других мест: новые версии PHPBB, Drupal и др.
При создании сервиса в т.ч. контроллера можно указать класс или интерфейс для инъекции. Это тема большая, не буду пытаться чему-то учить.
Если этот код не увидит никто кроме тебя, то ради бога, используй инородные сущности. Иначе не надо ))) не провоцируй хейт.
Да, правильно через посредников.
DB будет доступен. Также как и классы-модели. Будет всё доступно, кроме объектов, порождаемых в middleware.
- Мне не совсем понятно, почему я могу получить доступ к сессии из любого метода класса, а из конструктора не могу.
Потому что так устроен стек обработки запроса. Сначала сначала выясняется конечная точка маршрута — метод контроллера, создается экземпляр объекта этого контроллера. Потом вызываются мидлвары в прямом проходе чтобы иметь возможность поработать с запросом. И на вершине стека срабатывает обработчик роута, создается ответ на запрос. Затем мидлвары получают управление в обратном порядке, чтобы иметь возможность поработать с объектом ответа.
Конструктор контроллера выполняется ДО того как обрабатываются куки и происходит идентификация пользователя. Поэтому проверка не работает.
Если я правильно понял задумку, то вам надо воспользоваться controller middleware. Объявление middleware не означает что её код выполнится прямо в этом месте и в этот момент. Мы таким образом помещаем проверку в очередь (стек) посредников, которые выполнятся позже конструктора, но перед обращением к методу-экшену маршрута.
Какого ответа вы ждёте, Роман: "Да, хочу работать на вас, зная что денег нет"?
Движок на позицию в поисковике не влияет. ВП служит основой для примерно половины коммерческих решений. Лично я не поклонник вордпресса, но не вижу логики в вашем утверждении.
У вас нет "конкурентов", потому что сайт по ссылке выглядит просто нерабочим.
Можешь гуглить со словом "subquery". Например вот такое находится:
https://laravel.io/forum/12-23-2015-sub … ry-builder
Типа
$query1 = DB::table(DB::raw('(' . $query1->toSql() . ') as tab1'))...
Последняя попытка
Что такое валидация? Это точка где происходит ветвление в программе: если данные отвечают заданным требованиям, то выполняется один кусок кода, а если не отвечают то другой кусок кода (обработка ошибки). Вот в этом другом куске у тебя есть нечто, требующее кэш и, ещё более конкретно, кэш с поддержкой тегов. А этой поддержки нет. Это написано английским по белому в тексте. Почему? Потому что ты взял файловый кеш. https://laravel.com/docs/8.x/cache#cache-tags
и как надо прописать валидацию чтобы она использовала раздельный кеш?
Валидация не использует кеш. Читай выше что происходит.
В стеке вызовов ты мог бы найти нужное место или мог бы пошагово дойти до него с xdebug. Надо просто научиться читать сообщения об ошибках.
Аргументация на уровне "Древние греки любили театр, они все мертвы. Театр - зло"
Не буду тебе мешать.
Это ничерта не говорит про валидацию. Отлаживайся, а не фантазируй.
Упоминание мидлваров в app/Http/Kernel.php, ищи 'web'. Там будет StartSession. Расскажешь потом как его менял
Просто спайдер не поддерживает куки, поэтому для серверного скрипта это выглядит не как новый заход того же пользователя, а как новый независимый заход. Сколько обращений, столько отдельных сессий.
Боюсь стандартными средствами Laravel ты это никак не решишь. Только если откажешься от поддержки сессий в принципе, уберешь соответствующий мидлвар.
(Не пользуйся бесплатным/копеечным хостингом чтобы тебе никто не предъявлял такую фигню)
Сосредоточься, Убунта. Какую ошибку? Почему ты связал её с валидацией? Я не понимаю ход твоих мыслей и, наверняка, никто не понимает.
Скорее всего не вызывается hit(), который этот счётчик увеличивает. Например потому, что до него не доходит управление из-за dd()
Если сложность задачи превышает твой уровень понимания, возвращайся к простому.
Тестируй то же самое на простом примере БЕЗ лишнего кода.
Прежде чем попытаться переложить трудности на чужие плечи, включи xdebug и посмотри что именно происходит.
Ты умеешь вставлять dd(), теперь убери их все (!!!) и отлаживайся без остановки скрипта.
И начни пользоваться xdebug