【问题标题】:Can I use Regexp in Route::group without unnecessary parameters? Laravel5我可以在没有不必要参数的情况下在 Route::group 中使用 Regexp 吗? Laravel5
【发布时间】:2015-12-17 01:31:54
【问题描述】:

我可以在没有不必要参数的情况下在 Route::group 中使用正则表达式吗?
我想单独路由,url是否包含子域。

使用以下代码,当我访问'http://test.main.com/site/12'时,输出'test'。

# app/Http/routes.php

Route::group(array('domain' => "{subdomain}.main.com"),function()
{
  Route::get('/site/{id}', 'SiteController@show');
}

,

# app/Http/Controller/SiteController.php

public function show($id)
{               
  // When I access 'http://test.main.com/site/12', I check 'test'.
  var_dump($id);
}

如果我在下面编码,我可以得到12。但$subdomain 是不必要的参数。

# app/Http/Controller/SiteController.php

public function show($subdomain, $id)
{               
  // When I access 'http://test.main.com/site/12', I check '12'.
  var_dump($id);
}

感谢您提出的任何建议。

【问题讨论】:

  • 我可以将它用于子域吗?
  • 几个月前我也问过同样的问题,但我似乎找不到问题。简短的回答是,你不能。 Laravel 没有不要将该参数注入控制器方法功能。
  • 我明白了。谢谢你的回答。 @Hkan

标签: regex laravel laravel-5 laravel-routing laravel-5.1


【解决方案1】:

在控制器中使用有点复杂,但有办法做到:

Route::group(['domain' => '{subdomain}.website.com', 'before' => 'subDomain'], function()
{

    // All application routes

});

Route::filter('subDomain', function($route)
{
    $domain = $route->getParameter('subdomain');            

    Session::put('subDomain', $domain);
});

如果你想在 route.php 中处理它,只需使用:

Route::group(['domain' => '{subdomain}.myapp.com'], function () {
    Route::get('user/{id}', function ($subdomain, $id) {
        //
    });
});

你的控制器看起来像这样:

public function show($id)
{               
  $subDomain = Session::get('subdomain');
  var_dump($id);
}

【讨论】:

  • 我想在route.php中处理。但是您的代码要包含不必要的参数$account
  • 更新了代码。这两部分都放在 route.php 中。这取决于您想在哪里使用这些信息。如果你想使用你的SiteController,你需要第一个解决方案(我更喜欢它)。您不能将 subdomain 作为第三个参数传递,因此您需要会话技巧。
  • 我尝试了第一个解决方案。芽它不工作。输出值为“测试”。不管是$account 还是$subdomain$subdomain 是不必要的参数。
  • 您使用$subDomain = Session::get('subdomain'); 获得 suddomain 以为您知道如何处理会话。
  • Route::group(['domain' => '{subdomain}.'.getenv('DOMAIN'), 'before' => 'subDomain'], function() { Route::get('/site/{id}', 'SiteController@show'); }); Route::filter('subDomain', function($route) { $domain = $route->getParameter('subdomain'); Session::put('subDomain', $domain); }); 我可以得到$subDomain('test')。但我无法获得$id(12)。
猜你喜欢
  • 2016-04-14
  • 2017-12-31
  • 2019-01-31
  • 2016-08-11
  • 2021-08-10
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多