#laravel #laravel-blade
Вопрос:
Прежде всего, я хотел бы сказать, что мой английский не так хорош и я впервые публикую здесь, так что извините меня, если я сделал что-то не так! Ну, я начинаю практиковаться с Laravel и пытаюсь создать URL-адрес, по которому пользователи могут ставить лайки на посты. мой URL-адрес и контроллер прямо сейчас находятся здесь, Route::post('/post/{post}/like', [LikeController::class, 'postLike'])->name('post.like');
где post-это идентификатор сообщений, который я пытаюсь передать через атрибут действия формы. Вот моя анкета:
@props(['id'])
<div {{ $attributes->merge(['class' => 'card-footer d-flex justify-content-around']) }}>
<form action= "{{ route('post.like' , $id) }}" method="post" >
@csrf
<button>submit</button>
</form>
</div>
Если вам интересно, действительно ли id
он не передан в компонент, я проверил {{ dd($id) }}
, и он распечатал его.
Мой контроллер-это то, что он на самом деле ничего не делает прямо сейчас. Я просто пытаюсь передать удостоверение личности:
class LikeController extends Controller
{
public function postLike(Post $post) {
dd($post);
}
}
После всего этого я получаю сообщение об ошибке:
Отсутствует необходимый параметр для [Route: post.like] [URI: сообщение/{идентификатор}/нравится] [Отсутствует параметр: идентификатор]. (Вид: blogresourcesviewscomponentspostinteraction.blade.php)
У меня есть два дня, чтобы найти проблему, и я все еще пытаюсь в этот момент отправить это… Я не могу найти, в чем ошибка! Если бы вы могли мне помочь, я был бы вам очень признателен! Тай заранее
Комментарии:
1. Это невероятно!! я действительно не могу найти ни одной причины, по которой это не работает !!!
2. Это работает только в том случае, если я жестко закодировал URL следующим образом :
<form action="/post/{{$id}}/like" method="POST">
меня действительно смущает, почему он не работает с помощником маршрута…. он должен !!!!!!!!!!!3. Кроме того, Иисус работает, если я сделаю что-то вроде
<form action="{{ route('post.like' , 2) }}" method="POST">
, указав целочисленный идентификатор сообщения без параметра!!! Так что это работает:<form action="{{ route('post.like' , 2) }}" method="POST">
а это нет:<form action="{{ route('post.like' , $id) }}" method="POST">
Что за… здесь происходит!
Ответ №1:
Вам нужно передать идентификатор в виде ассоциативного массива в вашем маршруте().
{{ route('post.like', ['id' => $id]) }}
Комментарии:
1. Привет! я забыл упомянуть, что я уже пробовал это! но это тоже не работает! Кстати, я думаю, что если вам нужно передать только один параметр в вашем маршруте, вы можете избежать ассоциативного массива 🙂 Спасибо за ваше время, сэр
Ответ №2:
Если именованный маршрут определяет параметры, вы можете передать параметры в качестве второго аргумента функции маршрута. Данные параметры будут автоматически вставлены в сгенерированный URL-адрес в правильных позициях, и вы должны назвать «сообщение» вместо «идентификатор».:
Route::post('/post/{post}/like', [LikeController::class, 'postLike'])->name('post.like');
И вы можете позвонить по этому маршруту в любое место
route('post.like', [$postId])
Если это все еще не работает для вас. Тогда это может быть проблема с запуском кэша маршрутов:
php artisan route:clear
Комментарии:
1. Привет! Как я уже упоминал г-ну @Арджуну бхати, я изменил свой маршрут
Route::post('/post/{post}/like', [LikeController::class, 'postLike'])->name('post.like');
, и все та же ошибка! Также у меня много раз очищался кэш маршрутов! Ничего не изменилось2. Не могли бы вы, пожалуйста, подтвердить, что эта проблема существует и с другими маршрутами?
3. Да, у меня есть маршрут
Route::post('/post/{post}', [LikeController::class, 'postShow'])->name('post.show');
, и я также получаю ту же ошибку, отсутствует необходимый параметр для [Маршрут: сообщение.показать] [URI: сообщение/{сообщение}] [Отсутствует параметр: сообщение].4. Есть ли какая-либо ошибка из-за того, что я вызываю маршрут внутри компонента??? Я действительно могу найти здесь любую ошибку!!! И это всего лишь простая передача параметров!!!
Ответ №3:
Параметр Использовать то же имя
Когда вы используете ключевое слово «id» в качестве параметра в web.php затем также передайте то же имя в аргументе функции в контроллере
Route::post('/post/{id}/like', [LikeController::class, 'postLike'])->name('post.like');
Контроллер
class LikeController extends Controller
{
public function postLike(Post $id) {
dd($id);
}
}
Извините за мой плохой английский.
Комментарии:
1. Привет! Я изменил его на
Route::post('/post/{post}/like', [LikeController::class, 'postLike'])->name('post.like');
и все еще не работаю!!! Все та же ошибка!!!!2. Одно и то же имя используйте оба места, например, когда вы используете сообщение в маршруте, а затем также $post используйте в контроллере
3. Его зовут так же , приятель, я понятия не имею, почему он выдает мне ошибку!!!
4. Братан проверяет твою переменную $id. Это имеет какую-то ценность или нет. Возможно, ваша переменная идентификатора равна нулю.
5. Распечатали его, и он выдает идентификатор, так что это не проблема!!! Я думаю, может быть, это ошибка!
Ответ №4:
Я понятия не имею, в чем может быть проблема, но после многих изменений я преобразовал идентификатор поста в целое число, и это действительно сработало <form action= "{{ route('post.like' , (int)$id) }}" method="post" >
. Я не знаю, почему я должен приводить идентификатор в целое число, потому что по умолчанию это уже целое число, и я проверил это {{ dd(getType($id)) }}
и напечатал «целое число»! Я действительно в замешательстве, но это работает! Но я не счастлив, потому что понятия не имею, почему я должен преобразовывать целое число в целое, чтобы оно работало! В этом нет никакого смысла! Если у кого-нибудь есть ответ на этот вопрос, было бы здорово!