【问题标题】:Dynamic paths for laravel 5laravel 5 的动态路径
【发布时间】:2016-10-11 04:15:16
【问题描述】:

虽然building multi-tenancy packages for Laravel 5 我必须找出如何使路径和命名空间动态化。

这将涉及:

  • 浏览量;动态添加根命名空间中可用的模板目录
  • 朗;动态添加根命名空间中可用的语言目录
  • 路线;动态添加路由文件
  • 配置;从动态位置合并其他配置文件
  • 供应商;允许从动态位置获得自定义供应商和软件包

【问题讨论】:

    标签: laravel laravel-5 multi-tenant


    【解决方案1】:

    观看次数

    使用service provider,您可以在boot() 方法中使用以下内容,以使视图在根命名空间中可用(view('your-view') 而不是view('package::your-view')):

    $this->app['view']->addLocation('/your/new/location');
    

    语言

    使用service provider,您可以在boot() 方法中使用以下内容,其中$path 是您的根命名空间转换的新路径:

    $app->bindShared('translation.loader', function($app) use ($path)
    {
          return new \Illuminate\Translation\FileLoader($app['files'], $path);
    });
    $app->bindShared('translator', function($app)
    {
          $translator = new \Illuminate\Translation\Translator($app['translation.loader'], $app['config']['app.locale']);
          $translator->setFallback($app['config']['app.fallback_locale']);
          return $translator;
    });
    

    路线

    路线是迄今为止最简单的。只需使用 require_once 或使用 Laravel 方法将它们包含进来:\File::requireOnce()

    配置

    我使用了一个允许租户否决核心配置的目录。请告知这里没有安全性或完整性检查,因此应限制访问。

    使用service provider,您可以在boot() 方法中使用以下内容

     foreach (\File::allFiles('/path/to/configs') as $path) {
           $key = \File::name($path);
           $app['config']->set($key, array_merge(require $path, $app['config']->get($key, [])));
     }
    

    这将通过使用提供的配置文件推翻现有配置的值来合并现有配置。

    供应商

    真正有趣的是可以使用动态加载的类。为此,您需要在 service provider 中使用 ClassLoader addDirectories() 方法

    \Illuminate\Support\ClassLoader::addDirectories(['/path/to/vendors']);
    

    其他注意事项

    上面的代码可以使用服务提供者来实现。为了让服务器提供程序工作,您必须将它们添加到 providers 数组下的 config/app.php 文件中。不这样做不会启用服务提供者中的任何代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2016-06-08
      • 2017-10-28
      • 2015-08-11
      • 2015-10-01
      • 2018-04-17
      • 2016-09-01
      相关资源
      最近更新 更多