Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.2到控制器的子域动态路由_Php_Laravel_Routes_Laravel 5.2 - Fatal编程技术网

Php Laravel 5.2到控制器的子域动态路由

Php Laravel 5.2到控制器的子域动态路由,php,laravel,routes,laravel-5.2,Php,Laravel,Routes,Laravel 5.2,假设我有一个关于汽车的网站:cars.com在Laravel 5上。 我想设置我的routes.php,这样用户就可以在浏览器中键入ford.cars.com/somethingOrnothing,并找到负责福特的控制器™ 汽车(FordController)。 当然,我可以使用这样的代码: Route::group(['middleware' => 'web'], function () { Route::group(['domain' => 'f

假设我有一个关于汽车的网站:
cars.com
在Laravel 5上。

我想设置我的
routes.php
,这样用户就可以在浏览器中键入
ford.cars.com/somethingOrnothing
,并找到负责福特的控制器™ 汽车(
FordController
)。 当然,我可以使用这样的代码:

    Route::group(['middleware' => 'web'], function () {     
        Route::group(['domain' => 'ford.cars.com'], function(\Illuminate\Routing\Router $router) {
            return $router->resource('/', 'FordController');
        });
    });
但我不喜欢为数百个汽车品牌编写和维护路线。

我想这样写:

Route::group(['domain' => '{brand}.cars.com'], function(\Illuminate\Routing\Router $router) {
        return $router->get('/', function($brand) {
            return Route::resource('/', $brand.'Controller');
        });
    });
所以问题是:是否可以为子域动态设置路由,以及如何实现这一点

upd:

理想的结果是拥有完全重复控制器结构的子域。就像
Route::controller()
那样(但现在不推荐使用)

可能这就是您需要的:

子域路由 路由组也可用于路由通配符子域。 子域可以像路由URI一样分配路由参数, 允许您捕获子域的一部分,以便在应用程序中使用 路由或控制器。可以使用域来指定子域 组属性数组上的键:

Route::group(['domain' => '{account}.myapp.com'], function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});
发件人:

upd

如果要调用控制器方法,可以按如下方式执行:

Route::group(['domain' => '{brand}.cars.com'], function(\Illuminate\Routing\Router $router) {
        return $router->get('/', function($brand) {
            return Route::resource('/', $brand.'Controller');
        });
    });

要模拟
Route::controller()
行为,可以执行以下操作:

Route::group(['domain' => '{carbrand}.your.domain'], function () {
    foreach (['get', 'post'] as $request_method) {
        Route::$request_method(
            '{action}/{one?}/{two?}/{three?}/{four?}',
            function ($carbrand, $action, $one = null, $two = null, $three = null, $four = null) use ($request_method) {
                $controller_classname = '\\App\\Http\\Controllers\\' . Str::title($carbrand).'Controller';
                $action_name = $request_method . Str::title($action);

                if ( ! class_exists($controller_classname) || ! method_exists($controller_classname, $action_name)) {
                    abort(404);
                }

                return App::make($controller_classname)->{$action_name}($one, $two, $three, $four);
            }
        );
    }
});

此路由组应紧跟所有其他路由,因为它会引发404 Not found异常。

可能不是。在发布问题之前,我已经阅读了文档并尝试了很多东西。文档中的示例很清楚,不清楚如何处理控制器路由以及如何将
{account}
参数传递给它们clear@Zanshin13我懂了。作为一种解决方法,您始终可以从路由闭包内部调用controller方法,如下所示:app('app\Http\Controllers\YourController')->controllerMethod($account,$id);理想的结果是拥有完全重复控制器结构的子域。类似于
Route::controller()
did(但现在已弃用)。您的解决方案不会为我提供转到url中的任何控制器方法的选项