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 | 31 |
Tags
- 우분투 20.04
- 옵지
- upbit
- 프레임워크
- 라즈베리파이
- 우분투
- Ubuntu 20.04
- 코드이그나이터
- ubuntu
- 라라벨
- 회고
- 20.04
- TiL
- 업비트
- FMS
- C
- codeigniter
- 셀레니움
- 라즈비안
- 맛집
- 제주도
- 옵티머스 g
- Raspberry Pi
- Laravel
- 맥
- MySQL
- 옵티머스g
- 옵G
- Selenium
- php
Archives
- Today
- Total
평범한 이야기들
[TIL] PHP Laravel - MVC, HTTP 메서드, 라우트(Route) 본문
728x90
MVC
- 모델 (model) : 개별적인 데이터 테이블(하나의 레코드)을 표현
- 뷰 (view) : 데이터를 가공해 사용자에게 결과물을 전달하는 템플릿 (html, css, js로 이루어진)
- 컨트롤러(controller) : 브라우저를 통해 유입되는 http 요청을 받아 사용자의 입력 값을 검증한 뒤, 데이터베이스와 스토리지에서 필요한 데이터를 조회하고, 결과를 사용자에 응답하도록 제어하는 역할
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;
});
결과 화면
728x90
Comments