Giter Club home page Giter Club logo

l5essential's Introduction

라라벨 (Laravel) 5 입문 및 실전 강좌

Build Status

라라벨은 PHP 언어로 개발된 풀스택 MVC 웹 어플리케이션 프레임웍이다.

종이책 출간 안내

http://blog.appkr.dev/work-n-play/laravel-paper-book-published/

이 강좌를 처음 시작하시는 분들께

2016년 4월 현재 laravel/framework 프로젝트에는 13,000개가 넘는 이슈와 거의 13,000개에 육박하는 커밋이 등록되어 있다. 곧 라라벨 탄생 5주기가 되는데, 5년 동안의 행적치고는 엄청나다. 라라벨이 살아 있다는 증거다. 이 강좌는 1월 말에 다썼다. 불과 3달 남짓 동안 또 엄청난 변화가 있었다. 이 강좌를 읽기 전에, #10 를 꼭 읽고 시작하시기 바란다. 이 강좌에서 수정 적용할 부분을 기록해 두었다.

라이브 데모 사이트

클라우드 비용이 꽤 나와서 라이브 데모 사이트는 폐지했다. 대신 강의 내용만 모아 댓글이 가능한 정적 사이트(http://l5.appkr.dev)로 오픈해 두었다.

목적

  1. 라라벨 입문을 돕는다.
  2. 실전 강좌를 통해 중급 이상의 개발자로 성장할 수 있도록 돕는다.
  3. 모던 개발 방법론과 베스트 프랙티스를 전파하여, 국내 PHP 개발자 생태계가 진화할 수 있도록 일조한다.

목표

  1. 8 시간 정도에 라라벨의 기본기를 모두 마스터하는 것을 목표로 한다. (1강 ~ 25강)
  2. 제시된 실전 프로젝트를 통해 중급 이상의 라라벨 개발자로 성장하도록 한다. (26강 ~ 계속 연재 중)

다루지 않는 것들

강좌를 진행하기 위해 사용하지만, 설명하지 않는 것들이다.

  1. PHP 문법
  2. 웹 프로그래밍 일반론
  3. 객체 지향 프로그래밍(OOP) 일반론
  4. 프론트엔드 프로그래밍 일반론

같이 배워 볼 주제들

[입문코스] 라라벨 프레임 입문

라라벨 입문자들이 꼭 알아야 하는 내용만 추렸다 (고 생각한다).

[중급코스] 실전 프로젝트

총 3개의 실전 프로젝트를 같이 만들어 본다.

1. Markdown Viewer

마크다운으로 작성된 이 강좌들을 HTML 뷰로 나이스하게 보여주는 기능을 구현해 본다. 이를 통해 Filesystem, Custom Helper, Cache, Elixir 등의 라라벨 기능을 살펴볼 예정이다.

2. Forum

StackOverflow 처럼 댓글이 가능한 포럼을 구현해 본다. 이를 통해 HTTP Request & Response 에 대한 이해를 높인다. 뿐만 아니라, 라라벨을 이용한 CRUD, Event, File/Image Upload, 인증과 권한부여 등에 대해 배워볼 예정이다.

3. RESTful API

Forum 에서 생성된 게시글/댓글을 JSON API 로 외부에 노출하여, 외부 앱들이 Forum 서비스와 상호 작용할 수 있도록 해 본다. 실험을 위해 프론트엔드 프레임웍을 이용한 간단한 모바일 앱도 만들어 볼 것이다.

번외. 기타 알면 좋은 내용들

이 강좌를 보는 방법

강좌들은 Markdown 문법으로 작성되어 있으므로 Github에서 보는 것이 좋다. 이미 PHP 언어와 라라벨을 좀 아는 분이라면, 강좌를 눈으로 읽고 머리로 이해하는 것도 도움이 된다. 강좌의 내용과 더불어, Github Commit 로그 를 이용해서 이전 강좌 대비 달라진 부분들을 보는 것도 좋은 방법이다.

그런데 필자는 이미 만들어진 소스코드를 눈으로 읽는 것 보다, 한 문장, 한 단락씩 따라하면서 실제 실습해 볼 것을 적극 권장한다. 강좌의 단계별 소스코드는 Git Tag 로 저장되어 있다. 먼저 이 프로젝트를 클론하고, 원하는 강좌로 체크아웃하자.

$ git clone [email protected]:appkr/l5essential.git myProject
$ cd myProject
$ composer install # composer가 설치되어 있지 않다면 2강을 참조해서 설치하자.
$ git checkout 03(tab & enter)

참고 학생들과 만나보면, 콘솔을 쓸 줄 모르는 분들이 많다. 문서에 나온 코드 블럭 중에서 $ (윈도우즈의 경우 \>) 로 시작하는 명령들은 콘솔에서 실행하라는 의미이다. 가령, $ ls -al 이라 써 있으면, 콘솔에서 ls -al (enter) 를 하라는 의미이다. 콘솔 명령 블럭에서 # ... 은 주석이다.

Contributors / Sponsors

기여 가이드 를 따라 주세요.

"모두 모두 감사합니다."

라이센스

  • 강좌에 사용된 코드는 MIT 라이센스를 따른다.
  • 강좌 자체는 CC BY-NC 라이센스를 따른다.

l5essential's People

Contributors

appkr avatar corean avatar luiseok avatar zemna avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

l5essential's Issues

향후 이 강좌의 로드맵

여러 분들의 격려와 응원속에 이 강좌는 막바지로 치닫고 있습니다. 이건 꼭 써야겠다는 내용 몇 강만 더 쓰고, 마무리 지으려고 합니다.

해서, 향후 이 강좌 및 필자의 로드맵에 대해 공유해 드립니다. 약속한 내용이니 실천하도록 최선의 노력을 하겠습니다.

  1. 책으로 출간될 예정입니다.

온라인 강좌를 진행하면서 실수를 꽤 많이 했지요. 정작 지금에 와서 필요없는 패키지를 끌어오기도 했고, 버그가 있어 이후 강좌에서 정정하기도 하고... 동료 개발자로서 이런 삽질을 지켜보는 것도 이 강좌의 독자 여러분에게 도움이 되었다 생각합니다. 어쨌든 이런 오류가 없는 깔끔한 책으로, 빠르면 상반기 중에 출간할 예정입니다.

이 강좌와 라이브 데모 사이트는 그대로 남아 있으면서, 기존 온/오프 독자들과 소통하는 역할을 할 것입니다.
2. 오프라인 강좌를 계획하고 있습니다.

이미 수 차례 소규모 수강생을 대상으로 입문편만 8시간 정도로 진행하는 강의를 시전한 바 있습니다. 프로그래밍을 처음 접하는 분들과 만나고 싶기도 하고, 이미 PHP 를 사용하는 개발자분들을 만나고 싶기도 합니다.

프로그래밍 입문자들에게는 올바른 방향과 베스트 프랙티스를 가르쳐 주고, PHP 개발자들에게는 모던 PHP 를 전파하기 위해서입니다. 해서, "근본도 없는 PHP, 일관성 없는 PHP" 이런 얘기 싸잡아 듣지 않도록 다같이 노력하자고 설파할 것입니다.
3. 국내 라라벨 사용자 확대에 힘쓰겠습니다.

현재 국내에는 LaravelKorea, XE 팀, Modern PHP User Group, ... 등이 주축이 되어 라라벨 관련 온/오프라인 스터디, 정보 공유, 한글화 작업, ... 등을 하고 있습니다.

필자도 이 모임들에 적극적으로 참여하고 기여하고 있습니다. 더불어, 라라벨 관련하여 여러분들이 요청/질의 하시는 내용이 있다면, 필자가 도울 수 있도록 노력할테니 주저 마시고, Github Issue, 이메일, 라이브 데모 사이트의 포럼 등을 통해 저에게 연락 주십시오.

고맙습니다.

appkr.

라이브 데모 사이트 폐지 안내

그간 제가 가지고 있던 AWS Credit으로 버텼는데, 여러분들이 많이 이용해 주셔서 생각보다 요금이 많이 나오네요. 강좌는 Github에서 바로 보시거나, 로컬에 저장소를 클론해서 이용해 주세요. 갑작스럽게 닫게 되어 죄송합니다.

고맙습니다.

저장시 관계 문제

좋은 글 감사합니다.
현재 포럼 ArticleController를 하던중
$article = Article::create($request->all());
데이타 베이스 관계관련 에러가 나오네요.
아마 author_id의 입력때문인것 같은데요.

$article = new Article();
$article->title = $request->input('title');
$article->content = $request->input('content');
$article->notification = $request->input('notification');
$article->author_id = \Auth::id();
$article->save();
이렇게 해서 오류를 피했습니다.
혹시 다른 부분(모델등)에서 빼놓은게 있을까요?

이 강좌를 응원합니다!

Laravel 4.2 로 몇 차례 진행하다 이번에 5.1로 첫 프로젝트를 진행중입니다.
본 강좌덕분에 5.1 적응에 많은 도움이 되어 프오젝트 시간 단축에 도움이 되었습니다. 너무 감사드립니다.

지방이라 모임에 나가서 대접해드리기도 어려운데...
해외 개발자들처럼 맥주나 커피 쏘기... 이런 링크 하나 만드시죠?
국내에서 흔치 않지만 개척자가 되어 보셨으면 합니다.^^

만드시면 저는 무조건 쏩니다. :)

