【问题标题】:Laravel render for differend controller methodLaravel 渲染不同的控制器方法
【发布时间】:2015-07-01 22:10:20
【问题描述】:

我正在努力使用 Laravel 5 中的 render() 方法。 $whatever->render() 运行时,默认将控制器方法名作为路由。

示例: 当我在 DelasController@updateFilter 中运行此命令时,分页路由设置为whatever.com/marketplace/updateFiler?page=2,这对我来说没有意义。

问题: 我想让路线像whatever.com/marketplace?page=2一样简单。

问题: 谁能给我提示一下如何解决这个问题?

感谢您的时间和讨论。 期待回复。

【问题讨论】:

  • 当您访问whatever.com/marketplace/updateFiler 时,该页面上的分页链接将是whatever.com/marketplace/updateFiler?page=2 - 为什么您希望它重定向到不同的路线?如果你只想要一个简单的路线,你可以从简单的路线开始。例如。如果您希望分页链接访问 whatever.com/marketplace?page=2,则将 that 设置为该页面的路径。
  • 当然,updateFilter 有异步 ajax 调用。这就是问题
  • 我需要对 DB/Eloquent 结果应用过滤器,而不是为这些结果创建 HTML 表示,并生成分页,这样我就可以用过滤后的内容替换原始内容。
  • 哦,你没有提到这是一个 AJAX 调用。在这种情况下,我有一个不同的方法给你。我会把它写下来作为答案。

标签: laravel methods render pagination


【解决方案1】:

我有一个应用程序,其中各种分页列表显示在页面的“窗口”中,并通过对服务器的 AJAX 调用进行更新。我是这样做的:

设置渲染整个页面的路由,如下所示:

Route::get('/marketplace', function ($arguments) {
    ....
});

设置一个返回列表当前页面的路由。例如,它可能是这样的:

Route::get('/marketplace/updateFiler', function ($arguments) {
    ....
});

在页面的 Javascript 代码中,您需要更改分页链接,这样就不会使用链接的 URL 加载新页面,而是向第二条路由发出 AJAX 请求。 Javascript 可能看起来像这样:

$('ul.pagination a').on('click', function (event) {
    // stop the default action
    event.stopPropagation();
    event.preventDefault();

    // get the URL from the link
    var url = $(event.currentTarget).attr('href');

    // get the page number from the URL
    var page = getURLParameterByName(url, 'page');

    $.get('marketplace/updateFiler', { page: page }, function (data){
        // do something with the response from the server
    });
});

getURLParameterByName 函数只是一个从 URL 中提取命名参数的助手:

var getURLParameterByName = function (url, name, defaultValue) {
    // is defaultValue undefined? if so, set it to false
    //
    if (typeof defaultValue === "undefined") {
        defaultValue = false;
    }

    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
    results = regex.exec(url);
    return results === null ? 
        defaultValue : 
        decodeURIComponent(results[1].replace(/\+/g, " "));
};

我根据在 Stack Overflow 上找到的答案改编了这段代码:https://stackoverflow.com/a/901144/2008384

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2012-02-28
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多