如何使用Laravel中的一个功能在同一文件中加载两个不同的视图

时间:2019-01-11 21:26:51

标签: laravel laravel-blade

我有一个视图,该视图具有用于选择搜索参数(例如按类别搜索)的形式,我正在使用功能名称search_by_category()加载该视图。此函数获取类别并将其传递给视图,以便视图可以在下拉列表中填充所有类别。该表单将转到一个新的提交函数,并且该函数将按类别进行记录,但是我将失去该新函数中的搜索表单,如何在一个视图中将两个表单放在一起。

代码:

public function select_by_category()
{
   $a = getcategories();
   return view('show_categories_and_form', $a);
}

public function get_form_record(Request $request)
{
   $a = $request->input('category_id');
   $b = get_record_as_per_category($a);

   return view('show_categories_and_form', $b);
}

如果我加载view('show_categories_and_form', $b),它将不会显示类别,还是我必须在此函数中再次获取类别?

   @include('header_file')


  <form method="post" action="{{ URL::to('/get_form_record') }}">
    <!-- <div class="form-group">             
          <label for="name">Search By Link:</label>
          <input type="text" class="form-control" name="link"/>
      </div> -->
      <div class="form-group">
      @csrf
          <label for="price">Search By Category:</label>
          <select class="form-control" name="category">
          <option value="">Select Category</option>
          @foreach($getCategories as $getcats)
          <option value="{{$getcats->id}}">{{$getcats->category_name}} </option>
          @endforeach
          </select>
      </div>         

      <button type="submit" class="btn btn-primary">Search</button>
  </form>

        @include('footer_file')

2 个答案:

答案 0 :(得分:0)

尝试先检查$ b。尝试将其返回以查看结果。

如果为空,则错误是来自get_record_as_per_category();

如果它不为空,则错误是由$ b的结果引起的。 我假设$ a包含对象,而$ b包含数组。

答案 1 :(得分:0)

有多种方法可以实现所需的效果。

您可以重新加载整个表单,这意味着每次都重新加载类别以及同一功能中的get_record_as_per_category()。这将以一种视图提供给您,并且是最简单的概念。

您还可以加载每条记录(所有类别),并从头开始将其发送到页面 ,以及上面示例代码中已经存在的所有类别。然后,当用户更改类别时,您可以使用JavaScript / jQuery隐藏所有不正确的记录,并仅显示所选类别的正确记录。

我认为与您想要的内容最接近的方法是再拥有一个“包含”文件(就像您对页眉和页脚所做的那样)。因此,顶部将保持与您现在拥有的相同-相同的形式。然后,在您的类别表单和页脚之间,包括这个新部分……我们称其为selected_records。当用户更改类别时,您只需要通过ajax调用重新加载表单的selected_records部分。

这将是这样的:

@include('header_file')

<form method="post" action="{{ URL::to('/get_form_record') }}">
    //  Your code as above
</form>

<div id=chosen_guts>
   @include('chosen_records')
</div>

@include('footer_file')

<script>
  //pseudo code
  ajax{
    call to get_form_record();
    success(successHtml):
      $("#chosen_guts").html(successHtml); 
  }
</script>

然后,因为您已经为选定的记录创建了一个视图,所以您可以轻松地用正确的记录仅捕获该视图以返回到ajax调用:

public function get_form_record(Request $request)
{
   $a = $request->input('category_id');
   $b = get_record_as_per_category($a);

   // for the ajax call, we just return the guts, not the form
   return view('chosen_records', $b);
}

对于第一个视图,从第一次显示该页面开始,您需要确定是否要为“默认”类别包括一组记录以显示在selected_records部分中。如果是这样,则在初始函数select_by_category()中,您需要包括调用以获取这些记录:

$b = get_record_as_per_category($someDefaultCategory);

很多选择,取决于您的适应程度。

HTH