【问题标题】:Call model function from JavaScript in Laravel在 Laravel 中从 JavaScript 调用模型函数
【发布时间】:2015-05-13 19:50:09
【问题描述】:

我目前的项目实际上遇到了一些小问题。以下案例:

我有一个名为“发布”的模型,其中包含关系:

public function subscribers(){
    return $this->belongsToMany('User');    
}

在我的视图文件中,有一个包含所有帖子的表格以及一个用于订阅/取消订阅的复选框,其中包含与发布 ID 匹配的值:

<input class="click" type="checkbox" name="mobileos" value="{{{$posting->id}}}"
     @if($posting->subscribers->find(Auth::User()->id)) 
         checked="checked"
     @endif
>

现在我要存档的东西:

JavaScript 会观察复选框是否被选中。据此,当前用户订阅/取消订阅该帖子。比如:

        $('.click').on('click',function() {

            // $posting->find(---$(this).prop('checked')---)->subscribers()->attach(---Auth::user()->id---);
            // $posting->find(---$(this).prop('checked')---)->subscribers()->detach(---Auth::user()->id---);
        });

是否有可能以任何其他方式存档?到目前为止,我无法理解这一点。

干杯, 克里斯

【问题讨论】:

  • 你需要通过 Ajax 调用与 Laravel 进行通信。您是否已经尝试过或者您熟悉 Ajax?
  • 不是很熟悉,只是基本的技能。但是,如果这是深入研究的正确方法,那应该不是问题:)

标签: javascript php laravel-4 eloquent blade


【解决方案1】:

如果你想使用 Ajax 来实现这一点,你需要在 Laravel 中为订阅提供一个 REST 端点,例如:

http://localhost/subscribe/{{userid}}

调用此端点时,可以更新数据库。如果在数据库中保存数据库成功,该函数还可以返回一个 JSON 显示。

使用此端点在点击时进行 Ajax 调用:

var user = {
   id: 0 // retrieve the correct ID from wherever it is stored
}

$('.click').on('click',function() {

  $.GET('http://localhost/subscribe/' + user.id, 
  function () { // this is the success callback, that is called, if the Ajax GET did not return any errors
    alert('You are subsribed')
  });

});

理想情况下,您不会使用 GET 方法,而是使用 POST 并将用户 ID 作为数据发送。此外,您还需要从会话或存储它的任何位置检索用户 ID。

请注意,当您使用 Ajax 时,可以轻松地从客户端对其进行操作。因此,在服务器上,您应该检查发送的用户 ID 是否与会话中的相同。也许您根本不需要发送用户 ID,但这取决于您的后端是如何构建的。

【讨论】:

  • 像魅力一样工作,谢谢!我为订阅和取消订阅创建了额外的 POST-Routes,并通过 AJAX 将发布 ID 发布到它:)
  • 不客气。不要忘记阅读如何保护 REST 接口;)
猜你喜欢
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2016-05-27
  • 2018-03-21
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多