처음부터 차근차근
package 다운로드, 파일 명명 규칙, 리소스 컨트롤러, form 값 받기, db update/delete/create, fillable 본문
package 다운로드, 파일 명명 규칙, 리소스 컨트롤러, form 값 받기, db update/delete/create, fillable
_soyoung 2022. 1. 16. 17:26패키지 다운로드
프로젝트 파일에서 npm install을 하면 package.json의 devDependencies에 있는 패키지들을 설치 할 수 있다.
webpack.mix.js에서 코드를 작성하면 css파일이나 js파일을 컴파일하여 사용할 수 있다.
webpack.mix.js에 적혀있는 css or js 컴파일 하는 코드
npm run dev
resource 폴더 안에 있는 css파일 js 파일이 컴파일 되면 public 폴더 밑에 새로 파일이 생긴다.
파일 명명 규칙
controller : 맨 앞 문자 대문자로, 단수형 ex) BookController
model : 맨 앞 문자 대문자로, 단수형 ex) Book
table : 복수형 ex) books
migration : 날짜(자동으로 정해줌)_create_테이블명_table.php
라라벨에서 추천하는 CRUD 개발 방식
전송 방식 | url | 함수 이름 | view 파일 이름(경로) |
GET | /photos (book list) | index | photos.index |
GET | /photos/create (book 생성 페이지) | create | photos.create |
POST | /photos (book 실제로 생성하는 로직) | store | photos.store |
GET | /photos/{photo} (book detail) | show | photos.show |
GET | /photos/{photo}/edit (book 수정 페이지) | edit | photos.edit |
PUT/PATCH | /photos/{photo} (book 실제로 수정하는 로직) | update | photos.update |
DELETE | /photos/{photo} (book 삭제하는 로직) | destroy | comments.destroy |
controller 안에다 함수를 하나하나 직접 만들어서 구현하는 것도 좋지만 라라벨에서 지원하는 리소스 컨트롤러를 이용하면 함수가 자동으로 만들어져서 controller가 만들어진다.
php artisan make:controller 컨트롤러명 --resource
form에서 post로 넘어온 값 받고 저장하기
Route::post('/books', [BookController::class, 'store']);
public function store(Request $request)
{
// Book 모델의 create함수를 이용하여 books 테이블에 값 넣기
$book = Book::create([ // 새로 생성된 레코드들이 book변수에 대입됨
'title'=>$request->input('title'), // form name으로 값 받기
//'title'=>request('title') 도 됨
'content'=>$request->input('content')
]);
// 같음 $book = Book::create(request(['title', 'content']));
return redirect('/books');
}
form에서 csrf 추가
model에다 fillable 추가
CSRF
csrf란, 크로스-사이트 요청 위조 공격이다.
라라벨은 csrf로부터 애플리케이션을 보호할 수 있는 기능을 제공하기 때문에 form에서 값을 넘기려면 이 기능을 꼭 사용해야한다.
웹페이지의 헤더 안에다 아래의 코드를 추가한다.
<meta name="csrf-token" content="{{ csrf_token() }}">
그리고 form 안에다가 @csrf 키워드를 추가한다.
<form action="/books" method="POST">
@csrf
...생략
</form>
fillable
모델 파일안에다 데이터베이스에 insert or update할 수 있는 필드를 정하는 것이다.
모델 파일 안에 fillable을 정하지 않으면 오류가 난다.
protected $fillable = ['title', 'content'];
<->
guarded
fillable과 반대로 해당 필드를 db에 insert or update 못하게 하는 것이다.
protected $guarded = ['title', 'content'];
get 방식 값 받는 법
url : /books/2
web.php :
Route::get('/books/{book}', [BookController::class, 'show']);
controller : (같은 변수명으로 받아야한다.)
public function show($book)
{
return view('books.show',['book'=>$book]);
}
이렇게 하면 $book에 2가 들어가서 show에서 $book으로 2를 출력할 수 있음.
public function show(Book $book)
{
return view('books.show',['book'=>$book]);
}
이렇게 하면 id가 2인 books 테이블의 레코드를 가져올 수 있음.(모든 값! title, content...등)
form 데이터 PUT 방식으로 보내기
CRUD에서 U 부분 만들 때 PUT 방식으로 보내야 하는데 form method를 post로 놓은 상태에서 @method('PUT') 키워드를 추가하면 된다.
<form action="/books/{{ $book->id }}" method="POST">
@csrf
@method('PUT')
...생략
</form>
Route::put('/books/{book}', [BookController::class, 'update']);
db 데이터 update 하기
public function update(Book $book)
{
$book->update([
'title'=>request('title'),
'content'=>request('content')
]);
return redirect('/books/'.$book->id);
}
db 데이터 delete하기
DELETE 방식으로 데이터를 보낸다.
<form action="/books/{{ $book->id }}" method="post">
@csrf
@method('DELETE')
<input type="submit" class="btn btn-outline-danger">삭제</button>
</form>
web.php :
Route::delete('/books/{book}', [BookController::class, 'destroy']);
controller :
public function destroy(Book $book)
{
$book->delete();
return redirect('/books');
}
'Framework > Laravel' 카테고리의 다른 글
Laravel Model 관계(Eloquent Relationship) (0) | 2022.01.19 |
---|---|
form validation과 jetstream, 로그인한 user 알아내기, 리소스 라우팅 (0) | 2022.01.18 |
artisan 명령어와 라우팅, 미들웨어, namespace, use (0) | 2022.01.15 |
블레이드 템플릿과 데이터 넘기는 법, DB연결, Migration (0) | 2022.01.14 |
Laravel 설치와 VSCode 세팅, 라라벨 프로젝트 구조 (0) | 2022.01.13 |