Ziggy Router по умолчанию использует строку запроса

Я пытаюсь получить доступ к маршруту "localhost:8000/contact/edit/{contact}

в моем файле vue я пытаюсь сделать это с помощью

<Link :href = "route('contact.edit', {contact:contact.id})">Edit Contact</Link>

Маршрут в web.php

    Route::prefix('contact')->group(function() {
        Route::post('/', [ContactController::class, 'store'])->name('contact.store');
        Route::get('/create/{customer}', [ContactController::class, 'create'])->name('contact.create');
        Route::get('/edit/{contact}', [ContactController::class, 'edit'])->name('contact.edit');
    });

Контроллер:

    public function edit(Contact $contact) {
        dd($contact);
    }

Когда я делаю это таким образом, я получаю сообщение об ошибке, что требуется параметр контакта:

Error: Ziggy error: 'contact' parameter is required for route 'contact.edit'.

Удаление требования к параметру показывает, что Зигги пытается перейти сюда:

GET http://localhost:8000/contact/edit?contact=88

Почему Зигги по умолчанию использует строку запроса в обычном запросе маршрута? Я преодолел это, просто написав URL-адрес, но никто в моей команде не может понять, почему он так себя ведет.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

При вставке переменной после "?"

Ziggy вставляет любой неопределенный параметр в URL-адрес в раздел URL-запрос.

Например, на основе вашего URL-адреса /contact/edit/{contact}, если бы я попросил его:

route("contact.edit", { contact: 88, username: "Test" })

это будет результат: /contact/edit/88?username=test, потому что имя пользователя не было частью исходного URL.

Ошибка, из-за которой Ziggy помещает контакт в раздел Query для вас, может заключаться в том, что вы не обновили файл JS, содержащий маршруты, сгенерированные Ziggy, после обновления файла web.php Laravel:

php artisan ziggy:generate.

При получении ошибки: «Требуется параметр ‘xy’»

Когда вы опускаете обязательный параметр в функции route(), Ziggy выдает ошибку на консоли и не создает URL.

Ссылка, представленная здесь, построена правильно, и объявление маршрута правильное. Проблема могла быть вызвана тем, что ваш веб-сайт не обновлялся, когда вы добавляли , { contact: contact.id } в функцию route().

Кроме того, если вы не манипулировали функцией route() и используете последнюю версию, она должна работать правильно.

Я не знал об этом, бросая вещи в раздел запросов URL, если они не запрашиваются, это полезно знать. Я использовал команду ziggy:generate и все равно получаю ту же ошибку. жесткое кодирование числа дает мне правильную информацию, и я могу отображать идентификатор, используя {{ contact.id}} в других местах, но когда я использую его в сочетании с функцией route(), он ничего не отображает. Как ни странно, когда я использую contact.id в функции маршрута в качестве незапрошенной строки запроса, идентификатор будет отображаться.

Starquest 14.04.2023 18:05
Ответ принят как подходящий

Итак, я работал над этой проблемой с OG, и мы выяснили, что по какой-то причине идентификатор выходит в виде строки.

Текущее решение, которое мы придумали, это

<a :href='route("contact.test",{contact:parseInt(contact.id)})'>Test</a>

ParseInt заставляет Зигги перестать закатывать истерику. Мы идем по пути, чтобы выяснить, почему наш идентификатор выходит в виде строки.

Как бы безумно это ни звучало, это решило проблему. Даже при проверке с помощью typeOf, contact.id — это число до и после использования parseInt().

Starquest 14.04.2023 18:19

Мы все еще сбиты с толку необходимостью parseInt()

Aaron Blakeley 14.04.2023 18:21

Ой. Я использую TypeScript, поэтому мне никогда не приходило в голову, что идентификатор не является числом! Умный.

rozsazoltan 14.04.2023 18:25

Сумасшествие в том, что идентификатор - это число. Если мы добавим typeof к идентификатору, он скажет, что это число. Для БД установлено значение big int, поэтому для этого нет особых причин.

Aaron Blakeley 14.04.2023 18:32

Другие вопросы по теме