Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Ubuntu 20.04
- 맛집
- 셀레니움
- C
- 옵티머스 g
- codeigniter
- 맥
- 회고
- 라즈베리파이
- ubuntu
- Laravel
- 라즈비안
- upbit
- 옵티머스g
- 프레임워크
- 20.04
- 라라벨
- 옵G
- Raspberry Pi
- 우분투 20.04
- 제주도
- 업비트
- php
- 우분투
- MySQL
- 코드이그나이터
- Selenium
- FMS
- 옵지
- TiL
Archives
- Today
- Total
평범한 이야기들
[TIL] PHP Laravel - View, Controller (뷰, 컨트롤러) 본문
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