IT/development

[php] laravel MVC 패턴(laravel ver 8.83.2)

알 수 없는 사용자 2022. 11. 24. 06:17
반응형

목차

    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이라고 한다.(아래 참조)

     

    라라벨 8.x - 시작하기

    라라벨 한글 메뉴얼 8.x - 시작하기

    laravel.kr

     

    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 

     

    [PHP] Laravel에서의 MVC 패턴 구현

    이번 포스팅에서는 Laravel에서 어떻게 MVC 패턴을 구현하는지 알아보겠습니다. 아마도 java spring을 접해 보셨다면 구조 파악에 어렵지 않을 듯싶습니다. 본 포스팅은 MVC 패턴 이용한 메모 웹을 만

    dev-overload.tistory.com

     

    라라벨 8.x - 뷰

    라라벨 한글 메뉴얼 8.x - 뷰

    laravel.kr

    반응형