Laravel 路线继续 url 塞

Laravel routes continue url slug

不知道如何让1条路线显示url/something,下一条路线显示url/something/anotherthing

现在除了第三条路线一切正常。 它显示 url/company_name 并显示带有另一个 link 列表的视图。 我希望当我单击一个 link 时将 $table_name、$company_name 传递到下一个视图,但我还希望 url 为 url/company_name/table_name.

我的 home.blade 中有这个显示一些 links:

@foreach($companies as  $data)                   
<a href="{{ route('show_tables',$company_name = $data->name )}}" class="btn btn-primary" >
{{$data->name }}
</a>
@endforeach

当我点击控制器中的 link 时,我得到了这个:

   public function index($company_name) {
        $tables = DB::connection($company_name)->table('tables')->get();
        return view('apps.welcome', compact('tables', 'company_name'));
    } 

这是我的 apps.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}', 'Apps\WelcomeController@index')->name('show_tables');
Route::get('{company_name}/{table_name}', 'Apps\SetupController@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>

您的路线实际上需要 2 个参数,即 company_name & table_name:

Route::get('{company_name}/{table_name}', 'Apps\SetupController@index')->name('choose_table');

在你的路线中使用这两个参数(正如@rkj 在评论中提到的):

route('choose_table', ['company_name' => $company_name, 'table_name' => $data->name]);

否则,将您的 2nd 参数设置为可选参数:

Route::get('{company_name}/{table_name?}', 'Apps\SetupController@index')->name('choose_table');

但是如果你这样做,你必须在控制器中为可选参数提供默认值。

Optional Parameters

您需要两个参数 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}', 'Apps\SetupController@index')->name('choose_table');

您缺少路线的最后一个参数,因此您需要将其作为参数传递。

如果您想要可选的第二个参数,您可以将问号附加到路由中的命名参数(见下文)。

Route::get('{company_name}/{table_name?}', 'Apps\SetupController@index')->name('choose_table');