Laravel Localization с базой данных: "unserialize (): ошибка по смещению 31 из 54 байтов - PullRequest
0 голосов
/ 19 февраля 2019

Я создал веб-сайт Survey, а затем я хочу использовать динамическую локализацию, мне нужно хранить все на двух языках в базе данных.Так что если пользователь выбрал «EN» в правом верхнем углу, он должен отображать все на английском языке.Я использовал unserialize и serialize, но продолжаю получать это сообщение об ошибке: «unserialize (): ошибка со смещением 31 из 54 байтов ..

Чтобы упростить понимание, это мой взгляд на создание нового опроса,как вы видите, у меня будет 4 поля, два для EN и два для AR.

      <form method="POST" action="create" id="boolean">
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <div class="row">

          @foreach(LaravelLocalization::getSupportedLocales() as $key => $value)

          <div class="input-field col s12">
            <input name="title[{{ $key }}]" id="title" type="text" placeholder="title in {{ $value['name']}}">
            <label for="title">Survey Title</label>
          </div>
          <div class="input-field col s12">
            <textarea name="description[{{ $key }}]" id="description" class="materialize-textarea" placeholder="description in {{ $value['name']}}"></textarea>
            <label for="description">Description</label>
          </div>
            @endforeach
          <div class="input-field col s12">
          <button class="btn waves-effect waves-light">Submit</button>
          </div>
        </div>
        </form>

В SurveyController.php я использовал serialize при хранении значений в виде массива на двух языках.

  public function create(Request $request, Survey $survey)
  {
    $survey->title= serialize($request->title);
    $survey->description= serialize($request->description);
    $survey ->save();
    return Redirect::to("/survey/{$survey->id}");
  }

Итак, данные будут выглядеть следующим образом:

a:2:{s:2:"en";s:11:"Education";s:2:"ar";s:16:"التعليم";}

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

Это представление, которое будет отображать заголовок опроса.

                  @forelse ($surveys as $survey)
                    <li class="collection-item">
                      <div>
                          {{ link_to_route('detail.survey', unserialize ($survey->title)[LaravelLocalization::getCurrentLocale()], ['id'=>$survey->id])}}
                          <a href="survey/view/{{ $survey->id }}" title="Take Survey" class="secondary-content"><i class="material-icons">send</i></a>
                          <a href="survey/{{$survey->id}}/edit" title="Edit Survey" class="secondary-content"><i class="material-icons">edit</i></a>
                          <a href="survey/answers/{{ $survey->id }}" title="View Survey Answers" class="secondary-content"><i class="material-icons">textsms</i></a>
                      </div>
                      </li>
                  @empty
                      <p class="flow-text center-align">Nothing to show</p>
                  @endforelse
              </ul>

Я изменил эту строку:

 {{ link_to_route('detail.survey', $survey->title, ['id'=>$survey->id])}}

на эту:

{{ link_to_route('detail.survey', unserialize ($survey->title)[LaravelLocalization::getCurrentLocale()], ['id'=>$survey->id])}}

но не работает это сообщение об ошибке: (https://i.imgur.com/jYkDa9u.png). Если я использую это:

 {{ link_to_route('detail.survey', $survey->title, ['id'=>$survey->id])}

^ Я получу это как результат: (https://i.imgur.com/TxEcxa2.png).

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

...