목차
laravel MVC 패턴에 대해 기록한다.
전체적인 프로세스는 아래와 같다.
java spring을 해봤다면 수월하게 이해할 수 있을 듯 싶다.
로컬 개발환경 : 라라벨 ver 8.83.2
DB접속 설정😀
먼저 접속할 DB를 설정한다, 전역적인 설정은 .env에서 한다.
그리고 config의 database.php의 db접속정보를 수정한다.(.env와 맞춰서)
env와 맞춰서 적어야 되는 이유가 48 ~ 54 line을 보면 => env('정보') 이런식으로 되어 있어서
딱봐도 database.php에서 .env파일의 내용을 불러온다는 걸 추측할 수 있다.
아마 틀리게 적으면 에러가 나지 않을까?🤔
URL 매핑😗
일단 클라이언트의 모든 요청은 routes/web.php가 받아서 요청에 따른 컨트롤러를 결정하고
컨트롤러에서는 요청 받은 내용을 수행(만일 DB 처리가 필요한 경우면 Model을 통해 작업 수행) 후 전달할 데이터와 뷰를 클라이언트에게 반환한다.
추정컨대 파일명도 그렇고 spring MVC의 web.xml의 역할을 하는게 아닐까 싶다.
테스트를 위해 기존 web.php파일 백업 후 routes/web.php에서 아래처럼 코드를 수정한다.
경로 : C:\xampp\htdocs\프로젝트명\routes
<?php
use Illuminate\Support\Facades\Route;
use app\Http\Controllers\MainController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/main','App\Http\Controllers\MainController@index')->name('index');
위 코드가 의미하는 건 브라우저에서 "127.0.0.1:8000/main"호출 시 MainController의 index function에서 처리를 할 것이고 return받는 view이름은 index.blade.php로 하겠다는 의미이다.
이게 나중에는 아래처럼 많아질 것이다.
Controller🤩
이제 요청을 처리하기 위한 MainController를 artisan 명령어를 통해 만들어 보겠다.
위 명령어로 MainController라는 컨트롤러를 만들면 App > http > Controllers에 생성된다.
아래는 간단한 컨트롤러 코드 예시다.
웹 최초 호출 시 board(미리 생성) 테이블에서 데이터 가져와서 $memos에 담은 후 index.blade.php에 데이터를 전달하는 예제이다.
※ namespace : java의 package
use : java의 import와 비슷하다고 보면 됨
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//Memo 모델을 사용한다.
use App\Models\Memo;
class MainController extends Controller
{
// 요청처리 함수
public function index(){
// board 테이블에서 메모 생성 날짜 기준 내림차순으로 정렬해 가져온다.
// orderBy()는 Illuminate ORM에서 제공하는 함수다. 1번 째 인자값은 컬럼, 2번 째는 정렬방식(asc, desc)
$memos = Memo::orderBy('regdate', 'desc')->get();
//index view와 가져온 메모 데이터를 렌더링해 브라우저에 출력, 값을 화면에 넘길 땐 compact() 사용
return view('index',compact('memos'));
// return view('index')->with('memos',$memos); 이것도 맞는 표현, 마치 spring의 model.addAttribute() 같다.
}
}
위에서 DB처리는 App/Models/Memo.php에서 처리한다.
<?php
namespace App;
use App\Models\Memo;
use Illuminate\Database\Eloquent\Model;
class Memo extends Model
{ // 테이블명
protected $table ='board';
// 컬럼명
protected $fillable =['content'];
}
위 코드에서 Eloquent은 ORM이라고 한다.(아래 참조)
view😛
그리고 화면에 전달할 view(index.blade.php)를 만들고 아래처럼 수정한다.
<!-- master.blade.php 있다는 가정하 -->
@extends('master')
<h2>출력 테스트</h2>
@foreach($memos as $memo)
<table border="solid 1 px;">
<tr>
<td>
<span>{{$memo->bno}}</span> <br>
</td>
<td>
<span>{{$memo->title}}</span> <br>
</td>
<td>
<span>{{$memo->content}}</span> <br>
</td>
<td>
<span>{{$memo->writer}}</span> <br>
</td>
<td>
<span>{{$memo->regdate}}</span> <br>
</td>
</tr>
</table>
@endforeach
경로 : 프로젝트명/resources > views
라라벨에서는 이를 view 스크립트라고 하고 .blade.php라는 확장자를 사용하며 블레이드 템플릿이라 함.
*.blade.php는 artisan make 명령어를 통한 자동 생성을 별도로 지원하지 않기에 직접 생성 필요.
실제 DB 데이터 출력화면😆
mariaDB board 테이블에서 content값 regdate 기준으로 내림차순 정렬해서 출력 성공
blade template 문법😗
laravel은 화면 템플릿끼리 상속이 된다고 한다.
index.blade.php(MainController에서 처리한 결과를 보여줄 템플릿)
footer.blade.php(하단 템플릿)
공통적으로 사용할 최상위 템플릿 master.blade.php(부모 템플릿)
템플릿 페이지 호출 결과😅
아래 블로그가 많이 도움 되었습니다. 감사합니다.😀
참조 : E: overload, 2020.03.03, https://dev-overload.tistory.com/4?category=841810
'IT > development' 카테고리의 다른 글
[전자정부프레임워크/egovframework] log4j 2 설정(log4j2.xml 등) (0) | 2022.11.24 |
---|---|
[webServer/apache] (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 에러... (0) | 2022.11.24 |
[IDE] eclipse quick fix 작동 안될 때...(feat. stackoverflow) (0) | 2022.11.24 |
[Java] Java 프로그램 실행과정(feat. TCPSchool) (0) | 2022.11.23 |
[Java] Java String convert to byte[], byte[] convert to String (2) | 2022.11.23 |