我希望能够使用laravel构建一个查询,并将其序列化为url字符串。 这将允许我创建路径,这些路由将反序列化查询构建器,运行查询,并创建一个显示数据库结果的视图。
例如,要实现一个刷新kryo发布的帖子列表的按钮:
http://example.com/ajax/posts.php?name=kryo&order_by=created_at&order_type=desc
Posts.php只是一个在url参数中反序列化,验证和运行查询的路由,并将结果提供给视图。
也许这在一般情况下没用,但我个人觉得它特别适合ajax请求。如果有人知道如何将其作为某种性质的laravel插件来实现,那就太棒了。
答案 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
。这可能不是您所需要的,但它可以让您了解如何实现它。