0

我是 laravel 的新手。当我从localization.php 设置默认语言环境并单击我的任何数据列表编辑按钮时,它会将id 变量替换为语言环境值,例如(en/ur/sd)。

然后我从 Localization.php 中删除默认的语言环境参数

生病了缺少参数:关于

网页.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);
        
        
    }
}

AboutController.php 编辑函数

public function edit($id)
    {
       
        $singleRow = About::find($id); 
        $allRows = About::all();
        return view('about', compact('allRows','singleRow'));
    }

应用程序.php

'locale' => 'en',
'fallback_locale' => 'en',

    'available_locales' => [
         'en',
         'sd',
         'ur',
      ],

about.blade.php 单击此处编辑数据时的编辑部分

如果我尝试不使用 app()->getLocale() 并且 locale 参数是从 Localization.php 分配的,我会将 id 替换为选定的区域设置语言,例如 en、sd、ur 在 URL 中给出的任何内容,例如http://127.0.0.1 :8000/en/about/1/edit

第一次尝试使用上面提到的默认语言环境参数

<a href="{{ route('about.edit', ['about' => $about->id]) }}" class="btn btn-primary">Edit</a> 

第二次尝试没有上面提到的语言环境参数

<a href="{{ route('about.edit', ['locale'=> app()->getLocale(), 'about' => $about->id]) }}" class="btn btn-primary">Edit</a> 

这次我从上面提到的 Localization.php 中设置了默认语言环境,并从我的标签中删除了语言环境参数

<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>

在此处输入图像描述

4

1 回答 1

0

本地化.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);
            
            
        }
    }

我收到错误的语言切换器。在 master.blade.php

@foreach (config('app.available_locales') as $locale)
            <li class="dropdown messages-menu">
                <a class="nav-link"
                href="{{ route(\Illuminate\Support\Facades\Route::currentRouteName(), ['locale'=>$locale,0]) }}"
                    @if (app()->getLocale() == $locale) style="font-weight: bold; text-decoration: underline" @endif>{{ strtoupper($locale) }}</a>
            </li>
        @endforeach

在 master.blade.php 中,我将 $locale 设置为 ['locale'=> $locale, 0] 我不知道为什么需要第二个参数,但它工作正常

我已将控制器编辑功能更改为

public function edit($ignore='', $id)
    {
       
        $singleRow = About::find($id); 
        $allRows = About::all();
        return view('about', compact('allRows','singleRow'));
    }

当我点击编辑时,我在这里得到了 id

<a href="{{ route('about.edit', ['about' => $about->id]) }}" class="btn btn-primary">Edit</a> 
于 2021-10-13T20:45:14.150 回答