【发布时间】:2021-11-19 11:28:22
【问题描述】:
我刚刚在 Laravel 版本 8 中安装了一个 Joedixon/Laravel 翻译包。 它显示了单词,但是当我想更新时它不起作用。 我做了文档中所说的所有事情,并且我已经阅读了有关它的这篇文章,但它也没有奏效。 https://github.com/joedixon/laravel-translation/issues/82
注意事项:
1:我把驱动改成数据库了。
2:添加新语言效果很好
3:在添加新翻译时,它会搜索 http://localhost/languages/en 而不是 http://localhost/project_name/languages/en
当我尝试更新一个单词时,它显示 404 not found in the console: 路线:
ticate:sanctum |
| | POST | api/login | | App\Http\Controllers\Auth\AuthController@login | api
|
| | POST | api/register | | App\Http\Controllers\Auth\AuthController@register | api
|
| | GET|HEAD | api/user | | Closure | api
|
| | | | | | App\Http\Middleware\Authenticate:sanctum |
| | GET|HEAD | home | home | App\Http\Controllers\HomeController@index | web
|
| | | | | | App\Http\Middleware\Authenticate |
| | GET|HEAD | languages | languages.index | JoeDixon\Translation\Http\Controllers\LanguageController@index | web
|
| | POST | languages | languages.store | JoeDixon\Translation\Http\Controllers\LanguageController@store | web
|
| | GET|HEAD | languages/create | languages.create | JoeDixon\Translation\Http\Controllers\LanguageController@create | web
|
| | POST | languages/{language} | languages.translations.update | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@update | web
|
| | GET|HEAD | languages/{language}/translations | languages.translations.index | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@index | web
|
| | POST | languages/{language}/translations | languages.translations.store | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@store | web
|
| | GET|HEAD | languages/{language}/translations/create | languages.translations.create | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@create | web
|
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web
语言翻译控制器
<?php
namespace JoeDixon\Translation\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use JoeDixon\Translation\Drivers\Translation;
use JoeDixon\Translation\Http\Requests\TranslationRequest;
class LanguageTranslationController extends Controller
{
private $translation;
public function __construct(Translation $translation)
{
$this->translation = $translation;
}
public function index(Request $request, $language)
{
// dd($this->translation->getSingleTranslationsFor('en'));
if ($request->has('language') && $request->get('language') !== $language) {
return redirect()
->route('languages.translations.index', ['language' => $request->get('language'), 'group' => $request->get('group'), 'filter' => $request->get('filter')]);
}
$languages = $this->translation->allLanguages();
$groups = $this->translation->getGroupsFor(config('app.locale'))->merge('single');
$translations = $this->translation->filterTranslationsFor($language, $request->get('filter'));
if ($request->has('group') && $request->get('group')) {
if ($request->get('group') === 'single') {
$translations = $translations->get('single');
$translations = new Collection(['single' => $translations]);
} else {
$translations = $translations->get('group')->filter(function ($values, $group) use ($request) {
return $group === $request->get('group');
});
$translations = new Collection(['group' => $translations]);
}
}
return view('translation::languages.translations.index', compact('language', 'languages', 'groups', 'translations'));
}
public function create(Request $request, $language)
{
return view('translation::languages.translations.create', compact('language'));
}
public function store(TranslationRequest $request, $language)
{
if ($request->filled('group')) {
$namespace = $request->has('namespace') && $request->get('namespace') ? "{$request->get('namespace')}::" : '';
$this->translation->addGroupTranslation($language, "{$namespace}{$request->get('group')}", $request->get('key'), $request->get('value') ?: '');
} else {
$this->translation->addSingleTranslation($language, 'single', $request->get('key'), $request->get('value') ?: '');
}
return redirect()
->route('languages.translations.index', $language)
->with('success', __('translation::translation.translation_added'));
}
public function update(Request $request, $language)
{
if (! Str::contains($request->get('group'), 'single')) {
$this->translation->addGroupTranslation($language, $request->get('group'), $request->get('key'), $request->get('value') ?: '');
} else {
$this->translation->addSingleTranslation($language, $request->get('group'), $request->get('key'), $request->get('value') ?: '');
}
return ['success' => true];
}
}
路线列表
<?php
Route::group(config('translation.route_group_config') + ['namespace' => 'JoeDixon\\Translation\\Http\\Controllers'], function ($router) {
$router->get(config('translation.ui_url'), 'LanguageController@index')
->name('languages.index');
$router->get(config('translation.ui_url').'/create', 'LanguageController@create')
->name('languages.create');
$router->post(config('translation.ui_url'), 'LanguageController@store')
->name('languages.store');
$router->get(config('translation.ui_url').'/{language}/translations', 'LanguageTranslationController@index')
->name('languages.translations.index');
$router->post(config('translation.ui_url').'/{language}', 'LanguageTranslationController@update')
->name('languages.translations.update');
$router->get(config('translation.ui_url').'/{language}/translations/create', 'LanguageTranslationController@create')
->name('languages.translations.create');
$router->post(config('translation.ui_url').'/{language}/translations', 'LanguageTranslationController@store')
->name('languages.translations.store');
});
【问题讨论】:
-
你使用的是路由模型绑定(RMB)吗?
-
不只是普通路由
-
LanguageTranslationController@update如何获取语言是 findOrfail 吗? -
我已经编辑了问题并添加了 LanguageTranslationsCONtroller
标签: php laravel laravel-artisan