【问题标题】:Laravel routes continue url slugLaravel 路由继续 url slug
【发布时间】:2018-12-21 18:23:34
【问题描述】:

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

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

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

@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'));
    } 

这是我的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)

【问题讨论】:

  • 试试这个route('choose_table', ['company_name' =&gt; $company_name, 'table_name' =&gt; $data-&gt;name]);

标签: php laravel laravel-5 laravel-routing laravel-5.6


【解决方案1】:

您在 app.welcome.blade.php 中使用choose_table 路由,但缺少一个参数:

<a href="{{ route('choose_table',$table_name = $data->name)}}" class="btn btn-primary" >
    {{$data->name }}
</a>

您的路线实际上需要 2 个参数,即 company_nametable_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

【讨论】:

    【解决方案2】:

    您需要两个参数 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');
    

    【讨论】:

      【解决方案3】:

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

      如果你想要可选的第二个参数,你可以在路由中的命名参数后面附加一个问号(见下文)。

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

      【讨论】:

        猜你喜欢
        • 2017-09-09
        • 2011-09-07
        • 2014-06-28
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2014-10-23
        • 1970-01-01
        • 2022-01-08
        相关资源
        最近更新 更多