노출되는 이미지가 불편하시겠지만 양해를 구합니다. 노출, 클릭등에 관한 자료로 활용 중입니다.


Laravel(라라벨) 기초 요약

( 주로 Laravel 5.0~5.2 )





1) 어플리케이션 키



-- 세션 데이타를 암호화 하거나 laravel의 암호 패키지인 Crypt클래스로 암/복호화할떄 사용


-- composer나 installer가 프로젝트를 생성시에는 마지막 단계에서 키가 자동 생성됨


-- 임의로 직접 생성 : php artisan key:generate


-- 생성된 APP_KEY는 .env에 저장됨

   : 여러대의 서버를 운영할때는 동일 .env 파일을 사용해야 함


-- 키가 설정되어 있지 않다면, config/app.php에 설정된 기본키를 사용(보안 취약)




2) 설정 파일



-- 데이타 베이스 : config/database.php


    : key/value형식의 배열로 관리


    ex) 'host' => env('DB_HOST', 'localhost')

        : 환경 설정파일인 .env에서 DB_HOST항목을 읽고, 없으면 localhost를 사용


    : 'default' => 'mysql' 의 수정으로 데이타베이스 변경


-- 파일을 위한 캐시 : config/cache.php


-- 메일 설정 : config/mail.php


-- laravel 환경 설정 : config/app.php


    : 'debug' => env('APP_DEBUG', false) 에서 true로 변경하면


    : 'timezone' => 'Asia/Seoul'


    : 'url' => 'http://sample.com'

 

    : 'locale' => 'ko'   # 기본 locale은 en으로 되어 있음


    : 'log' => env('APP_LOG', 'single')  # 어플로그를 단일 파일로 로그는 남기는 설정


        ex) storage/logs/laravel.log 




3) laravel routing(라우팅)





-- url routing은 클라이언트가 요청한 url과 요청방식(get,post,delete,put등)에 따른 서버의 처리방식을 지정


-- Pretty UTL은 RESTful 기반의 웹서비스 제공


   ex) index.php?action=view&article=123


   ex) index.php/view/article/123


-- MVC패턴의 가장 앞에 위치하여 Front Controller라고 함


-- 라우팅 설정 : app/Http/routes.php ( Laravel 5.0~5.2 )

-- 라우팅 설정 : routes/web.php ( Laravel 5.3 )



--- 기본적인 라우트


Route::get('hello', function() {
    return 'Hello!';
});


--- 계층 구조


Route::get('hello/world', function(){
    return 'Hello World!';
});


--- 파라미터 전달

Route::get('hello/world/{name}', function($name){
    return 'Hello World!' . $name ;
});


--- 파라미터 전달 ( null 또는 default )

Route::get('hello/world/{name?}', function($name=null){
     return 'Hello World!' . $name ;
});


4) HTTP 응답


--- Response Class 사용


use Illuminate\Http\Response;
Route::get('hello/world/{name}', function(name) {
    $response = new Response('Hello World', $name, 200);
     return $response;
});


* use구문 선언과, new 객체를 통해 생성 번거롭다



--- response Helper Class 사용 ( use, new를 사용 안함)


Route::get('hello/world/{name}', function(name){
    $response = new Response('Hello World', $name, 200);
     return response('Hello World'. $name, 200)->header('Content-Type','text/plain');
});


* Method Chaining 가능 / 다중 헤더 설정



Route::get('hello/world/{name}', function(name){
    $response = new Response('Hello World', $name, 200);
    return response('Hello World'. $name, 200)
     ->header('Content-Type','text/plain')
     ->header('Cache-Control','max-age=' . 60*60. ".must-revalidate")  
});



* JSON 데이타 형식



Route::get('hello/world/{name}', function(name){
    $data = ['name' => 'Iron Man', 'gender'=>'Man'];
    return response()->json($data);
});


5) Views


--- View Class 사용 ( 점(.)을 계층 구분 )


Route::get('hello/html', function() {
    return View::make('hello.html');
});


* 위치 : resources/views/hello/html.php ( Views위치는 Laravel 5.0~5.3 동일 )


(laravel의 모든 view는 resources/view폴더에 위치 )



--- view Helper Class 사용

Route::get('hello/html', function() {
    return view('hello.html');
});

});


--- view에 변수 전달 


1) app/http/routes.php


 

Route::get('task/view', function() {
    $task = ['name' => 'Task 1', 'due_date' => '2015-06-01 12:00:11'];
 
    return view('task.view')->with('task', $task);
});



2) resource/views/task/view.php


 

< !doctype html >
< html lang="ko">
 <head>
     <meta charset="UTF-8">
     <title>Ok</title>
 </head>
 <body>
     <h1>할일 정보</h1>
     <p> 할 일: <?= $task['name'] ?></p>
     <p> 기 한:   <?= $task['due_date'] ?></p>
 </body>
</html>



6) Blade


: laravel에 포함 되어 있는 Template Engine

: 기본 View와 구분하기 위해 Blade Template 파일은 .blade.php의 확장자 사용


-- 변수 출력 : {{ $var }} 를 사용 ( <?= $var ?> 과 동일한 기능)

    : XSS, Cross-Site Scripting의 악의적인 자바스크립트 동작 막기

 
<!doctype html>
<html lang="ko">
 <head>
     <meta charset="UTF-8">
     <title>Ok</title>
 </head>
 <body>
     <h1>할일 정보</h1>
     <p> 작 업: {{ $task['name'] }} </p>
     <p> 기 한: {{ $task['due_date'] }} </p>
 </body>
</html>

-- 조건문 : 키워드 앞에 @를 붙여 준다.

1) 기존 php 코드
 
= 5) { ?>
 

는 5 보다 큽니다.

* php의 복잡한 코드는 가독성도 떨어지고, 실수할 여지가 많다. 2) Blade 조건문
 
@if ($num > 5)
 

{{ $num }} 는 5 보다 큽니다.

@else

{{ $num }} 은 5보다 작습니다.

@endif


7) Layout 상속


1) resources/views/layouts/master.blade.php
<!DOCTYPE html>
<html lang='ko'>
<head>
    <meta charset='utf-8'>
    <title> @yield('title')</title>
    <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container'>
        @yield('content')
    </div>
</body>
</html> 


* @yield : 자식 컨텐츠에 구현하도록 양보하는 키워드 ( @section 키워드로 구현 )
* @extends : 자식 페이지는 상속할 부모 템플릿을 extends 키워드로 지정
2) resources/views/task/list3.blade.php
 
@extends('layouts.master')
@section('title')
    할일 목록
@endsection
  
@section('content')
    
        @foreach($tasks as $task)
            
        @endforeach
        
할 일 기 한
{{ $task['name'] }} {{ $task['due_date'] }}
@endsection

* Layout 상속 : https://www.lesstif.com/pages/viewpage.action?pageId=24445482



8) Blade 디버깅


- Blade Template : Blade Compiler -> Legacy PHP Code(파일명 변경됨) ->PHP Engine




- 컴파일된 파일 : storage/framework/view 폴더에 위치



원문 :

https://www.lesstif.com/pages/viewpage.action?pageId=28606603

쉽게 배우는 라라벨5 프로그래밍, 2016, Sep



블로그 이미지

StartGuide

I want to share the basic to programming of each category and how to solve the error. This basic instruction can be extended further. And I have been worked in southeast Asia more than 3 years. And I want to have the chance to work another country.

,