Laravel ReflectionException(-1)类国家不存在

时间:2018-08-12 18:18:26

标签: laravel laravel-5.6

我一直试图了解如何像多语言环境一样访问多国网站,以便根据用户的位置将其重定向到他的国家/地区专用列表。

我正在学习laravel,根据我的学习,我尝试了如下所示的操作,但显示错误,需要有人纠正我才能继续学习。

App \ Models \ Country.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Country extends Model
{
    protected $table = 'countries';
}

routes \ web.php

Route::group(['prefix' => '{country}', 'middleware' => 'country'], function(){
  Route::get('/', 'Frontend\PagesController@index')->name('welcome');
});

App \ Http \ Middleware \ CountryMiddleware.php

<?php

namespace App\Http\Middleware;

use App\Models\Country;
use Closure;
use Request;
use Route;

class CountryMiddleware
{
    public function handle($request, Closure $next)
    {
        $countryShortcode = $request->route('country');
           $routeName = $request->route()->getName();
           $routeParameters = $request->route()->parameters();
           if ($request->session()->has('redirect_to_country')) {
               $redirectTo = $request->session()->get('redirect_to_country');
               if ($country === $redirectTo) {
                   $request->session()->forget('redirect_to_country');
               } else {
                   $routeParameters['country'] = $redirectTo;
                   return redirect()->route($routeName, $routeParameters);
               }
           }
           $country = Country::where('country_shortcode', '=', $countryShortcode)
                      ->where('is_active', '=', 1)->first();
           if ($country === null) {
               return redirect('/');
           }
           $request->session()->put('country', $country);
           $request->session()->save();
           return $next($request);
        }
}

迁移:2018_08_12_225010_create_countries_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCountriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('countries', function (Blueprint $table) {
            $table->increments('id');
            $table->string('country_name');
            $table->string('country_shortcode')->unique();
            $table->tinyinteger('is_active');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('countries');
    }
}

我在数据库中创建了三个国家,即,United States的短代码USAUnited Kingdom的短代码UKAustralia的短代码{ {1}}。

我去AUS时说:

  找不到

页面。   当我去www.example.com时说:

     

ReflectionException(-1)   班级国家不存在

1-如何解决这个问题?

2-如何自动检测用户的位置代码并重定向到他们的位置路线?例如从美国到www.example.com/USA的用户。

3-在我的控制器中,我想从路线获取国家/地区代码并执行以下操作:

www.example.com/USA

4-对于$code = $request->route('country'); Professionals::where('short_code', $code)->latest()->paginate(10); 页面显示的www.example.com。如何显示所有位置的普通网站。我需要指定组外的路由吗?

以便根据用户位置列出该国家/地区的正确专业人员。

1 个答案:

答案 0 :(得分:0)

通过将以下内容添加到App \ Http \ Kernel.php中的routeMiddleware中来解决该问题

'country' => \App\Http\Middleware\CountryMiddleware::class,

我已经在CountryMiddleware中更改了以下代码

if ($country === null) {
               return redirect('/USA');
           }

因此默认位置为美国,位置不正确或丢失的任何用户都将被重定向到美国