평범한 이야기들

[TIL] PHP Laravel - View, Controller (뷰, 컨트롤러) 본문

평범한 개발 이야기/Laravel

[TIL] PHP Laravel - View, Controller (뷰, 컨트롤러)

songsariya 2021. 2. 4. 17:28
728x90

View

사용자의 응답이 어떻게 보여야 하는지 결정하는 파일

대부분 HTML 파일의 형태이지만 JSON, XML, 이메일과 같은 형식의 뷰 파일 생성 가능

// views/home.blade.php 또는 views/home.php 파일을 찾는다.

Route::get('/', function(){
    return view('home');
});

뷰에 데이터 넘기기

// View에서 데이터 바인딩 방법
// 첫번째 방법
Route::get('/', function(){
    return view("welcome")->with('name','Foo');
});

// 두번째 방법
Route::get('/', function(){
    return view("welcome",[
        'name' => 'Foo2',
        'greeting' => '안녕하세요?'
    ]);
});

라우트에서 바로 뷰 반환하기

Route::view('/', 'welcome', ['Users' => '사용자']);

 

Controller

HTTP 요청을 받아 애플리케이션의 로직을 처리하는 곳

아티즌 명령어를 사용해 컨트롤러를 생성

~ php artisan make:controller TaskController

 

- TaskController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TaskController extends Controller
{
    public function index()
    {
        return "Hello World in TaskController-index method.";
    }
}

- // routes/web.php
Route::get('/',[TaskController::class,'index']);

myapp.test에 접속을 하면 TaskController의 index 메서드를 이용해 화면에 해당 메시지를 출력

 

리소스 컨트롤러

라라벨에서는 전통적인 REST/CRUD 컨트롤러(라라벨에서는 리소스 컨트롤러)가 존재

~ php artisan make:controller Controller이름 --resource

리소스 컨트롤러 메서드

  • index() : 리소스 목록을 반환
  • create() : 리소스 생성을 위한 폼 페이지를 출력
  • store(Request $request) : 리소스 생성을 처리
  • show($id) : 리소스 조회 페이지를 출력
  • edit($id) : 리소스 수정을 위한 수정 페이지를 출력
  • update(Request $request, $id) : 리소스 수정을 처리
  • destroy($id) : 리소스를 삭제

리소스 컨트롤러 연결

// routes/web.php

Route::resource('works', Controller이름::class);

 

API 리소스 컨트롤러

RESTful API를 만들 때 사용

리소스 컨트롤러에서 입력 폼을 위한 화면을 제외하고 생성

php artisan make:controller Controller이름 --api 
// routes/api.php
Route::apiResource('works', Controller이름::class);

단일 액션 컨트롤러

Controller가 하나의 라우트만 처리해야 하는 경우 메서드를 새롭게 만들지 말고 php에서 제공해주는 __invoke() 메서드를 이용

__invoke() 메서드는 클래스 인스턴스의 '호출을 위임'하여 함수처럼 처리하는 메서드

// \App\Http\Controllers\TestController.php
public function __invoke(){
 // 사용자가 원하는 로직
}

// routes\web.php
Route::post('/test', TestController::class);

해당 주소로 접근 시 TestController의 __invoke() 메서드가 실행

폼 메서드 스푸핑

폼 메서드 스푸핑 (원래의 값이 아닌 다른 것으로 속이는 기법)

기본적인 form에서는 get, post만 허용하지만 경우에 따라 HTTP 메서드를 수동으로 정의해야 할 때가 존재

<form action='/tasks/5' method='POST'>
    <!-- 직접 _method hidden 타입 추가 -->
    <input type="hidden" name="_method" value="DELETE">

    <!-- @method 지시어를 사용하여 정의 -->
    @method("DELETE")
</form>

// routes/web.php

Route::DELETE() 메서드와 매핑이 된다. 

CSRF 보호

CSRF( cross site request forgery) 공격을 보호하는 방법으로 세션이 시작될 때 토큰을 이용해 각 요청마다 토큰을 전송해 토큰을 비교하는 방법

라라벨에서는 좀 더 쉽게 사용할 수 있게 존재

<form action='/tasks/5' method='POST'>
    <!-- PHP 코드로 csrf_fields() 헬퍼 함수를 호출 -->
    <?php echo csrf_field();?>

    <!-- 직접 _token 타입 추가 -->
    <input type="hidden" name="_token" value="<?php echo crsf_token();?>">

    <!-- @csrf 지시어를 사용 (5.6 이전 버전에서는 사용할 수 없다. -->
    @csrf
</form>
728x90
Comments