Missing required parameter for Route - php

I am working with Laravel 5.3. I have a controller function that has $id has its argument
public function verifyMe ($id){
$user = User::findOrfail($id);
return view ('dashboard');
}
I have in my route, a url with this $id parameter.
Route::get('/verify/{id}', [
'uses' => 'UserController#verifyMe',
'as' => 'VerifyMe',
]);
Also in my blade template, I have this
<h3>To verify, Click Here. </h3>
But I get this error
Missing required parameters for [Route: verifyMe] [URI: verify/{id}].
I dont know what I am doing wrong.

In your template, remove $user->id and put auth()->user()->id and see whether it'll work.
The issue i think, is variable $user.

I had a similar problem, and tried a way like this
Try this
<h3>To verify, <a href="{{route(['verifyMe', 'id' => $user->id])}}">Click
Here.</a> </h3>
I hope it helps

Related

Missing required parameter when using injection

I have this route:
Route::resource('riskfields', RiskfieldsController::class)->except('show');
Within the RiskfieldController/edit I'm calling the edit view as:
public function edit(Riskfield $riskField)
{
return view('riskfields.edit', [
'riskField' => $riskField
]);
}
where Riskfield is the model.
So, inside edit.blade.php I have:
{{ Form::open(['route' => ['riskfields.update', $riskField->id], 'method' => 'put', 'autocomplete' => 'off']) }}
when I access to this endpoint: /admin/riskfields/1/edit
I get:
Missing required parameter for [Route: riskfields.update] [URI: admin/riskfields/{riskfield}] [Missing parameter: riskfield]. (View: /var/www/html/resources/views/riskfields/edit.blade.php)
The problem's that I have inject the model, so I don't know what's happening there.
This is the update method:
public function update(Riskfield $riskField, Request $request): RedirectResponse
Someone could help?
UPDATE:
dd ouput:
This problem stopped me for half an hour, but I hope my answer will help someone. Essentially I have to change this:
public function edit(Riskfield $riskField)
into:
public function edit(Riskfield $riskfield)
The parameter must have the same name convention defined within the route, so I've executed php artisan route:list and it was admin/riskfields/{riskfield}
Hope to help someone.

Laravel contact form is not working correctly

