如何以多种语言将 blade 中的数据 (CRUD) FORM 插入(创建)到数据库中并使用 LARAVEL MULTILANGUAGE - LOCALIZE 将其读出?
How to insert (create) data (CRUD) FORM in blade in multiple languages into database and read it out with LARAVEL MULTILANGUAGE - LOCALIZE?
我已遵循本教程 (https://mydnic.be/post/how-to-build-an-efficient-and-seo-friendly-multilingual-architecture-for-your-laravel-application) 关于 laravel 多语言和本地化。一切似乎都很好,除了我想创建一个 CRUD 以插入带有多种语言标题和内容的帖子 - 并将其存储在数据库中 - 然后在索引 blade.
中读出
你能在 blade 中为 CREATE 和在控制器中为 CREATE 和 STORE 功能展示一个这样的 CRUD 示例吗?如何让它发挥作用?
这是我简单的主要CRUD,如何扩展它以在创建时能够创建并存储为多种语言。
以及如何在使用上面教程中的这个可翻译包时扩展控制器以多种语言存储 (link)。
增删改查:
<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('/');
谢谢 :)
因此,根据教程,您的 post 中会有一个名为 locale
的列 table
然后在您的视图中,您可以添加一个 select 字段,您可以从中选择语言环境
<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
放入 post 模型中的 $fillable
数组。
我是教程的作者。
该实现的全部意义在于您根本不必担心模型区域设置。区域设置通过 URL "/en/..."
因此,如果您像这样向模型商店 URL 发出 POST 请求:
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
在这种情况下效果很好:
控制器:
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();
}
BLADE FOR CREATE + 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'
]);
我已遵循本教程 (https://mydnic.be/post/how-to-build-an-efficient-and-seo-friendly-multilingual-architecture-for-your-laravel-application) 关于 laravel 多语言和本地化。一切似乎都很好,除了我想创建一个 CRUD 以插入带有多种语言标题和内容的帖子 - 并将其存储在数据库中 - 然后在索引 blade.
中读出你能在 blade 中为 CREATE 和在控制器中为 CREATE 和 STORE 功能展示一个这样的 CRUD 示例吗?如何让它发挥作用?
这是我简单的主要CRUD,如何扩展它以在创建时能够创建并存储为多种语言。 以及如何在使用上面教程中的这个可翻译包时扩展控制器以多种语言存储 (link)。
增删改查:
<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('/');
谢谢 :)
因此,根据教程,您的 post 中会有一个名为 locale
的列 table
然后在您的视图中,您可以添加一个 select 字段,您可以从中选择语言环境
<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
放入 post 模型中的 $fillable
数组。
我是教程的作者。
该实现的全部意义在于您根本不必担心模型区域设置。区域设置通过 URL "/en/..."
因此,如果您像这样向模型商店 URL 发出 POST 请求:
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
在这种情况下效果很好:
控制器:
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();
}
BLADE FOR CREATE + 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'
]);