如何将刀片中的多种语言的数据以多种语言插入(创建)数据(CRUD)表单到数据库中,并使用LARAVEL MULTILANGUAGE-LOCALIZE将其读出?

时间:2018-11-16 23:59:26

标签: laravel laravel-5 eloquent localization multilingual

我已按照本教程https://mydnic.be/post/how-to-build-an-efficient-and-seo-friendly-multilingual-architecture-for-your-laravel-application中的内容学习laravel多语言和本地化。一切似乎都正常,只不过我想创建一个CRUD,以便以多种语言插入带有标题和内容的帖子,然后将其存储在数据库中,然后在索引刀片中读出。

您能在CREATE的刀片服务器和CREATE和STORE功能的控制器中以这种方式向我展示CRUD的示例吗?如何使它工作?

这是我简单的主要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>

CONTROLLER

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 :(得分:1)

我是本教程的作者。

该实现的全部要点是,您完全不必担心模型语言环境。通过URL“ / en / ...”设置语言环境

因此,如果您像这样向模型存储库URL发出POST请求:

POST /en/post {payload}

您甚至无法使用PostController@store方法之前,将自动设置laravel应用程序的应用程序区域设置。

然后,您可以像平常一样简单地创建模型(例如在您的示例中,这是正确的),并且该模型将与相应的语言环境一起存储。

现在,您的模型最初是使用定义的语言环境创建的,因此您应该能够使用其他语言进行编辑。

因此,您可以转到以下URL:/en/post/:id/edit,然后切换到另一个语言环境:/fr/post/:id/edit,您会注意到所有可翻译字段的输入均为空白。这是正常的,因为该模型的“ fr”翻译还不存在。

因此,您可以在表格上填写'fr'翻译字段,然后保存(更新模型)。并保存翻译。您的模型现已翻译:)

希望这会有所帮助!

PS,您可以在此处https://github.com/mydnic/Laravel-Multilingual-SEO-Example

查看示例代码

答案 1 :(得分:0)

因此,根据本教程,您的帖子表中将有一个列,名为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数组中。

答案 2 :(得分:0)

在这种情况下效果很好:

控制器:

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'
]);