【问题标题】:How to load two different views in same file using one function in laravel如何使用 laravel 中的一个函数在同一个文件中加载两个不同的视图
【发布时间】:2019-06-06 19:59:50
【问题描述】:

我有一个视图,它具有用于选择搜索参数的表单,例如按类别搜索,我正在使用函数名称 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')

【问题讨论】:

  • 向我们展示一些代码,以便我们更好地帮助您:)
  • 我已经更新问题请回复
  • 也向我们展示show_categories_and_form刀片。
  • :) 你在吗
  • 你想在你的视图中哪里使用get_record_as_per_category的数据?

标签: laravel laravel-blade


【解决方案1】:

有多种方法可以按照您的意愿进行操作。

您可以重新加载整个表单,这意味着每次都重新加载类别,以及同一函数中的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

【讨论】:

  • 我在寻找类似的东西 $this->load->view('head'); $this->load->view('content'); $this->load->view('foot');就像我们在 codeigniter 中所做的一样
  • 这很简单,不是吗。有没有这样的
  • 是的,这正是上面的 get_form_record() 函数所做的。它仅加载所选记录的部分视图。 Something 必须在类别选择之后调用控制器,因此您可以选择不使用 ajax 一次完成所有操作(我展示的第一个选项),或者最好通过 ajax 调用仅加载内容.我相信上面的答案正是您所要求的。
【解决方案2】:

首先尝试检查 $b。尝试返回它以查看结果。

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

如果不为空,则错误是$b 的结果。 我假设 $a 包含对象,同时 $b 包含数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2020-05-26
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多