컨트롤러(Contoller)

컨트롤러(Contoller)

1. 개요

본 포스팅에서는 라라벨의 컨트롤러에 대해 알아보고 간단한 홈페이지를 제작하여 테스트를 진행합니다. 애플리케이션의 요청에 대한 모든 로직은 routes.php 파일에서 정의할 수 있지만, 별도의 컨트롤러 클래스를 통해서 구성하여 관리할 수 있습니다.

2. 생성

아티즌 명령어를 통해서 간단하게 컨트롤러를 생성할 수 있습니다. 아래의 명령어를 통해 생성합니다.

php artisan make:controller

위의 명령어를 실행하면 app\Http\Contollers 디렉터리에 .php 파일이 생성됩니다. 이 파일 안의 코드는 다음와 같이 정의되어 있습니다.

컨트롤러 테스트를 위해서 index() 메서드를 새로 추가하고 간단한 문자열을 반환합니다.

다음으로 컨트롤러의 index() 메서드와 연결되는 라우트를 설정합니다.

생성한 라우트로 접속하면 "Hello, world"라는 문자열을 확인할 수 있습니다.

2. 모델과 연동

2.1. 모델 생성

다음으로 컨트롤러와 모델을 이용하여 사용자가 입력한 값을 데이터베이스에 저장하고 조회할 수 있는 경우를 살펴봅니다. 우선 모델을 생성하기 위해 아래의 아티즌 명령어를 실행합니다.

php artisan make:model --migration or -m

뒤에 -m은 모델을 생성할 때 데이터 마이그레이션을 생성합니다.

다음으로 생성한 마이그레이션에서 제목과 내용을 저장할 수 있도록 테이블을 수정합니다. 마이그레이션 파일은

app\database\migrations\XXXX_XX_XX_XXXXXX_create__table.php

에서 확인할 수 있습니다.

id(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tests'); } }

간단하게 설명하자면, up() 메서드는 데이터베이스의 테이블, 컬럼, 인덱스를 추가하는데 사용되고, down() 메서드는 up() 메서드의 동작을 취소합니다.

up() 메서드에서 title과 description을 string 형태로 추가합니다.

id(); $table->string('title'); $table->string('description'); $table->timestamps(); }); } ... }

생성한 모델의 $fillable 속성 값을 수정합니다.

모델까지 수정이 완료되면 아래의 명령어를 통해 마이그레이션을 실행합니다.

php artisan migrate

2.2. 컨트롤러 수정

컨트롤러에서 데이터를 생성할 수 있는 페이지와 데이터를 저장할 메서드를 정의합니다.

with('tests', Test::all()); } public function create() { return view('tests.create'); } public function store(Request $request) { $data = $request->validate([ 'title' => 'required', 'description' => 'required' ]); Test::create($data); return Redirect('test'); } }

create() 메서드에서 데이터를 입력받을 페이지를 반환하고, store() 메서드에서 전달받은 데이터를 검사 후 Tests 테이블에 저장합니다. 저장한 후에는 index 페이지로 다시 이동하여 데이터를 확인할 수 있도록 합니다.

다음으로 test 컨트롤러에 대한 라우트를 설정합니다.

prefix('test')->group(function() { Route::get('/', [TestController::class, 'index'])->name('index'); Route::post('/', [TestController::class, 'store'])->name('store'); Route::get('/create', [TestController::class, 'create'])->name('create'); });

라우트를 정의할 때 name() 메서드와 prefix(), group() 메서드를 활용하여 test에 대한 페이지를 생성합니다.

2.3. 페이지 생성

마지막으로 데이터를 조회 및 입력할 페이지를 만들어줍니다.

Test Page ID Title Description @foreach ($tests as $data) {{$data->id}} {{$data->title}} {{$data->description}} @endforeach Create

index 페이지에서는 test에 대한 데이터를 받은 후 데이터를 반복하여 테이블을 생성하여 조회할 수 있도록 합니다.

Test Create Page @csrf Title : Description : Create!

create 페이지에서는 input 태그를 이용하여 제목과 내용을 입력받고 라우트로 지정한 test.store에 POST 방식으로 데이터를 전달합니다. test.store에서는 받은 데이터를 처리 후에 index로 redirection 되어있어 올바르게 데이터를 전달하면 index 페이지로 이동합니다.

3. 테스트

index 페이지

index 페이지입니다. 데이터를 조회할 테이블과 데이터를 생성할 수 있는 create 페이지로 이동하는 링크도 있습니다. 링크를 이용하여 create 페이지로 이동합니다.

create 페이지

create 페이지입니다. 제목과 내용을 입력할 수 있도록 폼이 만들어져 있고 입력 후 Create! 버튼을 클릭하면 index 페이지로 이동 후 데이터가 생성 됨을 확인할 수 있습니다.

조회된 index 페이지

참고

공유하기 글 요소 저작자표시

from http://bananani.tistory.com/13 by ccl(A) rewrite - 2021-09-24 01:26:50