Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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 被拉威尔的路线困住了_Php_Laravel - Fatal编程技术网

Php 被拉威尔的路线困住了

Php 被拉威尔的路线困住了,php,laravel,Php,Laravel,目标:将子域用作参数,并在“normal..?param=style”和“/param/style”中使用不限数量的GET参数 当前的“web.php” 如果您向xyz.mydomain.com发送请求,我将获取bucketIdentifier以查询数据库。按设计工作 如果您发送一个带有“?myparam=12&other=42”的GET请求,我可以获取参数,其工作原理与设计的一样 但我如何也可以使用“/myparam/12/other/42”进行路由。有了这个设置,我将得到404作为响应 其他

目标:将子域用作参数,并在“normal..?param=style”和“/param/style”中使用不限数量的GET参数

当前的“web.php”

如果您向xyz.mydomain.com发送请求,我将获取bucketIdentifier以查询数据库。按设计工作

如果您发送一个带有“?myparam=12&other=42”的GET请求,我可以获取参数,其工作原理与设计的一样

但我如何也可以使用“/myparam/12/other/42”进行路由。有了这个设置,我将得到404作为响应

其他Aproach(不工作)


现在我有了bucketIdentifier als“query”参数(;

您可以使用
回退
路由方法,它的功能是一应俱全。此方法是新的,因此没有文档记录,但您可以找到


fallback
路由将匹配组中尚未匹配的任何内容。

您可以改用
fallback
路由方法,它的功能是“一网打尽”。此方法是新的,因此没有文档记录,但您可以找到


回退
路线将匹配组中尚未匹配的任何内容。

最简单的方法是获取路线后面的所有参数,如下所示:

// Grab all routes and following routes that start with "infiniteParams"
Route::any('infiniteParams/{all}', function($page){
    // Create an array separating them with "/"
    $params = explode('/', $page);

    // Formatted parameters array
    $params_array = [];

    // Take the first parameter as the key and the second as the value. 
    for($i = 0; $i < count($params); $i+=2) {
        $params_array[$params[$i]] = @$params[$i+1];
    }
    var_dump($params_array);
})->where('all', '.*');
PD:


我不知道这是否完全回答了您的问题,但至少给了您如何做的想法。

最简单的方法是获取以下路线的所有参数:

// Grab all routes and following routes that start with "infiniteParams"
Route::any('infiniteParams/{all}', function($page){
    // Create an array separating them with "/"
    $params = explode('/', $page);

    // Formatted parameters array
    $params_array = [];

    // Take the first parameter as the key and the second as the value. 
    for($i = 0; $i < count($params); $i+=2) {
        $params_array[$params[$i]] = @$params[$i+1];
    }
    var_dump($params_array);
})->where('all', '.*');
PD:


我不知道这是否完全回答了你的问题,但至少让你知道如何做。

这里有一个服务提供商,你可以使用:

它将路径与查询合并,例如:

/foo/bar/hello/world?sen=pai

$request->get('foo')
$request->get('hello')
$request->get('sen')

注意:

当前代码将影响所有路由,但不会在控制台中激活

根据您问题中的路径,我“假设”这些是唯一的路径,但如果不是,您应该/可以在代码中添加路径白名单/黑名单

(如果是这样的话,我有一个想法,如果你想举个例子,请在评论中告诉我)


以下是您可以使用的服务提供商:

它将路径与查询合并,例如:

/foo/bar/hello/world?sen=pai

$request->get('foo')
$request->get('hello')
$request->get('sen')

注意:

当前代码将影响所有路由,但不会在控制台中激活

根据您问题中的路径,我“假设”这些是唯一的路径,但如果不是,您应该/可以在代码中添加路径白名单/黑名单

(如果是这样的话,我有一个想法,如果你想举个例子,请在评论中告诉我)


要使路由捕获任何路径(仅包括
/
),您可以使用:

Route::get('/{any}', 'BucketController@receive')->where('any', '.*');
Route::post('/{any}', 'BucketController@receive')->where('any', '.*');
Route::put('/{any}', 'BucketController@receive')->where('any', '.*');
Route::delete('/{any}', 'BucketController@receive')->where('any', '.*');
Route::patch('/{any}', 'BucketController@receive')->where('any', '.*');
或者,由于您将所有方法发送到同一控制器:

::any
为所有方法注册路由:
[get post put patch delete options]


要使路由捕获任何路径(仅包括
/
),您可以使用:

Route::get('/{any}', 'BucketController@receive')->where('any', '.*');
Route::post('/{any}', 'BucketController@receive')->where('any', '.*');
Route::put('/{any}', 'BucketController@receive')->where('any', '.*');
Route::delete('/{any}', 'BucketController@receive')->where('any', '.*');
Route::patch('/{any}', 'BucketController@receive')->where('any', '.*');
或者,由于您将所有方法发送到同一控制器:

::any
为所有方法注册路由:
[get post put patch delete options]

不在我今天的版本中(:将在更新后进行测试。不在我今天的版本中(:将在更新后进行测试)。
$params_array = [
    "myparam" => 12,
    "other" => 42
]
class PathServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        if (!$this->app->runningInConsole()) {
            $request = resolve(Request::class);

            foreach ($this->path($request) as $key => $value) {
                $request->query->set($key, $value);
            }
        }
    }

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Yield key values derived from the path,
     * if the last has no value it is skipped.
     *
     * @param Request $request
     * @return Generator
     */
    protected function path(Request $request): Generator {
        $path = explode('/', $request->decodedPath());

        $i = 0;

        while (count($path) - $i >= 2) {
            yield $path[$i++] => $path[$i++];
        }
    }
}
Route::get('/{any}', 'BucketController@receive')->where('any', '.*');
Route::post('/{any}', 'BucketController@receive')->where('any', '.*');
Route::put('/{any}', 'BucketController@receive')->where('any', '.*');
Route::delete('/{any}', 'BucketController@receive')->where('any', '.*');
Route::patch('/{any}', 'BucketController@receive')->where('any', '.*');
Route::any('/{any}', 'BucketController@receive')->where('any', '.*');