Как вставить (создать) ФОРМУ данных (CRUD) в блейд на нескольких языках в базу данных и прочитать ее с помощью LARAVEL MULTILANGUAGE - LOCALIZE? - PullRequest
0 голосов
/ 17 ноября 2018

Я следовал этому уроку (https://mydnic.be/post/how-to-build-an-efficient-and-seo-friendly-multilingual-architecture-for-your-laravel-application) о мультиязычности и локализации laravel. Все выглядит нормально, кроме того, что я хочу СОЗДАТЬ CRUD для вставки этих постов с заголовком и контентом на нескольких языках - и СОХРАНИТЬ егов базе данных - и затем прочитать его в блейде индекса.

Можете ли вы показать мне пример CRUD таким образом в блейде для CREATE и в контроллере для функций CREATE и STORE. Как заставить это работать?

Это мой простой основной CRUD, как расширить его, чтобы иметь возможность создавать и хранить на нескольких языках при создании. И как расширить контроллер для хранения на нескольких языках при использовании этого переводимого пакета из учебного руководства выше (ссылка).

CRUD:

<form method="POST" action="/posts">
  @csrf
  <div class="form-group">
    <label for="title">Title</label>
    <input type="text" class="form-control" id="title" name="title">
  </div>
 <div class="form-group">
    <label for="content">Content</label>
    <textarea id="content" name="content" class="form-control"></textarea>
  </div>

  <div class="form-group">
    <button type="submit" class="btn btn-primary">Publish</button>
  </div>
</form>

КОНТРОЛЛЕР

public function store(Request $request)

    {

        $post = Post::all();

        $this->validate(request(), [

            'title' => 'required',
            'content' => 'required'

        ]);

        $post = new Post;

        $post->title = $request->title;
        $post->content = $request->content;

        $post->save();

          return redirect('/');

СПАСИБО :))

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

Я являюсь автором учебника.

Весь смысл этой реализации в том, что вам вообще не нужно беспокоиться о локали модели.Локаль задается через URL-адрес "/en/..."

. Поэтому, если вы отправляете запрос POST на URL-адрес магазина модели, например:

POST /en/post {payload}

Локаль приложения вашегоПриложение laravel будет автоматически настроено еще до того, как вы достигнете метода PostController@store.

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

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

Таким образом, вы можете перейти по этому URL: /en/post/:id/edit, затем переключитесь на другую локаль: /fr/post/:id/edit, и вы заметите, что все вводимые поля являются пустыми.Это нормально, потому что перевод 'fr' этой модели еще не существует.

Таким образом, вы можете заполнить форму с переведенным полем 'fr', а затем сохранить (обновить модель).И перевод будет сохранен.Ваша модель теперь переведена:)

Надеюсь, это поможет!

PS Вы можете посмотреть пример кода здесь https://github.com/mydnic/Laravel-Multilingual-SEO-Example

0 голосов
/ 17 ноября 2018

ЭТО РАБОТАЕТ ХОРОШО В ЭТОЙ СИТУАЦИИ:

КОНТРОЛЛЕР:

public function create()
   {

       return view('services.new');

   }

   public function store(Request $request)
   {

  $service = new Service();

   $service->save();
$this->validate($request, [

           'title2' => 'required|max:350',
           'content2' => 'required'
         ]);

     foreach (['en', 'bs'] as $locale) {

           $service->translateOrNew('en')->title = $request->title;
           $service->translateOrNew('en')->content = $request->content; 
           $service->translateOrNew('bs')->title = $request->title2;
           $service->translateOrNew('bs')->content = $request->content2; 

       }


       $service->translateOrNew('en')->title = $request->title;
       $service->translateOrNew('en')->content = $request->content;  
       $service->translateOrNew('bs')->title = $request->title2;
       $service->translateOrNew('bs')->content = $request->content2; 
       // $article->translateOrNew('en')->text = ['texten'];
       // $article->translateOrNew('ka')->name = ['nameka'];
       // $article->translateOrNew('ka')->text = ['textka'];






    // return $article;
    // exit();

   $service->save();

  return redirect()->back();

}

Лезвие для создания + CSS (в фоновом режиме):

<form action="{{route('service.store')}}" method="POST">
     {{csrf_field()}}





    <div class="tabset">
  <!-- Tab 1 -->
  <input type="radio" name="tabset" class="radio1" id="tab1" aria-controls="marzen" checked>
  <label for="tab1">Bosanski</label>
  <!-- Tab 2 -->
  <input type="radio" class="radio1" name="tabset" id="tab2" aria-controls="rauchbier">
  <label for="tab2">Engleski</label>
  {{-- <!-- Tab 3 -->
  <input type="radio" name="tabset" id="tab3" aria-controls="dunkles">
  <label for="tab3">Dunkles Bock</label> --}}

  <div class="tab-panels">
    <section id="marzen" class="tab-panel">
      <h2>Dodaj novu uslugu</h2>
        <div class="form-group">
<lebal>Naslov*(bs)</lebal>
<input type="text" class="form-control" name="title2">
</div>

  <div class="form-group">
<lebal>Opis*(bs)</lebal>
<textarea class="form-control" name="content2"></textarea>
</div>
  </section>
    <section id="rauchbier" class="tab-panel">
      <h2>Dodaj novu uslugu</h2>
         <div class="form-group">
<lebal>Title (EN)</lebal>
<input type="text" class="form-control" name="title">
</div>

  <div class="form-group">
<lebal>Description (EN)</lebal>
<textarea class="form-control" name="content"></textarea>
</div>
    </section>
    <section id="dunkles" class="tab-panel">
      <h2>Tab3</h2>

    </section>
  </div>
     <input type="submit" value="Submit">

        </form>

WEB.PHP:

Route::post('/create',[
 'uses' => 'ServicesController@store',
 'as' => 'service.store'
]);
0 голосов
/ 17 ноября 2018

Итак, основываясь на этом уроке, в вашей таблице сообщений будет столбец с именем locale Затем, по вашему мнению, вы можете добавить поле выбора, из которого вы можете выбрать локаль

<div class="form-group">
   <label for="locale">Locale</label>
   <select id="locale" name="locale" class="form-control">
       <option value="en">English</option>
       <option value="fr">French</option>
   </select>
</div>

Затем в вашем контроллере добавьте следующую строку:

$post->locale = $request->locale;

Поместите locale в ваш массив $fillable в модели поста.

...