首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5.2 -在执行期间更新路由路径

Laravel 5.2 -在执行期间更新路由路径
EN

Stack Overflow用户
提问于 2017-11-15 16:21:12
回答 3查看 322关注 0票数 1

在Laravel5.2中,我试图在执行期间更新路由路径,因为我有多站点运行,而对于cron执行,我需要更新每个站点的路由路径。

我试着用

代码语言:javascript
复制
app('url')->forceRootUrl('https://domain/sitename')

但是使用这种方法,asset()函数将使用错误的链接。

我试图要求routes.php文件重新构建路径,但显然没有保存更改。

有什么想法吗?

谢谢

routes.php:

代码语言:javascript
复制
Route::group([
    'prefix' => Helpers_SiteTemplate::getSiteRoute($GLOBALS['site_segment'], $GLOBALS['is_cron']),
    'middleware' => ['helpers.siteTemplate'],
], function () {
    Route::get('test', 'Admin\HomeController@debugging');
});
  • 只有当这是控制台/Kernel.php::schedule()上的cron执行时,才会设置$GLOBALS‘’site_段‘和$GLOBALS' is _cron’
  • helpers.siteTemplate将只初始化proviter。
  • Helpers_SiteTemplate::getSiteRoute将只从URL或param获取站点名。

在本例中,这将在url中正常工作: domain.tld/ sitename /test,但是在cron中,routes.php将在没有站点名的情况下设置url,然后我需要再次设置路由。在设置会话vars之后,我尝试从schedule()开始require app_path('Http/routes.php');,但是路由没有改变。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-28 21:08:14

我终于成功地在代码中找到了解决方案,因此对于未来的搜索者来说,这可能是有帮助的。

如果由于多站点laravel中的cron操作或其他原因,您需要重建像我这样的路线,那么我最终使用了以下代码:

代码语言:javascript
复制
// Get the router facade from anyware
$router = \Illuminate\Support\Facades\Route::getFacadeRoot();
// Clear the current routes by setting a empty route collection
$routes = new \Illuminate\Routing\RouteCollection;
$router->setRoutes($routes);

// Get the route service provider
$routeserviceprovider = new \App\Providers\RouteServiceProvider(app());
// Call the map function from the provider, this will remap all routes from the app\Http\routes.php
app()->call([$routeserviceprovider, 'map']);

如果我能帮助进一步的信息,请联系我。

谢谢大家。

票数 1
EN

Stack Overflow用户

发布于 2019-01-03 09:58:42

对Laravel 5.7来说,答案已经过时了:

代码语言:javascript
复制
    $router = app('router');
    // Clear the current routes by setting a empty route collection
    $routes = new \Illuminate\Routing\RouteCollection;
    $router->setRoutes($routes);
    // Get the route service provider
    $routeserviceprovider = app()->getProvider(RouteServiceProvider::class);
    // Call the map function from the provider, this will remap all routes from the app\Http\routes.php
    app()->call([$routeserviceprovider, 'map']);
    $routes = Route::getRoutes();
    $routes->refreshNameLookups();
    $routes->refreshActionLookups();
    $router->setRoutes($routes);
票数 0
EN

Stack Overflow用户

发布于 2021-03-30 20:18:13

我将我的项目更新为Laravel 8.33,经过几个小时的测试,这对我起了作用:

代码语言:javascript
复制
// clear routes
$router = \Illuminate\Support\Facades\Route::getFacadeRoot();
$routes = new \Illuminate\Routing\RouteCollection;
$router->setRoutes($routes);

// load routes
Route::middleware('web')
    ->namespace('App\Http\Controllers')
    ->group(base_path('routes/web.php'));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47312419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档