IT/development

[php] laravel MVC ํŒจํ„ด(laravel ver 8.83.2)

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2022. 11. 24.

๋ชฉ์ฐจ

    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

    ๋Œ“๊ธ€