更改返回视图以在 laravel 搜索功能上返回路线

Posted

技术标签:

【中文标题】更改返回视图以在 laravel 搜索功能上返回路线【英文标题】:Change return View to return Route on laravel search function 【发布时间】:2021-11-11 09:32:53 【问题描述】:

我正在尝试更正我的控制器的 searchresult 函数的代码,所以我担心当我对搜索结果进行分页或进行表单验证时,我收到以下错误消息:此路由不支持 GET 方法。支持的方法:POST。 所以如果你能帮助我,我想将我的代码从返回视图更改为返回路线。 这是我的代码

路线:

Route::get('/post/searchpost', 'PostsController@index')->name('index');
Route::post('/post/search_result', 'PostsController@searchresult')->name('searchresult');

刀片 //索引

<div class="posts">
<h1>Posts</h1>
<div class="sreach">
    <form action="route('searchresult', app()->getLocale())" method="POST">
       csrf_field()
      <div class="form-row">
        <div class="form-group col-md-2">
          <label class="lbl" for="cat_id">title</label>
          <select class="form-control" id="cat_id" name="cat_id">
                  <option value="" selected></option>
          @foreach ($categoriesas $cat)
                  <option value="$cat->id">$cat->cat_mame</option>
          @endforeach
          </select>
        </div>

        <div class="form-group col-md-2">
          <label class="lbl" for="title">Post title</label>
          <input type="text" class="form-control" id="title" name="title">
        </div>
        <div class="form-group col-md-2">
          <label class="lbl" for="content">Post content</label>
          <textarea class="form-control" id="content" name="content">
          </textarea >
        </div>
      </div>
      <center>
        <button type="submit">search</button>
      </center>
    </form>
  </div>

  <table id="posts">
    <thead>
      <tr>
        <th>__('main.title')</th>
        <th>__('main.post_category')</th>
        <th>__('main.content')</th>
      </tr>
    </thead>
    <tbody>
          @foreach($posts as $postkey => $post)
              <tr>
                  <td>$post->title</td>
                  <td>$post->category->cat_name</td>
                  <td>$post->content</td>
              </tr>
          @endforeach
    </tbody>
  </table>

刀片 //搜索结果

    <div class="posts">
        <h1>Posts</h1>
        <div class="sreach">
//that make me search again in result page using the same form
            <form action="route('searchresult', app()->getLocale())" method="POST">
               csrf_field()
              <div class="form-row">
                <div class="form-group col-md-2">
                  <label class="lbl" for="cat_id">title</label>
                  <select class="form-control" id="cat_id" name="cat_id">
                          <option value="" selected></option>
                  @foreach ($categoriesas $cat)
                          <option value="$cat->id">$cat->cat_mame</option>
                  @endforeach
                  </select>
                </div>
    
                <div class="form-group col-md-2">
                  <label class="lbl" for="title">Post title</label>
                  <input type="text" class="form-control" id="title" name="title">
                </div>
                <div class="form-group col-md-2">
                  <label class="lbl" for="content">Post content</label>
                  <textarea class="form-control" id="content" name="content">
                  </textarea >
                </div>
              </div>
              <center>
                <button type="submit">search</button>
              </center>
            </form>
          </div>
    
          <table id="posts">
            <thead>
              <tr>
                <th>__('main.title')</th>
                <th>__('main.post_category')</th>
                <th>__('main.content')</th>
              </tr>
            </thead>
            <tbody>
                  @foreach($details as $detailkey => $detail)
                      <tr>
                          <td>$detail->title</td>
                          <td>$detail->category->cat_name</td>
                          <td>$detail->content</td>
                      </tr>
                  @endforeach
            </tbody>
          </table>
    </div>

控制器

public function index()
    
        $ctegories=  Category::all();
        return view('search')->with('posts', Post::all())->with('ctegories', $ctegories);
    

    public function searchresult(Request $request)
    
        $title= $request->title;
        $content= $request->content;
        $cat_id= $request->cat_id;

        $posts= Post::where('title', 'like', '%' . $title. '%')
        ->whereHas('category', function(Builder $query) use ($sujet_id)
            $query->where('id', $cat_id);
        )
        ->orderBy('created_at','desc')
        ->get();
        //for form dropdown categories
        $categories=  Category::all();

        if(count ($posts) > 0)
        
            //this what i want to change from view to route with those parameters
            return view('searchresult')
            ->withDetails($posts)->withQuery($title)
            ->withCategories($categories);
         else 
            return redirect()->route('index')->with('success','search not found');
        
    

因此,否则该功能可以完美运行,并且我得到了数据 我会感谢你的帮助谢谢你

【问题讨论】:

试试这个:return redirect()->route("")->with() 首先感谢您的回答我已经尝试过这种方法但它不起作用 我认为它必须在路线内(***)但我不知道该怎么做。因为 with() 给我带来了消息和异常,就像我的例子中一样 【参考方案1】:

您应该使用以下方法返回带参数的路由:

return \Redirect::route('nameOfRoute', ['param1'=>'value1','param2'=>'value2',...])->with('message', 'Search found!!!');

【讨论】:

感谢您的回答,能否请您告诉我如何使用我的代码调整此代码,因为这是我遇到的唯一困难我尝试了这种方法,但我无法使用我的参数跨度> @optic4predator1 你没有显示路线。也请详细说明.. 我已经更新了@Amit Senjaliya 的帖子

以上是关于更改返回视图以在 laravel 搜索功能上返回路线的主要内容,如果未能解决你的问题,请参考以下文章

PHP-PDO:我如何将一些值返回到 javascript 中以在视图上呈现?

索引空值以在 DB2 上快速搜索

Laravel 请求在验证失败时不返回修改后的请求

Laravel View Make 返回空白页

Laravel 5 视图缓存

Laravel phpunit 测试控制器,它返回带有数据的视图