首页 > 解决方案 > Laravel 5.7 如何从我的控制器中填充表单::select

问题描述

我见过类似的问题和他们的答案,但到目前为止,他们都没有为我的案例工作。我想这个问题很简单,但我找不到解决方案,因为我尝试了几种方法来填充我的下拉列表无济于事。这是我的控制器:

    namespace MIS\Http\Controllers;

    use MIS\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Support\Facades\View;
    use Response;

    class pagesController extends Controller
    {

       public function provinces()
       {
          $data = DB::table('provinces')->select('province_code', 'province_name_english')->get();
          return view('pages/provinces', 'data');
       }
    }

这是我的视图代码:

   <div class="content">
      {!! Form::open(['url' => '']) !!}
      <div class="title m-b-md">Address</div>
      {!! Form::select("provinceList", $data, "Siemreab", ['class' => 'form-control']) !!}
      <select id="districtList"></select><br />
      <select id="communeList"></select><br />
      <select id="villageList"></select><br />
      {!! Form::close() !!}
   </div>

这一直给我这样的错误:-array_merge():参数 #2 不是数组(对于那个控制器/动作)

如果我将方法更改为:

return view('pages/provinces')->with('data', $data); 

我收到此错误:

htmlspecialchars() 期望参数 1 是字符串,给定对象(视图:D:\web\app\MIS\resources\views\pages\provinces.blade.php)

仅提及我迄今为止测试过的两种不同方式。我似乎没有办法让视图从控制器接收数组。

任何帮助表示赞赏。

标签: laravellaravel-bladelaravelcollective

解决方案


您可以调整控制器以使用更具描述性的名称和正确的格式传递数据Form::select(...)

namespace MIS\Http\Controllers;

use Illuminate\Support\Facades\DB;

class pagesController extends Controller
{

   public function provinces()
   {
      // key by province_code
      $provinces = DB::table('provinces')
          ->pluck('province_name_english', 'province_code')
          ->toArray(); // if you want an array

      return view('pages.provinces', [
          'provinces' => $provinces,
          'default_province_code' => ...,
      ]);
   }
}

您的视图可以$provinces用作由“province_code”键入的列表:

<div class="content">
    {!! Form::open(['url' => 'somewhere']) !!}
    <div class="title m-b-md">Address</div>
    {!! Form::select("provinceList", $provinces, $default_province_code, ['class' => 'form-control']) !!}
    <select id="districtList"></select><br />
    <select id="communeList"></select><br />
    <select id="villageList"></select><br />
    {!! Form::close() !!}
</div>

Laravel 6.x 文档 - 视图 - 将数据传递给视图 view()

Laravel 6.x 文档 - 数据库 - 查询生成器 - 检索结果 - 检索列值列表 pluck()

LaravelCollective 文档 - HTML 6.x - 下拉列表 Form::select()


推荐阅读