我一直试图了解如何像多语言环境一样访问多国网站,以便根据用户的位置将其重定向到他的国家/地区专用列表。
我正在学习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
的短代码USA
,United Kingdom
的短代码UK
,Australia
的短代码{ {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
。如何显示所有位置的普通网站。我需要指定组外的路由吗?
以便根据用户位置列出该国家/地区的正确专业人员。
答案 0 :(得分:0)
通过将以下内容添加到App \ Http \ Kernel.php中的routeMiddleware中来解决该问题
'country' => \App\Http\Middleware\CountryMiddleware::class,
我已经在CountryMiddleware中更改了以下代码
if ($country === null) {
return redirect('/USA');
}
因此默认位置为美国,位置不正确或丢失的任何用户都将被重定向到美国