Laravel路由继续url slug



我不知道如何使一条路线显示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_nametable_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');

最新更新