【问题标题】:Lravel 5.1.x Separate public folder & http namespace for separate sub-domainLaravel 5.1.x 单独的公共文件夹和 http 命名空间用于单独的子域
【发布时间】:2017-11-05 15:07:16
【问题描述】:

我的文件夹结构如下所示

app
    Console
    Events
    Exceptions
    Http
        Classroom
            Controllers
            Middleware
            Requests
            Kernel.php
        Default
            Controllers
            Middleware
            Requests
            Kernel.php
        Homework
            Controllers
            Middleware
            Requests
            Kernel.php
        routes-classroom.php
        routes-default.php
        routes-homework.php
        routes.php
    Jobs
    Listeners
    Policies
    Providers
    User.php
bootstrap
config
database
public
public_classroom
    bootstrap
        cache
        app.php
        autoload.php
public_homework
    bootstrap
        cache
        app.php
        autoload.php
resources
storage
tests
vendor

我的 vhsot 是这样的:

cr.classroom.loc => public_classroom
hw.classroom.loc => public_homewrok

我希望当 cr.classroom.loc 被访问时,Http/Classroom/controller 将被访问,同样的情况也会发生在 hw.classroom.loc 上。 我已经修复了命名空间,因此运行 composer dump-autoload, php artisan clear-compiled 但没有任何帮助。显示以下错误:

/var/www/classroom/vendor/laravel/framework/src/Illuminate/Container/Container.php:741 中未捕获的异常“ReflectionException”和消息“类日志不存在”

【问题讨论】:

  • 这只是一个初步消息,因为服务器无法写入日志文件。将存储文件夹的权限更改为 777,然后重试以获取真正的错误消息。
  • @Vikas存储文件夹的权限从一开始就是777

标签: laravel-5


【解决方案1】:

问题出在 Route Service Provider 中。提供者无法解析请求。将以下代码添加到提供程序。

protected $ar_subdomain_namespaces = [
    '' => 'Home',
    'cr' => 'Classroom',
    'hw' => 'Homework',
    'lms' => 'Lms',
    'admin' => 'Admin',
    ...
];

public function map(Router $router) {
    $this->mapWebRoutes($router);
}

protected function mapWebRoutes(Router $router) {
    if (isset($_SERVER['HTTP_HOST'])) {
        $fqdn = $_SERVER['HTTP_HOST'];
        $ar_host = explode(".", $fqdn);
    }

    $sub_domain = ( isset($ar_host) && count($ar_host) > 2 && $ar_host[0] !== 'www' ) ? $ar_host[0] : '';
    list($namespace, $route_path) = $this->getNamepaceAndRouteBySubdomain($sub_domain);

    $router->route_file_path = $route_path;
    $router->group([
        'namespace' => $namespace, 'middleware' => 'web',
            ], function ($router) {
        require app_path($router->route_file_path);
    });
}

protected function getNamepaceAndRouteBySubdomain($sub_domain = '') {
    $namespace = '\Controllers';
    $route_path = 'Http/Home/routes.php';

    if (array_key_exists($sub_domain, $this->ar_subdomain_namespaces)) {
        $route_path = "Http/{$this->ar_subdomain_namespaces[$sub_domain]}/routes.php";
        $namespace = "{$this->namespace}\\{$this->ar_subdomain_namespaces[$sub_domain]}{$namespace}";
    }

    return [$namespace, $route_path];
}

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 2012-02-02
    • 2020-04-20
    • 2013-07-07
    • 2013-10-01
    • 2012-06-06
    • 2023-03-25
    • 2014-08-11
    相关资源
    最近更新 更多