가능하면 데모 사이트도 l5.appkr.kr 처럼 고정된 짧은 주소이면 홍보하기 좋을 것 같아요.

tag 입력값 없을때 sync()오류

https://github.com/appkr/l5essential/blob/master/app/Http/Controllers/ArticlesController.php#L87

입력받을때 tag를 선택을 안하면 저장할때 오류가 나와서
Argument 1 passed to Illuminate\Database\Eloquent\Relations\BelongsToMany::formatSyncList() must be of the type array, null given, called

$article->tags()->sync($request->input('tags'));에 if문을 추가하였습니다.

if ($request->input('tags')) {
$article->tags()->sync($request->input('tags'));
}

Session @Laravel5.2, @Laravel.5.2.27

최근에 이 강좌를 따라하시는 분이라면, $ laravel new myProject 명령으로 새로운 프로젝트를 생성했을 때 5.2 버전이 설치될 것입니다.

이 때 5.2 버전 부터 도입된 $middlewareGroups 때문에 세션이 유지되지 않는 (== 로그인이 되지 않는) 문제가 있을 겁니다.

해결하는 방법은

  1. 라우팅 정의를 Route::group(['middleware' => ['web']], function () { /* 라우팅 정의는 여기에.. */ }); 로 싸주거나,
// app/Http/route.php

