【问题标题】:Laravel 5 route pagination url encoding issueLaravel 5 路由分页 url 编码问题
【发布时间】:2016-05-14 17:56:06
【问题描述】:

我构建了一个 laravel 5 应用程序,现在我正在测试它如何处理不同的输入。因此,我遇到了一个奇怪的问题。在标题中,我有一个搜索字段。它返回结果,以 10 分页。

问题

如果用户输入一个字母,例如英文中的“e”,一切正常。但是,当用户输入字母时,例如保加利亚语中的“e” - 结果的第一页正确显示,当用户点击第 2 页时,搜索中的查询从保加利亚语中的“е”变为“%D0 %B5" 并且不再显示结果。这是该网站的实际链接。 http://podobri.eu

我猜这与编码有关,但我看不出我做错了什么。

这是实际代码

路线

Route::get('/search', [
   'uses' => '\Podobri\Http\Controllers\SearchController@getResults',
    'as'=>'search.results',
]);

搜索控制器

public function getResults(Request $request){

        $query = $request->input('query');
        $comments = Comment::where(function($query){
           return $query; 
        })->orderBy('created_at', 'desc')->get();

        if(!$query || $query==''){
            return view('problems.index')->with('comments', $comments);
        }

        $problems = Problem::where(DB::raw("CONCAT(problem_title, ' ', problem_description)"), 'LIKE', "%$query%")
                ->orWhere('location', 'LIKE', "%$query%")
                ->orWhere('category', 'LIKE', "%$query%")
                ->orderBy('created_at', 'desc')->paginate(10);

        Carbon::setLocale('bg');
        return view('search.results')
                ->with('comments', $comments)
                ->with('problems', $problems)
                ->with('title', 'Резултати за "'."$query".'" | Подобри')
                ->with('description', 'Резултати за "'."$query".'" в системата на Подобри');
    }

查看

        @foreach($problems as $problem)
           <div>
              @include('problems.partials.problemblock')
           </div>
        @endforeach

        <!-- Paginating-->
        {!! $problems->appends(Request::except('page'))->render() !!}

搜索表单

<form action="{{ route('search.results') }}" role="search" class="navbar-form navbar-left head-form-responsive">
                    <div class="form-group">
                        <input type="text" required id='searchQuery' title="Търсете за проблеми" value="{{ Request::input('query') }}" name="query" class="form-control"
                               placeholder="Търсете за проблеми"/>
                    </div>
                    <button type="submit" id='searchBtn' class="btn btn-default">Търсете</button>
                </form>

【问题讨论】:

  • 当你点击page2时,这个action方法和处理数据的方法一样吗?
  • 我不清楚你的意思。我做了什么被认为是不好的做法吗?
  • 不,我的意思是这个方法 getResults() 与转到 page2 的方法相同?
  • 你试过把$query = $request-&gt;input('query');改成$query = urldecode($request-&gt;input('query'));吗?
  • 我可以为他回答,是的@яша,是一样的。 Laravel 将其分页在 url 末尾添加 &amp;page=X

标签: php laravel encoding pagination laravel-5


【解决方案1】:

在我看来,您的问题正在发生,因为分页器正在附加一个带有一些奇怪重定向的尾部斜杠(不确定你们是否使用自定义 htaccess)。例如,如果你搜索 e,这是 URL:

http://podobri.eu/search?query=e

但是,第二页的 URL 是这样的:

http://podobri.eu/search/?query=e&page=2

注意?query 前面的斜线。如果删除斜线,它可以工作。那么,如何解决这个问题?

这实际上是在几个月前修复的。你可以在这里看到这个提交:https://github.com/laravel/framework/commit/806fb79f6e06f794349aab5296904bc2ebe53963

所以,如果您使用的是 L5.1 或 5.2,您可以运行 composer update,它会自行修复。但是,如果您使用的是 5.0,它似乎仍然存在此错误,因此您可以使用 setPath 方法并尝试以下方法:

{!! $problems->setPath('')->appends(Request::except('page'))->render() !!}

【讨论】:

  • 我使用的是 Laravel 5.0。尝试了您的解决方案。像魅力一样工作。谢谢。
【解决方案2】:

我遇到了类似的问题,我的解决方法是改变路由的方法。

Route::post('uri', 'Controller@function')
    ->name ('view.function');

为:

Route::any('uri', 'Controller@function')
    ->name ('view.function');

这对我有用。

问候并祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 2016-10-21
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多