I have a problem with the Laravel site's form, when I send the form through the site it shows an error, using devTools it is noted that it is an error 500 of the Post method, but the form is sent anyway.
the following error appears in the laravel log file
[2021-12-15 11:27:49] production.ERROR: Missing required parameters for [Route: contato] [URI: {lang}/contato]. {"exception":"[object] (Illuminate\Routing\Exceptions\UrlGenerationException(code: 0): Missing required parameters for [Route: contato] [URI: {lang}/contato]. at /home/corstonecom/public_html/vendor/laravel/framework/src/Illuminate/Routing/Exceptions/UrlGenerationException.php:17)
In the form view it like this:
<form id="frm-contato" class="site-form" action="{{ route('contato-enviar', app()->getLocale()) }}" method="post">
In the routes file web.php it like this:
Route::view('/contato', 'fale-conosco')->name('contato');
Route::post('/contato', 'HomeController#enviarContato')->name('contato-enviar');
and in the controller it like this:
public function enviarContato(EnviaContatoRequest $request)
{
$inputs = $request->all();
$inputs['localidade'] = $inputs['cidade'] . '/' . $inputs['uf'];
$contato = Contatos::create($inputs);
Lead::fastSave([
'name' => $inputs['nome'],
'email' => $inputs['email'],
]);
Mail::send(new FaleConosco($contato));
Session::flash('contato_enviado', 'sucesso');
return redirect()->route('contato');
}
Where am i going wrong?
You would need to pass the lang parameter when calling the route method when doing the redirect in your Controller method as the route contato requires the lang parameter:
return redirect()->route('contato', ['lang' => app()->getLocale()]);
It is best to get in the habit of using an associative array for the parameters as any more than 1 parameter and they will need to be in an associative array for the URL generator to match them up.
If you don't want to have to constantly be passing this app()->getLocale() value to the URL helpers you can set a default for the lang parameter and it will be added for you. You could use a middleware to do this. Example of the functionality of setting a default value for a parameter:
public function handle($request, $next)
{
\URL::defaults([
'lang' => app()->getLocale(),
]);
return $next($request);
}
Now you don't have to pass the parameter for lang when generating URLs as it has a default value set.
If you already have a "locale" middleware that is handling the locale you can add this to it.
When you pass parameters to the route, you should pass it as an array with keys, so that Laravel knows what the parameter is. In this case, you would do
<form id="frm-contato" class="site-form" action="{{ route('contato-enviar', ['lang' => app()->getLocale()]) }}" method="post">
See https://laravel.com/docs/8.x/routing#generating-urls-to-named-routes

Laravel - Missing required parameters for Route

I have a problem with my routes in Laravel 7 not sure where I a, going wrong here.
I have this route declaration:
Route::group(['prefix'=>'config', 'namespace'=>'Config'], static function () {
Route::resource('id-generation', 'IDSettingsController', ['names'=>'config.id_generation'])->only(['index', 'edit', 'update']);
});
Then a controller:
public function edit(IdSetting $setting)
{
return view('config.id.edit')->with(['setting'=>$setting]);
}
Then a view:
<form method="post" action="{{route('config.id_generation.update', ['id_generation'=>$setting])}}">
#method('patch')
#csrf
<x-inputs.text-input name="prefix" :model-object="$setting" />
<x-inputs.button/>
</form>
But I keep getting errors:
Illuminate\Routing\Exceptions\UrlGenerationException
Missing required parameters for [Route: config.id_generation.update] [URI: config/id-generation/{id_generation}].(View: F:\PROJECTS\PHP\app\resources\views\config\id\edit.blade.php)
In as much as I can see, I have done everything correctly. Even artisan command route:list can clearly show the route with its parameters etc.
Where might I be getting it wrong.
Surprisingly if i change it to {{url('config/id-generation/', $setting)}} everthing seeems to be working fine.
you have to match your model variable name to your ressource name, you can customize it with as:
Route::group(['prefix'=>'config', 'namespace'=>'Config'], static function () {
Route::resource('id-generation', 'IDSettingsController', ['names'=>'config.id_generation', 'as' => 'setting'])->only(['index', 'edit', 'update']);
});

I want to pass two parameters to the URL

I want to pass two parameters with the route helper
One is the thread ID and the other is less so I want to pass both
index.blade.php
#foreach($works as $work)
<tr>
<td>{{$work->input_person}}</td>
web.php
Route::get('/work/edit/{id}/{project}', 'WorkController#edit')->name('work.edit');
Incidentally, the error appears like this
Missing required parameters for [Route: work.edit] [URI: work/edit/{id}/{project}].
I don't have a good idea of ​​what to do
Pass it in the same array.
<a href="{{ route('work.edit', ['id' => $work->id,'project' => $param->id])}}">
Try this:
route('work.edit', ['id' => $work->id, 'project' => $param->id])

Laravel 5 - link_to_route() method making my route parameters to change into Query String by adding "?" at the end

After hours of searching I still could not find my answer regarding L5.
What my issue is :
I want to make a link something like this:
localhost:800/songs/you-drive-me-crazy
BUT what is get is:
localhost:800/songs?you-drive-me-crazy
my route parameter is changing into query string.
//routes.php
$router->bind('songs', function($slug)
{
return App\Song::where('slug', $slug)->first();
});
$router->get('songs', ['as' => 'songs.index', 'uses' => 'SongsController#index'] );
$router->get('songs/{songs}', ['as' => 'songs.show', 'uses' => 'SongsController#show'] );
I am using:
{!! link_to_route('songs.index', $song->title, [$song->slug]) !!}
I have tried everything but not succeeded yet,your suggestion may be helpful.
Thanks.
Your usage of link_to_route is incorrect:
{!! link_to_route('songs.index', [$song->title, $song->slug]) !!}
The first parameter is the route name, the second parameter is an array of route parameters, preferably using key value. Because you did not show your defined route, it's hard to guess what this associative array should look like:
{!! link_to_route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug]) !!}
Also I advise you to use the documented functions: route(), see: http://laravel.com/docs/5.0/helpers#urls
A correctly requested route using route():
{!! route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug]) !!}
A properly formatted route would then be:
Route::get('songs/{title}/{slug}', ['as' => 'songs.index', 'uses' => 'SomeController#index']);
This will result in a URL like: http://localhost:800/songs/you-drive-me-crazy/slug
If you only want to add the title to the URL but not the slug, use a route like this:
Route::get('songs/{title}', ['as' => 'songs.index', 'uses' => 'SomeController#index']);
This will result in a URL like: http://localhost:800/songs/you-drive-me-crazy/?slug=slug
Using
Route::get('songs/{slug}', ['as' => 'songs.index', 'uses' => 'SomeController#index']);
The URL will be like: http://localhost:800/songs/you-drive-me-crazy/?title=title assuming the slug now is you-drive-me-crazy
Any added parameter in a route() call will be added as a GET parameter if it's not existing in the route definition.
fixed it, thanks for your great concerns and suggestions.
I was linking to wrong route here:
`{!! link_to_route('songs.index', $song->title, [$song->slug]) !!}`
now, I changed it as :
`{!! link_to_route('songs.show', $song->title, [$song->slug]) !!}`
and it did the trick.

Categories