Отсутствует необходимый параметр в действии формы

#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)) }} и напечатал «целое число»! Я действительно в замешательстве, но это работает! Но я не счастлив, потому что понятия не имею, почему я должен преобразовывать целое число в целое, чтобы оно работало! В этом нет никакого смысла! Если у кого-нибудь есть ответ на этот вопрос, было бы здорово!