평범한 이야기들

[TIL] PHP Laravel - MVC, HTTP 메서드, 라우트(Route) 본문

평범한 개발 이야기/Laravel

[TIL] PHP Laravel - MVC, HTTP 메서드, 라우트(Route)

songsariya 2021. 2. 3. 21:23
728x90

MVC

  • 모델 (model) : 개별적인 데이터 테이블(하나의 레코드)을 표현
  • 뷰 (view) : 데이터를 가공해 사용자에게 결과물을 전달하는 템플릿 (html, css, js로 이루어진)
  • 컨트롤러(controller) : 브라우저를 통해 유입되는 http 요청을 받아 사용자의 입력 값을 검증한 뒤, 데이터베이스와 스토리지에서 필요한 데이터를 조회하고, 결과를 사용자에 응답하도록 제어하는 역할

MVC 화면

 

HTTP 메서드

  • GET : 조회하고자 하는 리소스를 요청
  • HEAD : GET 응답의 헤더 부분만 요청 (HTTP 요청과 응답은 헤더와 바디로 이루어진다.)
  • POST : 리소스를 생성
  • PUT : 리소스를 수정
  • PATCH : 리소스의 일부를 수정
  • DELETE : 리소스를 삭제
  • OPTIONS : 특정 URL에서 어떤 HTTP 메서드가 허용되는지 서버에 확인

 

라우트 (Route)

// routes/web.php

// 기본형태
Route::get('/', function () {
    return "Hello World!";
});

Route::post('/', function () {
    // post 메서드
});

Route::put('/', function () {
    // put 메서드
});

Route::delete('/', function () {
    // delete 메서드
});

Route::any('/', function () {
    // 요청 메소드에 관계없이 해당 요청을 처리
});

Route::match(['get','post'],'/', function () {
    // GET 또는 POST인 요청에 대해서 처리
});

 

컨트롤러 메서드를 호출하는 방식 [튜플 문법]

use App\Http\Controllers\WelcomeController;

Route::get('/', [WelcomeController::class, 'index']);

튜플 문법은 라라벨 8에서 기본 관례, 문자열 문법으로 하면 버전에 따라 네임스페이스에 주의해야 한다.

 

인자를 넣어서 사용하는 방법

Route::get('/{foo?}', function($foo = 'bar'){
    return $foo;
});
// 패턴 적용 (영문숫자 3자리) 그 외 -> 404
Route::pattern('foo','[0-9a-zA-Z]{3}');
Route::get('/{foo?}', function ($foo = 'bar') {
    return $foo;
});

// 또는

Route::get('/{foo?}', function ($foo = 'bar') {
    return $foo;
})->where('foo','[0-9a-zA-Z]{3}');

 

라우트에 이름 지정하기

Route::get('members/{id}', [MemberController::class, 'show'])->name('members.show');

// 뷰 파일에서 해당 라우터 이름 사용 route() 헬퍼사용
<a href="<?php echo route('members.show',['id' => 12]);?>">
=> 다음과 같이 출력
<a href="http://test.com/members/14">

 

라우트의 공통 URL 사용

Route::prefix('admin')->group(function(){

    Route::get('/', function(){
        // URL /admin를 처리하는 로직
        return "prefix 사용 admin 페이지";
    });

    Route::get('users', function(){
        // /admin/users 를 처리 하는 로직
        return "prefix 사용 admin/users 페이지";
    });
});


서브도메인 라우트

Route::domain("api.myapp.test")->group(function(){
    Route::get("/", function(){
        // 서브 도메인 라우트
    });
});

Route::domain("{account}.myapp.test")->group(function(){
    Route::get('/',function($account){
        // ssr.myapp.test 접근
        return $account ." 사이트 입니다.";
    });

    Route::get('users/{id}', function($account, $id){
        // ssr.myapp.test/users/1 접근
        return $account ." 사이트의 ".$id." 입니다.";
    });
});

 

서명된 라우트

// 라우트에 서명을 추가하려면 반드시 이름이 지정되어있어야 한다.

Route::get('invitations/{invitation}/{group}', function(){
    return "test";
})->name("invitations")->middleware("signed");

Route::get('/', function () {

    // 일반 URL 링크 생성하기
    $basicUrl = URL::route('invitations',['invitation'=>5816, 'group' => 678]);

    // 서명된 URL 링크 생성하기
    $signedUrl1 = URL::signedRoute('invitations',['invitation'=>5816, 'group' => 678]);

    // 유효기간이 있는 서명된 링크 생성하기
    $signedUrl2 = URL::temporarySignedRoute('invitations',now()->addHours(4), ['invitation'=>5816, 'group' => 678]);

    return $basicUrl."<br><br>".$signedUrl1."<br><br>".$signedUrl2;
});

 

결과 화면

서명된 URL이 만들어진 화면

728x90
Comments