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

时间:2017-11-15 16:21:12

标签: php laravel laravel-5.2

在Laravel 5.2中,我正在尝试在执行期间更新路径路径,因为我有多站点运行,对于cron执行,我需要更新每个站点的路径路径。

我尝试使用

app('url')->forceRootUrl('https://domain/sitename')

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

我尝试要求routes.php文件重建路径,但显然不会保存更改。

有什么想法吗?

由于

routes.php:

Route::group([
    'prefix' => Helpers_SiteTemplate::getSiteRoute($GLOBALS['site_segment'], $GLOBALS['is_cron']),
    'middleware' => ['helpers.siteTemplate'],
], function () {
    Route::get('test', 'Admin\HomeController@debugging');
});
  • $ GLOBALS ['site_segment']和$ GLOBALS ['is_cron']只有在控制台/ Kernel.php :: schedule()

  • 上执行cron时才会设置
  • helpers.siteTemplate将初始化提示者。

  • Helpers_SiteTemplate :: getSiteRoute只会从网址或param var获取网站名称

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

3 个答案:

答案 0 :(得分:0)

我终于成功找到了解决这个问题的方法,因此对于未来的搜索者来说,这可能会有所帮助。

如果由于多站点laravel中的cron操作或其他原因需要像我一样重建ROUTES,我最终使用此代码:

// 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 :(得分:0)

对于Laravel 5.7,答案已过时:

    $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);

答案 2 :(得分:0)

我将我的项目更新到 Laravel 8.33,经过数小时的测试,这对我有用:

// 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'));