【问题标题】:Calling a controller function from within a View laravel 4从视图 laravel 4 中调用控制器函数
【发布时间】:2014-10-30 08:42:51
【问题描述】:

大家好,我想知道如何解决这个问题...我正在构建一个laravel4 应用程序,我想在我的controller 中调用一个函数来删除列表中所有选定的项目。

这是我的view

<div class="panel panel-default">
        <div class="panel-heading">
            Twitter Winners
            <div class="pull-right btn-toolbar">
                <a href="{{action('AdminBaseController@deleteSelectedTweets')}}" class="btn btn-danger">Delete Selected</a>
                <a href="#"  class="btn btn-primary">Confirm Winners</a>
                <a href="#"  class="btn btn-primary">Generate New List</a>
            </div>
        </div>
        <div class="panel-body">
            <table class="table table-hover">
                <thead>
                    <tr>
                        <th>Delete</th>
                        <th>Tweet</th>
                        <th>Username</th>
                        <th>Name</th>
                        <th>To</th>
                        <th>From</th>
                    </tr>
                </thead>
                @foreach(Tweet::all() as $tweet)
                    <tr>
                        <td><input type="checkbox" name="delete_tweet" value="0"/></td>
                        <td>{{$tweet->tweet_text}}</td>
                        <td>{{$tweet->screen_name}}</td>
                        <td>{{$tweet->name}}</td>
                        <td><select name="origin">
                                <option value="0">Origin...</option>
                                <option value="1">Station 1</option>
                                <option value="2">Station 2</option>
                                <option value="3">Station 3</option>
                            </select>
                        </td>
                        <td>
                            <select name="destination">
                                <option value="0">Destination...</option>
                                <option value="1">Station 1</option>
                                <option value="2">Station 2</option>
                                <option value="3">Station 3</option>
                            </select>
                        </td>
                    </tr>
                @endforeach
            </table>

        </div>
    </div>

理想情况下,当用户选择此link 时,我想执行function:

        <a href="{{action('AdminBaseController@deleteSelectedTweets')}}" class="btn btn-danger">Delete Selected</a>

我不想离开页面,这是我认为能够做到这一点的唯一方法。

【问题讨论】:

  • 如果该页面可以快速加载(没有太多查询),您可以在最后返回相同的视图时写入 AdminController@deleteSelectedTweets 函数。您的页面将刷新并完成工作。

标签: php laravel laravel-4 scope


【解决方案1】:

使用 Ajax,您需要: - 完成这项工作的控制器函数,例如:AjaxController@deleteTweet($id)

假设您使用帖子表单来传输选定的推文。

查看: 首先为每个标签添加 1 个类。

<a href="{{action('AdminBaseController@deleteSelectedTweets')}}" tweet-id={{$tweetID}} class="tweet btn btn-danger">Delete Selected</a>


$(".tweet").click(function(e){
    e.preventDefault();
    var tweetId = $(this).attr('tweet-id');
    var node = $(this);

    $.ajax({
        url: {{ route_to_ajax_controller }} + "/" + tweetId,
        success: function(data){
            node.remove();
        },
        error: function(error){
           console.log(error);
        }
    });

})

Ajax 是最好的解决方案。如果您想避免使用 Ajax,可以执行以下操作:

在管理控制器中

public function deleteSelectedTweets(){

// yours code

   return View::make("view-name"); // View from which you came here
}

这是一个简单的解决方案,您的页面应该加载速度很快,并且您保持在同一页面上。

【讨论】:

    【解决方案2】:

    这是您需要的 AJAX 调用。

    例如

    点击删除按钮: - 获取所选项目 - 添加要传递的 AJAX 数据 - 调用 AJAX 函数(你引用的函数) - 删除项目 - 更新 Dom。

    关于堆栈溢出的代码太多,但建议您在直接进入之前通过一些演示查看您的 Jquery / Javascript 方面。

    【讨论】:

    • 太完美了,我会调查一下
    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 2016-05-23
    • 2017-03-12
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多