私はlaravelが初めてです。localization.php からデフォルトのロケールを設定し、データ リストの編集ボタンのいずれかをクリックすると、id 変数が (en/ur/sd) のようなロケール値に置き換えられます。
次に、Localization.php からデフォルトのロケール パラメータを削除します。
ill get Missing parameter: about
web.php
Route::group([
'prefix' => '{locale}',
'where' => ['locale' => '[a-zA-Z]{2}'],
'middleware' => 'Localization'
], function() {
Route::get('/', function () {
return redirect(route('home'));
});
Route::resource('/about', AboutController::class)->middleware('auth');
});
カーネル.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
// Permission
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
'Localization' => \App\Http\Middleware\Localization::class,
];
ローカリゼーション.php
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
URL::defaults(['locale' => $request->segment(1)]);
app()->setLocale($request->segment(1));
return $next($request);
}
}
Controller.php編集機能について
public function edit($id)
{
$singleRow = About::find($id);
$allRows = About::all();
return view('about', compact('allRows','singleRow'));
}
app.php
'locale' => 'en',
'fallback_locale' => 'en',
'available_locales' => [
'en',
'sd',
'ur',
],
about.blade.php 編集データのここをクリックすると編集セクション
app()->getLocale() なしで試してみて、locale パラメータが Localization.php から割り当てられている場合、ID を en、sd、ur などの選択されたロケール言語として置き換えますhttp://127.0.0.1のような URL で指定されたものは何でも:8000/ja/about/1/編集
上記のデフォルトのロケールパラメータで最初の試行
<a href="{{ route('about.edit', ['about' => $about->id]) }}" class="btn btn-primary">Edit</a>
上記の locale パラメーターなしで 2 回目の試行
<a href="{{ route('about.edit', ['locale'=> app()->getLocale(), 'about' => $about->id]) }}" class="btn btn-primary">Edit</a>
今回は、上記の Localization.php からデフォルトのロケールを設定し、タグから locale パラメータを削除しました
<a href="{{ route('about.edit', ['about' => $about->id]) }}" class="btn btn-primary">Edit</a>
編集ボタンをクリックすると、ブラウザにこれが表示されます
戻り値を dd に変更
public function edit($id)
{
dd($id);
$singleRow = About::find($id);
$allRows = About::all();
return view('about', compact('allRows','singleRow'));
}
今回は、Localization.php の locale パラメータについてコメントし、タグに locale パラメータを追加しました。
<a href="{{ route('about.edit', ['locale'=> app()->getLocale(), 'about' => $about->id]) }}" class="btn btn-primary">Edit</a>