我不知道如何使一条路线显示url/something,而下一条路线则显示url/omething/anotherthing
现在,除了第三条路线,一切都很好。它显示url/company_name,并显示带有另一个链接列表的视图。我希望单击一个链接将$table_name、$company_name传递到下一个视图,但我也希望url为url/company_name/table_name。
我在家里有这个。显示一些链接的刀片:
@foreach($companies as $data)
<a href="{{ route('show_tables',$company_name = $data->name )}}" class="btn btn-primary" >
{{$data->name }}
</a>
@endforeach
当我点击控制器中的链接时,我有这个:
public function index($company_name) {
$tables = DB::connection($company_name)->table('tables')->get();
return view('apps.welcome', compact('tables', 'company_name'));
}
这是我的应用程序。welcome.blade视图:
<div class="card-body">
@csrf
@foreach($tables as $data)
<a href="{{ route('choose_table',$table_name = $data->name)}}" class="btn btn-primary" >
{{$data->name }}
</a>
@endforeach
这是我的网络路线:
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/{company_name}', 'AppsWelcomeController@index')->name('show_tables');
Route::get('{company_name}/{table_name}', 'AppsSetupController@index')->name('choose_table');
我得到这个错误:
Missing required parameters for [Route: choose_table] [URI: {company_name}/{table_name}]. (View: apps.welcome.blade)
您在app.welcome.blade.php中使用choose_table
路由,但缺少一个参数:
<a href="{{ route('choose_table',$table_name = $data->name)}}" class="btn btn-primary" >
{{$data->name }}
</a>
您的路由实际上需要两个参数,即company_name
&table_name
:
Route::get('{company_name}/{table_name}', 'AppsSetupController@index')->name('choose_table');
在你的路线中使用这两个参数(正如@rkj在评论中提到的(:
route('choose_table', ['company_name' => $company_name, 'table_name' => $data->name]);
否则,将第二个参数设为可选参数:
Route::get('{company_name}/{table_name?}', 'AppsSetupController@index')->name('choose_table');
但若要执行此操作,则必须为控制器中的可选参数指定默认值。
可选参数
您需要两个参数company_name
和table_name
,但您只传递table_name
。也可以通过company_name或删除{company_name}
,如下所示。
<a href="{{ route('choose_table',$table_name = $data->name)}}" class="btn btn-primary" >
{{$data->name }}
</a>
Route::get('{table_name}', 'AppsSetupController@index')->name('choose_table');
您缺少路由的最后一个参数,因此需要将其作为参数传递。
如果您想要可选的第二个参数,您可以在路由中的命名参数上附加一个问号(见下文(。
Route::get('{company_name}/{table_name?}', 'AppsSetupController@index')->name('choose_table');