php - Laravel 5,子域路由,带可选参数

标签 php laravel laravel-5 laravel-routing laravel-5.1

我刚刚开始学习 Laravel 5 并尝试创建多语言网站,并希望为该语言使用不同的域,因此 en.example.app 指向英语版本,es.example.app 指向西类牙语等等。我使用路由组,下面是我的代码。

Route::group(['domain' => '{domain}.example.app'], function() {
    Route::get('/', function () {
        return view('index');
    });
    Route::get('test', function(){
        return view('index');
    });
});

它适用于除 example.app 之外的所有域。不幸的是,可选参数 {domain?} 不适用于子域,我不想像这样复制路由。

Route::get('/', function () {
    return view('index');
});
Route::get('test', function(){
    return view('index');
});

Route::group(['domain' => '{domain}.example.app'], function() {
    Route::get('/', function () {
        return view('index');
    });
    Route::get('test', function(){
        return view('index');
    });
});

有人可以建议如何避免这种重复吗?

最佳答案

那是因为 {domain}.example.appexample.app 之前需要一个 .

您可以删除 . 并为 domain 参数添加约束,使其最多有 1 个 .

所以代码看起来像

Route::group(['domain' => '{domain}example.app'], function($group) {
    Route::get('/', function ($domain) {
        //code
    }) ;
    // more routes

    foreach($group->getRoutes() as $route){
        $route->where('domain', '[a-z]+\.{0,1}');
    }

});

附言: 我不知道我的正则表达式是否正确。

关于php - Laravel 5,子域路由,带可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171575/

相关文章:

php - Composer - 请求的包 phpgangsta/googleauthenticator 1.0.1 作为 [dev-master] 存在,但这些被您的约束拒绝

php - 在此服务器上找不到请求的 URL/ProjectName/users。拉维

javascript - PHP/JavaScript : See if someone is visiting the same url

php - Laravel 5 : in_array() expects parameter 2 to be array, 给定的对象

php - 如何测试验证错误在 laravel 单元测试中抛出确切的错误和消息

PHP Laravel : How to Avoid duplicate data while importing xl/csv into mysql?

php - 尝试创建 MySQL 数据库给出 HTTP/404 请求的 URL 别名未定义

php - 在 Windows 10 和 PHP 7.3 中安装 AMQP

php - 与 Doctrine 得到相同的结果

php - 将数据从中间件传递到 View 或以其他方式在每个页面中显示特定数据