Я пытаюсь получить доступ к маршруту "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-адрес, но никто в моей команде не может понять, почему он так себя ведет.






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.
Когда вы опускаете обязательный параметр в функции route(), Ziggy выдает ошибку на консоли и не создает URL.
Ссылка, представленная здесь, построена правильно, и объявление маршрута правильное. Проблема могла быть вызвана тем, что ваш веб-сайт не обновлялся, когда вы добавляли , { contact: contact.id } в функцию route().
Кроме того, если вы не манипулировали функцией route() и используете последнюю версию, она должна работать правильно.
Итак, я работал над этой проблемой с OG, и мы выяснили, что по какой-то причине идентификатор выходит в виде строки.
Текущее решение, которое мы придумали, это
<a :href='route("contact.test",{contact:parseInt(contact.id)})'>Test</a>
ParseInt заставляет Зигги перестать закатывать истерику. Мы идем по пути, чтобы выяснить, почему наш идентификатор выходит в виде строки.
Как бы безумно это ни звучало, это решило проблему. Даже при проверке с помощью typeOf, contact.id — это число до и после использования parseInt().
Мы все еще сбиты с толку необходимостью parseInt()
Ой. Я использую TypeScript, поэтому мне никогда не приходило в голову, что идентификатор не является числом! Умный.
Сумасшествие в том, что идентификатор - это число. Если мы добавим typeof к идентификатору, он скажет, что это число. Для БД установлено значение big int, поэтому для этого нет особых причин.
Я не знал об этом, бросая вещи в раздел запросов URL, если они не запрашиваются, это полезно знать. Я использовал команду ziggy:generate и все равно получаю ту же ошибку. жесткое кодирование числа дает мне правильную информацию, и я могу отображать идентификатор, используя {{ contact.id}} в других местах, но когда я использую его в сочетании с функцией route(), он ничего не отображает. Как ни странно, когда я использую contact.id в функции маршрута в качестве незапрошенной строки запроса, идентификатор будет отображаться.