Laravel 5.7 как я могу заполнить форму :: выберите из моего контроллера - PullRequest
0 голосов
/ 15 октября 2019

Я видел похожие вопросы и ответы на них, но ни один из них не работал до сих пор для моего случая. Я думаю, что эта проблема проста, но я не могу найти решение, потому что я пробовал несколько способов заполнить свой выпадающий список безрезультатно. Это мой контроллер:

    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 будет строкой, объектомдано (View: D: \ web \ app \ MIS \ resources \ views \ pages \ provinces.blade.php)

Чтобы упомянуть только два из различных способов, которые я до сих пор тестировал. Кажется, у представления нет способа получить массив от контроллера.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете настроить контроллер так, чтобы он передавал данные с более информативным именем и в правильном формате для 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 в качестве списка с ключом 'провинция_код':

<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 Docs - HTML 6.x - раскрывающиеся списки Form::select()

...