Route::group(['middleware' => ['web']], function () {
  // Routing definition here...
});
  1. $middlewareGroups 속성을 쓰지 않는 방법입니다.
// app/Http/Kernel.php

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
];

// protected $middlewareGroups = [
//     'web' => [
//         \App\Http\Middleware\EncryptCookies::class,
//         \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
//         \Illuminate\Session\Middleware\StartSession::class,
//         \Illuminate\View\Middleware\ShareErrorsFromSession::class,
//         \App\Http\Middleware\VerifyCsrfToken::class,
//     ],
// 
//     'api' => [
//         'throttle:60,1',
//     ],
// ];

이 강좌가 5.1 기준으로 쓰여졌으므로, 우선 2 의 방법을 사용하실 것을 권장합니다.

Happy coding~

20강 이슈가 있습니다

2016-02-24 3 16 59

20강 위 사진과 같은 부분에서 "Missing argument 2" 에러가 발생합니다.
$bindings와 $time 없이 아래와 같이 해주니 잘 돌아갑니다 :)

DB::listen(function($sql) {
    var_dump($sql);
});

06-blade-101.md - 오탈자 및 양식 오류

  • 오탈자
    와 같이 HTML 주석으로 컴파일 된다. 그럼데 브라우저에서 소스보기로 보면 엄연히 다르다
    ->
    와 같이 HTML 주석으로 컴파일 된다. 그런데 브라우저에서 소스보기로 보면 엄연히 다르다
  • 양식오류
    {{-- --}} - Comment
    의 html 소스 부분에 오류가 있어서 인지 아래 @foreach와 겹쳐진거 같습니다.

질문 겸 이슈입니다.

좋은 강좌 감사합니다 :)

순서대로 따라해보다가 13-restful-resource-controller.md에서 TokenMismatchException 부분을 따라해보고 있습니다.

간단한... 이슈

제일 아래 부분에 "POST http://localhost:8000/posts가 정상 동작하는 것을 확인한 후, 이번에는 POST http://localhost:8000/posts/1 으로 요청해 보자." 라고 써놓으셨는데 /posts/1 은 위에 php artisan route:list CLI 명령어를 보시면 POST가 없네요.

질문

그리고 POST http://localhost:8000/posts는 정상 동작하는데, 이 부분에서 막혀야 하는게 아닌가... 궁금하네요. POST 방식으로 http://localhost:8000/posts 이 경로로 데이터를 포함해서 보내는데 csrf 오류가 나야하지 않는지...

27강 - Document 컨트롤러 View 오류의 건

좋은강좌 잘 보고 있습니다~ ^^

27강에서 뷰 생성시 블레이드 코드가 잘못 된 듯 해서 글 남깁니다.
resources/views/documents/index.blade.php

{{ $index }} -> {!! $index !!}
{{ $content }} -> {!! $content !!}

이렇게 {!! !!} 로 처리를 해야하지 않나요? 저는 학습하면서 {{ }} 로는 텍스트로 인식이되어 위와 같이 변경을 해서 처리했습니다.

7강 오타가 있습니다.

마스터 레이아웃 사용하기의 하단 내용에 오타가 있었습니다.

exam

이 부분에서, 내용과 같이 index.php로 파일명을 하여 실행하면

[@extends('master') @section('content') Your Content here!! @Stop] 이렇게 결과가 나왔습니다.

파일명을 index.blade.php로 수정하여 실행하자,

[Your content here!! ] 이라는 정상적인 결과가 나왔습니다:)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.