使用动态前缀

时间:2018-02-09 12:26:36

标签: php laravel laravel-routing laravel-5.5

我们有多个客户端门户,每个门户网站都有一个像

这样的唯一网址
  • xyz.com/ClientPotal123
  • xyz.com/ClientPotal234
  • xyz.com/ClientPotalXXX

我们将把所有这些网址发送到

  

/无功/网络/ HTML / Laravelapp /公共

Laravelapp是我们为所有客户使用的代码库。

由于ClientPotalXXX对于所有客户端都是动态且唯一的,因此我需要获取ClientPotalXXX的值以加载客户端特定的设置,如url生成,数据库连接(我们为每个客户端提供不同的数据库)。

为了实现上述目标,我已做了以下改动..

我的 Web.php 文件如下..

Route::pattern('ClientPortal','^ClientPortal([0-9]+)?');
Route::prefix('/{ClientPortal}')->group(function () {
    Route::get('/user/list', 'UserController@list')->name('list');
    Route::get('/user/edit/{id}', 'UserController@edit');
});

我创建了中间件,其中包含以下代码..

public function handle($request, Closure $next)
{
    $database_name = strtolower($request->ClientPortal).'_db';
    config(['database.connections.mysql.database'=>$database_name]);
    config(['app_settings.client'=>$request->ClientPortal]);
    return $next($request);
}

它工作正常但以前我曾经直接访问编辑功能 $ id

public function edit($id){
    echo $id; // 12
}

但现在$ id每次都会返回ClientPortalXX的值。

如果我从Request访问id,它可以正常工作

public function edit(Request $request){
    $id = $request->id; // 12
} 

我正在使用路由参数的所有其他路由都会发生这种情况。

所以我不确定是否发生这种情况是因为我使用动态前缀来分组所有路由? 现在,对于我在刀片文件中用于生成url的每个 route()方法,我必须传递第二个参数,即。 {ClientPortal}的价值

{{route('register',['ClientPortal'=>config('app_settings.client')])}}

这是正确的实施吗?我知道我们可以使用服务提供商在全球范围内访问任何varibale,但这样做是否正确?

我的Laravel版本是5.5.xx ..我只是一个初学者所以任何帮助/建议/建议将不胜感激谢谢:)

更新  Nikola Gavric和Oluwafemi Sule已在下面的评论中澄清了我的疑问。

但由于组前缀是动态的,我该如何处理路由命名案例? 如果我必须使用上面web.php文件中提到的列表路由名称生成用户列表URL。

现在我要改变这一行..

 {{ route('list') }}

 {{ route('list',['ClientPortal'=> 'ClientPortalXXX' ]) }}

因为前缀也是一个路由参数。 这是可行的选择吗?因为我必须在我使用路由方法生成网址的任何地方进行此更改。

0 个答案:

没有答案