【问题标题】:Getting a route to an external laravel instance获取到外部 laravel 实例的路由
【发布时间】:2013-08-25 04:54:12
【问题描述】:

我有两个单独的 Laravel 实例/站点在服务器上运行,并且希望能够从另一个中的代码生成一个命名路由的 URL。

例如,第一个实例中存在以下命名路由: Route::get('users/my_account', array('uses' => 'UsersController@myAccount', 'as' => 'my_account'))

在第二种情况下,我想为上面的路由生成一个 url。谁能想到一个干净的方法来做到这一点,而无需明确知道 url(即只知道路由'my_account'的名称)?

基本上我想将一个站点的 RouteCollection 暴露给另一个站点...

【问题讨论】:

    标签: laravel laravel-4 laravel-routing


    【解决方案1】:

    这是一个非常有趣的问题。没有本地支持的方式来做到这一点,据我所知,它永远不会。

    您可以尝试加载第一个应用程序的路由文件,解析它的配置(反向路由需要它),构造一个 Router 实例并使用它,但我相信它不会简单全部。

    如果你真的,我的意思是真的,使用反向路由的充分理由,你可以尝试在第一个应用程序上构建一个小型 API。该 API 应该接收必要的参数,那些在url($params) 中使用的参数,并返回完整的 url(包括域和所有内容)。不过,这会带来一些严重的性能问题。

    恕我直言,坚持硬编码my_account,在第一个应用程序路由和/或控制器上留下评论,说明它已用于另一个项目并继续前进:)

    【讨论】:

    • 我相信这是要走的路。所有外来 URL 都应该作为与核心完全分离的东西来处理。我们对重定向到其他网站的 URL 也是如此。我认为 OP 应该将另一个应用程序作为另一个网站来处理。
    • 谢谢。我们已决定按照您的建议对路线进行硬编码。我喜欢 API 的想法,但在我们的例子中,额外的努力并不值得微不足道的收获。出于兴趣,您可以创建一个 API 端点来公开 laravel 实例的 RouteCollection,并使用它在另一个实例中构建一个外部路由器。事实证明,付出的努力多于其价值。
    【解决方案2】:

    我可以称之为肮脏的把戏。假设您的文件系统中有以下结构,其中两个路径都是 Laravel 应用程序:

    /path/to/apps/app1
    /path/to/apps/app2
    

    并且您想将 routes 文件从 app1 加载到 app2 中。你可以这样做:

    include "../app1/apps/routes.php";
    $url = URL::route('register');
    

    瞧! 但是,虽然它对我有用,但有几点需要考虑。

    • 包含该文件,肯定会覆盖该进程的当前路由集合。
    • 如果最后一个是真的,那么您在生成其他 URL 时可能会遇到问题,可能在您的视图中。
    • 域名将是当前 Laravel 实例的域名。这意味着您生成到 app2 中的 URL 将包含 app1 的域名。我相信这不是你想要的。但您始终可以使用URL::route('register', null, false) 生成非绝对网址。

    【讨论】:

    • 感谢您的回答。我确实尝试过这种方法,您提到的问题是您的路线将被覆盖。即使您随后重新解析原始路由文件,您也可能会留下来自其他实例的路由,即使它们不存在,这些路由现在也将被接受为有效。
    猜你喜欢
    • 2016-10-21
    • 2015-07-07
    • 1970-01-01
    • 2016-12-29
    • 2016-12-26
    • 1970-01-01
    • 2018-05-19
    • 2019-07-22
    • 2018-09-29
    相关资源
    最近更新 更多