Я создал веб-сайт 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).
Итак, что мне нужно сделать? .. Я хочу иметь возможность выбирать язык, который я хочу, и все будет переведеноизвлечение языка из массива в базе данных.