Can anyone please help me to pass multiple parameters in GET method, I have following codes -
in blade -
#if(!isset($model->id_car_type))
<a class="btn btn-search-red" href="{{ route('frontend.model', [Request::segment(2),$model->year,$model->niceName]) }}">Select</a>
#else
<a class="btn btn-search-red" href="{{ route('frontend.model', array(Request::segment(2),$model->year,$model->niceName, $model->id_car_type)) }}">Select</a>
#endif
In route -
Route::get('/model/{make}/{year}/{niceName}/{type?}', 'GeneralController#trimShowByNiceName')->name('frontend.model');
But it is throwing error -
Missing required parameters for [Route: frontend.model] [URI:
model/make/{make}/year/{year}/niceName/{niceName}/{type?}]
To pass parameters in a route use an array with the paramter names as keys:
{{ route('frontend.model', ['make' => 'Ford', 'year' => 1988, 'niceName' => 'Ford Escort']) }}
https://laravel.com/docs/5.7/routing#named-routes
In Laravel 5.2 use the following example:
In the view.blade.php
Page
In the route.php
`Route::get('users/{id}{name}', 'UsersController#searchUsers'); // this gets the id, name` from the view url.
In the controller method, pass the parameters as function parameters as follows:
public function searchUsers($id, $name)
{
// your code here that use the parameters
}
Related
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
I have a simple app for generating some code using Laravel, now I am trying to pass unique id to to my controller with the url.
This is this method that should receive the ID:
public function code($code_id)
{
$settings = Setting::find($code_id);
return view('pages.settings.code', compact('settings'));
}
And this is my view-file where I pass the ID:
<a href="{{ route('settings.code', $settings->code_id) }}">
{{ __('Generate Code') }}
</a>
When I check the URL I get:
http://127.0.0.1:8001/settings/code?K1zMXRZG4
Here is my route:
Route::get('settings/code', [
'as' => 'settings.code',
'uses' => 'SettingController#code'
]);
Route::resource('settings', "SettingController");
But I get the following error:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR)
Too few arguments to function App\Http\Controllers\SettingController::code(), 0 passed and exactly 1 expected
What is wrong with my code?
You need to define any parameters that should be passed to the method in your route:
Route::get('/settings/code/{code_id}', 'MyController#code')
->name('settings.code');
That will pass $code_id to the code()-method in your controller.
If you don´t define the parameter in your route, it will be passed as a parameter in Request-object instead - like all querystrings - and you need to fetch it like this in your controller:
$code_id = $request->query('code_id');
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])
route
Route::get('/dashboard/view-sub-project/{pid}/{sid}', 'SubProjectController#view')->name('sub-project.view')->middleware('auth');
View
View
Values of var
request()->route()->parameters['id'] is 2
$update->id is 1
I have defined router correctly on web.php and view but still, it throws an error
Missing required parameters for [Route: sub-project.view] [URI:
dashboard/view-sub-project/{pid}/{sid}]. (View:
/var/www/html/groot-server/resources/views/project/view.blade.php)
I have tried to change my router like this also
Route::get('/dashboard/view-sub-project/{pid}{sid}', 'SubProjectController#view')->name('sub-project.view')->middleware('auth');
Still got the same error.
Try adding parameters in array.
Route::get('/dashboard/view-sub-project/{pid}/{sid}','SubProjectController#view')
->name('sub-project.view')
->middleware('auth');
<a href="{{ route('sub-project.view',
[
'pid' => request()->route()->parameters['id'],
'sid' => $update->id
]
) }}" class="btn btn-primary project-view">
View
</a>
Hope this helps.
On your view, since you're using the route function to build the url you can do the following.
<a href="{{ route('sub-project.view', [
'pid' => request()->route()->parameters['id'],
'sid' => '$update->id'
]) }}" class="btn btn-primary project-view">View</a>
You can also view it in the Laravel Helper Function.
If you only have one parameter in the route you can just pass the value. Let's say you had a route that only took a post ID, Route::get('/posts/{post}/edit')->name(edit). On your view you can then do {{ route('edit', $post->id) }}.
When you have multiple values being passed to the route url as you have in your case you pass an array of item with the key being the same as the route parameter.
Let's say you have another route Route::get('/posts/{post}/comments/{comment}')->name(post.comment). On your view you can do {{ route('post.comment', ['post' => $post->id, 'commment' => $comment->id]) }}.
I just starting learning laravel and was wondering how to pass data unrelated to the route to a controller. What I'm trying to accomplish is create a todo item that is able to have nested items.
View
<a class="btn btn-success" href="{{route('lists.items.create',4)}}">Create New Item</a>
The 4 is just a hard-coded example to see if it was working.
Controller
public function create(TodoList $list, $item_id = null)
{
dd($item_id);
return view('items.create', compact('list'));
}
So if your creating an item and don't pass in a parameter for id, it will default to null otherwise set it to whatever was passed in. However I'm getting a NotFoundHttpException. How would I be able to accomplish this.
Any help Welcome :)
You need to define the route, for example:
Route::get('create-item/{id}', [
'as' => 'lists.items.create',
'uses' => 'MyController#create'
])
Now, call the route like:
<a class="btn btn-success" href="{{route('lists.items.create', ['id' => 4])}}">Create New Item</a>