【问题标题】:Laravel empty route parameterLaravel 空路由参数
【发布时间】:2022-01-24 01:55:03
【问题描述】:

我有多个路由将指向同一个控制器和方法。我希望第二条路线将有一个空的 customParams,但第一条路线将使用自定义参数。我应该怎么办?谢谢

Route::get('{customParams?}/{slug}/{registrationCode}/detail', [SubmissionController::class, 'submissionDetail'])->name('submission.detail');

public function submissionDetail($customParams = '', $slug, $registrationCode)
{
    //
}

第一条路线运行良好

 <a href="{{ route('submission.detail', ['customParams' => 'riwayat-pengajuan', 'slug' => $cs->service->slug, 'registrationCode' => $cs->registration_code]) }}" class="btn btn-primary btn-sm">Detail</a>

第二条路线不起作用并产生 404 页面

 <a href="{{ route('submission.detail', ['slug' => $cd->service->slug, 'registrationCode' => $cd->registration_code]) }}" class="btn btn-primary btn-sm">Detail</a>

【问题讨论】:

  • 必需参数之前不能有可选参数,这没有意义(路由基于段)
  • 可以在这里添加条件吗?喜欢customParams 参数会不会通过?
  • 如果是,那么我有同样的解决方案。

标签: php laravel routes


【解决方案1】:

为它制作 2 条路线,因为在你的情况下,param 是你的可选。

在 web.php 中

Route::get('{customParams?}/{slug}/{registrationCode}/detail', 'HomeController@details');
Route::get('{slug}/{registrationCode}/detail', 'HomeController@detail'); // add new route with different function name

在控制器中

/* your default function will call when your customParams having some value */
public function details($customParams = null, $slug, $registrationCode) {
    dd($customParams, $slug, $registrationCode);
}

/* when your customParams will empty which is your 2nd case */
public function detail($slug, $registrationCode) {
    $this->details(null, $slug, $registrationCode);
}

结果……

当使用此http://127.0.0.1:8000/welcome/slug/r-code/detail 调用 URL 时

当 URL 调用 http://127.0.0.1:8000/slug/r-code/detail

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 2021-02-04
    • 2018-04-05
    • 2013-11-24
    • 2017-10-25
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多