Laravel many-to-many 关系中的附件

Attachment in Laravel many-to-many relation

我正在尝试进行第一次依恋/分离。我正在使用两个表、用户、事件及其数据透视表 event_user。对于这个,我需要做一个按钮来让用户订阅一个事件,所以我的老师告诉我使用一个并将它路由到订阅方法。这时,出现的错误是。

Route [subscribe] not defined.

Blade

<a href="{{ route('subscribe', $event->event_id) }}" 
    class="btn btn-primary btn-lg">Subscribe</a>

路线

Route::get('/subscribe', [SubscribeController::class, 'index']);

订阅控制器

public function index($id)
{   
    $user = Auth::user();
    $user->events->attach($id);

    return view('index');
}

我尝试将 URL 而不是路由放在 中,它会转到 /subscribe,但会出现一个错误,显示 -> 传递给函数 0 的参数太少,而预期恰好是 1。

我在组件中做了一个 dd() 来查看事件 ID 是否正确,事实确实如此。另外,除了这些错误之外,如何在不更改路由的情况下路由方法?我可以使用 indexController 来实现吗(因为它位于这些事件所在的索引中)?

首先,为了通过名称引用路由,您需要为其命名 subscribe。 文档:https://laravel.com/docs/master/routing#named-routes

其次,您想添加您尝试在控制器中使用的 id 路由参数。 文档:https://laravel.com/docs/master/routing#required-parameters

所以你的路线最终应该是这样的:

Route::get('/subscribe/{id}', [SubscribeController::class, 'index'])
    ->name('subscribe');

然后你会想这样称呼它:

<a href="{{ route('subscribe', ['id' => $event->event_id]) }}" 

首先,在您的 blade 视图文件中,您尝试使用这样的 route 帮助程序生成 url

<a href="{{ route('subscribe', $event->event_id) }}" 
class="btn btn-primary btn-lg">Subscribe</a>`

你调用 route 帮助程序的方式我们可以这样认为

  1. 您已经在 web.php 文件中定义了一个名为 subscribe
  2. 的路由
  3. 那条路线有参数

但是在你的 web.php 文件中你有这条路线

Route::get('/subscribe', [SubscribeController::class, 'index']);
  1. 这条路线没有任何名字。
  2. 它不需要任何参数

要解决这个问题,您应该只更改在 web.php 文件中定义路由的方式,如下所示

Route::get('/subscribe/{id}', [SubscribeController::class, 'index'])
    ->name('subscribe');

我们定义这条路线:

  1. id 作为必需参数
  2. 路由命名为subscribe