laravel - 在多语言 laravel 上找不到页面错误
问题描述
我在我的网站上使用本地化。本地化在一页上正常工作。当我们重定向到其他页面时,该页面正在使用我们在上一页中选择的语言加载。我们正在更改当前页面上的语言我收到错误“找不到页面”。为什么加载此错误。
这里的 url 更改为http://127.0.0.1:8000/localisation/lang/mal。我需要http://127.0.0.1:8000/localisation/create
layout.mainaster.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
<div id="app">
<div style="background-color: #f8f9fa;">
<nav class="navbar navbar-expand-lg navbar-light bg-light container">
<a href="https://www.mynotepaper.com/" target="_blank"><img src="https://i.imgur.com/hHZjfUq.png"
width="140px;"></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02"
aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarTogglerDemo02">
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@php $locale = session()->get('locale'); @endphp
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
@switch($locale)
@case('us')
<img src="{{asset('img/us.png')}}"> English
@break
@case('mal')
Mlayalam
@break
@case('in')
Hindi
@break
@default
English
@endswitch
<span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="lang/en"> English</a>
<a class="dropdown-item" href="lang/mal"> Mlayalam</a>
<a class="dropdown-item" href="lang/in"> Hindi</a>
</div>
</li>
</ul>
</div>
</nav>
</div>
<main class="py-4">
@yield('content')
</main>
</div>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</body>
</html>
控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App;
use App\Localization;
class LocalizationController extends Controller
{
//
public function index1($locale)
{
App::setLocale($locale);
// store the locale in session so that the middleware can register it
session()->put('locale', $locale);
return redirect()->back();
}
public function index()
{
$data=Localization::get();
return view('localisation.index',[
'localizationdata' =>$data
]);
}
public function create()
{
return view('localisation.create');
}
}
?>
模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Localization extends Model
{
//
use SoftDeletes;
protected $table = 'demo';
protected $primaryKey = 'id';
public $timestamps = true;
protected $dates = ['deleted_at'];
}
创建.blade.php
@extends('layouts.mainmaster')
@section('content')
<div class="row">
<div class="col-lg-12">
<form role="form" action="{{action('LocalizationController@store')}}" method="post" enctype="multipart/form-data">
{{ csrf_field() }}
<!-- START card-->
<div class="card card-default">
<div class="card-header">
<div class="card-title">Create</div>
</div>
<div class="card-body">
<fieldset>
<div class="form-group row">
<label class="col-md-2 col-form-label">{{ __('create.name')}}</label>
<div class="col-md-6">
<input type="text" class="form-control" required="required" name="name" placeholder="{{ __('create.name')}}">
</div>
@if ($errors->has('name'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</fieldset>
<fieldset>
<div class="form-group row">
<label class="col-md-2 col-form-label">{{ __('create.ph')}}</label>
<div class="col-md-6">
<input type="text" class="form-control" required="required" name="ph" placeholder="{{ __('create.ph')}}">
</div>
@if ($errors->has('ph'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('ph') }}</strong>
</span>
@endif
</div>
</fieldset>
<fieldset>
<div class="form-group row">
<label class="col-md-2 col-form-label">{{ __('create.address')}}</label>
<div class="col-md-6">
<input type="text" class="form-control" required="required" name="address" placeholder="{{ __('create.address')}}">
</div>
@if ($errors->has('address'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('address') }}</strong>
</span>
@endif
</div>
</fieldset>
<fieldset>
<div class="form-group row">
<label class="col-md-2 col-form-label">{{ __('create.email')}}</label>
<div class="col-md-6">
<input type="text" class="form-control" required="required" name="email" placeholder="{{ __('create.email')}}">
</div>
@if ($errors->has('email'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</fieldset>
</div>
<div class="card-footer text-center"><button class="btn btn-info" type="submit" value="submit">Create</button>
</div>
</div><!-- END card-->
</form>
</div>
</div><!-- END row-->
@endsection
中间件:
<?php
namespace App\Http\Middleware;
use App;
use Closure;
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (session()->has('locale')) {
App::setLocale(session()->get('locale'));
}
return $next($request);
}
}
路线:
Route::get('lang/{locale}', 'LocalizationController@index1');
Route::resource('localisation','LocalizationController');
解决方案
这个回复有点晚了,但可能会帮助别人。只需要更改您的路线并更新您的视图。
在您的路线中,将您的路线更新为:
Route::get('lang/{locale}', ['as' => 'lang.locale', 'uses' => 'LocalizationController@index1']);
在您看来,您需要更改以更新路线以实际参与控制器。
因此,鉴于将其更新为;
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route ('lang.locale', 'en') }}"> English</a>
<a class="dropdown-item" href="{{ route ('lang.locale', 'mal') }}"> Mlayalam</a>
<a class="dropdown-item" href="{{ route ('lang.locale', 'in') }}"> Hindi</a>
</div>