source

슬래시 문자를 포함하는 매개 변수를 사용하여 Laravel 경로를 정의하는 방법

lovecheck 2023. 7. 31. 21:29
반응형

슬래시 문자를 포함하는 매개 변수를 사용하여 Laravel 경로를 정의하는 방법

슬래시를 포함하는 매개 변수를 사용하여 경로를 정의합니다./그런 성격example.com/view/abc/02어디에abc/02는 매개 변수입니다.

어떻게 하면 라라벨이 슬래시를 다음 경로 매개 변수의 구분 기호로 읽지 못하게 할 수 있습니까?그것 때문에 저는 그것을 받고 있습니다.404 not found error지금이다.

아래 캐치올 경로를 아래에 추가합니다.routes.php그리고 달리는 것을 기억하세요.composer dump-autoload사후에슬래시를 포함하는 매개변수를 사용할 수 있도록 매개변수의 가능한 내용을 지정하는 "->where"를 사용합니다.

//routes.php
Route::get('view/{slashData?}', 'ExampleController@getData')
    ->where('slashData', '(.*)');

또한 컨트롤러보다 일반적인 방식으로 데이터를 처리합니다(슬래시가 포함되지 않은 것처럼).

//controller 
class ExampleController extends BaseController {

    public function getData($slashData = null)
    {
        if($slashData) 
        {
            //do stuff 
        }
    }

}

이것은 당신에게 효과가 있을 것입니다.

또한 경로 매개 변수에 대한 자세한 Laravel 문서가 있습니다. [docs]

비슷한 문제가 있지만 URL에 다음과 같은 경로 매개 변수가 있습니다.

/test/{param1WithSlash}/{param2}/{param3}

그리고 제가 그 사건을 처리한 방법은 다음과 같습니다.

    Route::get('test/{param1WithSlash}/{param2}/{param3}', function ($param1MayContainsSlash, $param2, $param3) {

        $content = "PATH: " . Request::path() . "</br>";
        $content .= "PARAM1: $param1WithSlash </br>";
        $content .= "PARAM2: $param2 </br>".PHP_EOL;
        $content .= "PARAM3: $param3 </br>".PHP_EOL;

        return Response::make($content);
    })->where('param1MayContainsSlash', '(.*(?:%2F:)?.*)');

도움이 되길 바랍니다.

URL 인코딩 슬래시는 버그로 인해 Laravel에서 작동하지 않습니다.https://github.com/laravel/framework/pull/4323 이 꺼내기 요청은 해당 버그를 해결합니다.

갱신하다.

경로의 값을 디코딩하기 전에 경로를 구문 분석할 수 있습니다.

인 라라벨 8+

Route::get('/search/{search}', function ($search) {
    return $search;
})->where('search', '.*');

참조:

https://laravel.com/docs/routing#parameters-encoded-forward-slashes

저는 이미 피에르의 대답에 찬성표를 던졌습니다. 그것은 옳지만, 제 생각에는 필요 이상으로 긴 것 같습니다. 여기 그 묘책을 보여주는 아주 짧은 환자 샘플 경로가 있습니다.

Route::get('post/{slug}', [PostController::class, 'show'])->where('slug', '[\w\s\-_\/]+');

이것이 당신이 필요한 전부입니다.정말로, 그\/위의 정규 표현으로 (에서)wheremethod)만 있으면 됩니다!

예를 들어, 다음과 같습니다.

  • 도메인/A ---> "A"가 다음으로 전달됩니다.show의 방법PostController.
  • 도메인/A/B ---> "A/B"가 다음으로 전달됩니다.show의 방법PostController.
  • 도메인/A/B/C ---> "A/B/C"가 다음으로 전달됩니다.show의 방법PostController.
  • 등등...

더 많은 샘플은 다음을 참조하십시오: Larvel Documentation - 정규식 제약 조건

언급URL : https://stackoverflow.com/questions/21552604/how-to-define-a-laravel-route-with-a-parameter-that-contains-a-slash-character

반응형