运行 来自 html 锚点的模型方法

Running model method from html anchor

我如何 运行 从锚标记中建模方法? 当我使用此代码时:

<a href="{{Auth::user()->sendFriendRequest($user)}}" role="button" class="btn btn-primary"><i class="fa fa-btn fa-plus"></i></a>

函数如下:

public function sendFriendRequest(User $user)
{
    DB::table('friends_users')
    ->where('user_id', Auth::user()->id)
    ->where('friend_id', $user->id)
    ->update(['who_send' => Auth::user()->id]);

}

在我进入页面时运行 运行s,但在单击锚点时不运行。 感谢您的帮助:)

恐怕这是不可能的,因为 PHP 代码是在呈现该页面的 HTML 时生成的。这会导致您描述的行为;该函数在页面加载时运行。如果您希望代码在单击按钮时执行,则不能使用 PHP 这样的服务器端语言来完成。为此,您必须使用像 JavaScript 这样的客户端语言。

此类操作通常使用以下模式实现:

  1. 点击按钮会触发 AJAX 请求,使用 JavaScript。
  2. AJAX 请求是一个 PHP 脚本,其中包含您在 post 中描述的代码。结果主要返回为 JSON.
  3. 您的 JavaScript 函数验证步骤 2 返回的 JSON 并采取相应行动,例如显示成功消息。

你做的不对。 PHP 或 Laravel 函数不能通过锚标记的 href 运行。

您可以通过以下方式完成:

在您的 blade 或 HTML 文件中

<a href="{{url('send-friend-request'.'/'.$user->id)}}" role="button" class="btn btn-primary"><i class="fa fa-btn fa-plus"></i></a>

在您的路线文件中,即 web.php

Route::get('send-friend-request/{user_id}', function($user_id){

    DB::table('friends_users')
    ->where('user_id', Auth::user()->id)
    ->where('friend_id', $user_id)
    ->update(['who_send' => Auth::user()->id]);

    return back();  // or return redirect('any-url-here');

});

我在web.php里写的函数,你也可以把这个函数写在Controller文件里

编辑 在上面的函数中,您可以将用户重定向回或任何指定的 url。 https://laravel.com/docs/5.4/responses#redirects