代码之家  ›  专栏  ›  技术社区  ›  Tienus McVinger

在laravel中使用多个翻译文件时出现htmlspecialchars错误

  •  0
  • Tienus McVinger  · 技术社区  · 5 年前

    我目前正在为我的laravel项目做翻译工作。一切正常,但只有当我只处理一个翻译文件时。

    我正努力使事情井然有序,为此,我有一个想法,有一个翻译文件的侧边范围内的组件(登录/注销链接,返回按钮,诸如此类的东西),然后介绍其他翻译文件更具体的事情,如翻译组件上找到你的个人资料的仪表盘。

    例如,以下是我的英文翻译文件:

    通用.php

    return [
        "login" => "Login",
        "register" => "Register",
        "logout" => "Logout",
        "back" => "Back",
        "postBy" => "Posted by",
        "name" => "Name",
        "email" => "E-Mail Address",
        "pass" => "Password",
        "confirmPass" => "Confirm Password",
        "rememberMe" => "Remember Me", 
        "forgotPass" => "Forgot Your Password?",
    ];
    

    仪表板.php

    <?php
    
    return [
        "title" => "Your Messages",
        "header" => "Message",
        "create" => "Add Message",
        "edit" => "Edit",
        "delete" => "Delete",
    ];
    

    我已经得到了这样做的错误,甚至没有在我的生活中使用它 文件。我得到的错误是:

    ErrorException(E\u ERROR)htmlspecialchars()要求参数1为 C: \xampp\htdocs\messageboard\resources\views\版面\app.blade.php文件) C: \xampp\htdocs\messageboard\resources\views\版面\app.blade.php文件)

    我甚至没试过用这样的话来称呼它 {{ __('dashboard.title') }}

    根据请求,以下是导致错误的视图。无论加载哪个页面,我都会遇到相同的错误,所以我假设它就是这个视图,因为它基本上是在其他视图中包含和扩展的。

    <!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>
    
        <!-- Scripts -->
        <script src="{{ asset('js/app.js') }}" defer></script>
    
        <!-- Fonts -->
        <link rel="dns-prefetch" href="//fonts.gstatic.com">
        <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
    
        <!-- Styles -->
        <link href="{{ asset('css/app.css') }}" rel="stylesheet">
        <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
    
    </head>
    <body>
        <div id="app">
            <nav class="navbar navbar-expand-md navbar-light navbar-laravel">
                <div class="container">
                    <a class="navbar-brand" href="{{ url('/') }}">
                        <i class="far fa-envelope"></i>
                        {{ config('app.name', 'Messageboard') }}
                    </a>
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
                        <span class="navbar-toggler-icon"></span>
                    </button>
    
                    <div class="collapse navbar-collapse" id="navbarSupportedContent">
                        <!-- Left Side Of Navbar -->
                        <ul class="navbar-nav mr-auto">
    
                        </ul>
    
                        <!-- Right Side Of Navbar -->
                        <ul class="navbar-nav ml-auto">
                            <!-- Authentication Links -->
                            @guest
                                <li class="nav-item">
                                    <a class="nav-link" href="{{ route('login') }}">{{ __('general.login') }}</a>
                                </li>
                                @if (Route::has('register'))
                                    <li class="nav-item">
                                        <a class="nav-link" href="{{ route('register') }}">{{ __('general.register') }}</a>
                                    </li>
                                @endif
                            @else
                                <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>
                                        {{ Auth::user()->name }} <span class="caret"></span>
                                    </a>
    
                                    <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
                                        <a class="dropdown-item" href="/dashboard">{{ __('Dashboard') }}</a>
                                        <a class="dropdown-item" href="{{ route('logout') }}"
                                           onclick="event.preventDefault();
                                                         document.getElementById('logout-form').submit();">
                                            {{ __('general.logout') }}
                                        </a>
    
                                        <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                                            @csrf
                                        </form>
                                    </div>
                                </li>
                            @endguest
                        </ul>
                    </div>
                </div>
            </nav>
    
            <div class="container">
                <main class="py-4">
                    @include('inc.statusmessages')
                    @yield('content')
                </main>
            </div>    
        </div>
    </body>
    </html>
    

    控制器:

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Message;
    use App\User;
    use Auth;
    
    class MessagesController extends Controller
    {
    
        public function __construct(){
            $this->middleware('auth', [
                'except' => [
                    'index',
                    'show'
                ]
            ]);
        }
        /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
         */
        public function index()
        {
            $messages = Message::orderBy('created_at', 'desc')->get();
            return view('messages')->with('messages', $messages);
        }
    
        /**
         * Show the form for creating a new resource.
         *
         * @return \Illuminate\Http\Response
         */
        public function create()
        {
            return view('createmessage');
        }
    
        /**
         * Store a newly created resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        public function store(Request $request)
        {
            $this->validate($request, [
                'title' => 'required',
                'body' => 'required|min:15|max:500'
            ]);
    
    
            // Create Message
            $message = new Message;
            $message->title = $request->input('title');
            $message->body = $request->input('body');
            $message->status = 100;
            $message->user_id = auth()->user()->id;
    
            $message->save();
    
            return redirect('/dashboard')->with('success', 'Message Created');
        }
    
        /**
         * Display the specified resource.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function show($id)
        {
            $message = Message::findOrFail($id);       
            $user = User::findOrFail($message->user_id); 
    
            $messageData = [
                'message' => $message,
                'user' => $user
            ];
    
            return view('showmessage')->with($messageData);
        }
    
        /**
         * Show the form for editing the specified resource.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function edit($id)
        {
            $userId = 0;
            $message = Message::findOrFail($id);
    
            if (Auth::check())
            {
                // The user is logged in...
                $userId = Auth::user()->id;
            }
    
            if((int)$userId !== (int)$message->user_id) {
                return "Poster ID: ".$message->user_id.", User ID: ".$userId;
            }
    
            return view('editmessage')->with('message', $message);
        }
    
        /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function update(Request $request, $id)
        {
            $this->validate($request, [
                'title' => 'required',
                'body' => 'required|min:15|max:500'
            ]);
    
            $message = Message::find($id);
            $message->title = $request->input('title');
            $message->body = $request->input('body');
            $message->status = 100;
            $message->user_id = auth()->user()->id;
    
            $message->save();
    
            return redirect('/dashboard')->with('success', 'Message Updated');
        }
    
        /**
         * Remove the specified resource from storage.
         *
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function destroy($id)
        {
            $message = Message::find($id);
            $message->delete();
    
            return redirect('/dashboard')->with('success', 'Message Removed');
        }
    }
    

    任何帮助都将不胜感激。我希望我足够清楚,如果不清楚请告诉我。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Travis Britz    5 年前

    正如@Magnus Eriksson所指出的,这是因为你在使用 {{ __('Dashboard') }} 有一个 dashboard.php 翻译文件。

    这个 __() 当没有匹配的翻译键时,翻译助手通常会返回它给定的字符串,但在这种情况下 找到翻译文件。因为您没有使用文件中的特定密钥,例如 dashboard.title ,它将从文件返回完整的翻译数组,然后将其提供给 htmlentities() 渲染刀片视图时。