序列化Laravel查询生成器

时间:2014-03-23 00:33:13

标签: ajax url serialization laravel query-builder

我希望能够使用laravel构建一个查询,并将其序列化为url字符串。 这将允许我创建路径,这些路由将反序列化查询构建器,运行查询,并创建一个显示数据库结果的视图。

例如,要实现一个刷新kryo发布的帖子列表的按钮:

http://example.com/ajax/posts.php?name=kryo&order_by=created_at&order_type=desc

Posts.php只是一个在url参数中反序列化,验证和运行查询的路由,并将结果提供给视图。

也许这在一般情况下没用,但我个人觉得它特别适合ajax请求。如果有人知道如何将其作为某种性质的laravel插件来实现,那就太棒了。

1 个答案:

答案 0 :(得分:0)

我试着给你一个基本的想法:

Laravel中,您必须创建route来向函数/方法发出请求,因此首先需要创建一个route来监听ajax 1}}请求,例如:

Route::get('/ajax/posts', array('uses' => 'PostController@index', 'as' => 'showPosts'));

现在,在视图中创建一个指向此路线的链接,以创建一个链接,您可以尝试这样做:

$url = to_route('showPosts');

如果你使用这样的东西:

<a class='ajaxPost' href="{{ $url }}?name=kryo&order_by=created_at&order_type=desc">Get Posts</a>

它会为该路线创建墨水。因此,请确保您能够将$url传递到JavaScript或手动,然后您可以使用url撰写/ajax/posts?name=...。创建链接后,您需要为此链接创建JavaScript处理程序(可能使用click事件)然后处理来自处理程序的click事件,生成ajax请求,如果它是jQuery那么它可能是这样的:

$('.ajaxPost').on('clcik', function(e){
    e.preventDefault();
    var url = $(this).attar('href');
    $.getJSON(url, function(response){
        $.each(response, function(key, value){
            // loop... you may use $(this) or value
        });
    });
});

PostController控制器类中,创建索引方法:

class PostController extends BaseController {

    public function index()
    {
        $name = Input::get('name');
        $order_by = Input::get('order_by');
        $created_at = Input::get('created_at');
        $order_type = Input::get('order_type');

        $posts = Post::whereName($name)->orderBy($order_by, $order_type)->get();
        if(Request::ajax()) {
            return Response::json($posts);
        }
        else {
            // return a view for non ajax
        }
    }
}

如果您要将呈现的视图从服务器端发送到JavaScript处理程序HTML,请将getJson更改为get而不是return Response::json($posts);使用

return View::make('viewname')->with('posts', $posts);

在这种情况下,请确保您的视图不会扩展主layout。这可能不是您所需要的,但它可以让您了解如何实现它。