오탈자 신고해 주세요.
책을 읽다가 오탈자를 발견하시면 신고해 주세요. 이 글에 댓글로 써 주세요.
- 페이지 번호
- 오탈자 내용
을 써 주시면 됩니다.
혹시라도 이 책을 다시 찍게 된다면, 후배 독자들이 더 완성도 있는 책을 읽을 수 있을 겁니다. 이 저장소는 깃허브가 서비스를 접을 때까지, 삭제하지 않을 것이므로 여러분들의 기여가 영구적으로 보관됩니다.
고맙습니다.
page 29 by @appkr
-ul>li*3>a + Tab을 입력하고 Tab 키를 누르면
+ul>li*3>a를 입력하고 Tab 키를 누르면
page 52 by @mAKEkr
// 코드 7-1
public function down() {
- Schema::drop('posts');
+ Schema::dropIfExists('posts');
}
page 53 by @mAKEkr
-Schema::drop(string $table) 테이블을 지운다.
+Schema::dropIfExists(string $table) 테이블을 지운다.
page 64 by @namo429
// 표 8-1
-ArticlesController@delete
+ArticlesController@destroy
page 64 by @appkr
// 표 8-1 라라벨 5.2까지는 RESTful 리소스 라우트에서 복수형의 라우트 파라미터를 쓰다가 5.3부터 단수로 바뀌었습니다.
-{articles}
+{article}
page 72 by @show0910
// 그림 9-1 웹 브라우저의 마지막 쿠키 기록 부분
-expires=zzz
+expires=aaa
page 89 by @mAKEkr
// 콘솔 10-7
+2번 사용자가 없으면 1번 사용자를 이용한다. App\User::find(1)->articles()->...
>>> App\User::find(2)->articles()->create([
... 'title' => 'Second article',
... 'content' => 'Second content',
... ]);
page 101 by @show0910
-코드 12-3을 참고해서 포럼 글 목록을 포시할 뷰를 만들자.
+코드 12-3을 참고해서 포럼 글 목록을 표시할 뷰를 만들자.
page 122 by @mAKEkr
// 코드 블록 제목
-코드 14-4 app/Http/Listeners/ArticlesEventListener.php
+코드 14-4 app/Listeners/ArticlesEventListener.php
page 123 by @mAKEkr
// 코드 블록 제목
-코드 14-6 app/Http/Events/ArticleCreated.php
+코드 14-6 app/Events/ArticleCreated.php
page 129 by @dspaudio
-wehreEmail()은 동적 메서드다
+whereEmail()은 동적 메서드다
page 137 by @corean
-string g iven
+string given
page 223 by @namo429
// 코드 블록 타이틀
-코드 23-14 app/Events/ArticleCreated.php
+코드 23-14 app/Events/UserCreated.php
```diff
page 223 by @namo429
// 코드 23-14
-class UserCreated extends Event
+class UserCreated
page 228 by @corean
-코드 23-21를 참고하여
+코드 23-12와 다음 코드 블록을 참고하여
page 232 by @namo429
// 코드 23-27 비밀번호 변경 로직 누락분 추가
public function postReset(Request $request)
{
$this->validate($request, [
'email' => 'required|email|exists:users',
'password' => 'required|confirmed',
'token' => 'required'
]);
$token = $request->get('token');
if (! \DB::table('password_resets')->whereToken($token)->first()) {
return $this->respondError('URL이 정확하지 않습니다.');
}
+ \App\User::whereEmail($request->input('email'))->first()->update([
+ 'password' => bcrypt($request->input('password'))
+ ]);
\DB::table('password_resets')->whereToken($token)->delete();
return $this->respondSuccess(
'비밀번호를 바꾸었습니다. 새로운 비밀번호로 로그인하세요.'
);
}
page 233 by @namo429
// 코드 23-29
-class PasswordRemindCreated extends Event
+class PasswordRemindCreated
page 250 by @namo429
// 코드 25-1
-parent::boot($router);
+parent::boot();
page 262 by @dalicom
// 코드 25-18 아래 설명
-$gate->define('update', function ($user, $model) {...})
+Gate::define('update', function ($user, $model) {...})
page 266 by @dalicom
// 코드 25-25 아래 설명
-$gate->before(function ($user, $ability) { ... }
+Gate::before(function ($user, $ability) { ... })
page 285 by @namo429
// 코드 27-13
-{{ $file->filename }} ({{ $file->bytes }})
+{{ $attachment->filename }} ({{ $attachment->bytes }})
page 287 by @namo429
// 코드 블록 제목
-코드 27-17 routes/web.php
+코드 27-17 resources/views/articles/partial/form.blade.php
page 305 by @namo429
// 코드 28-13
-public function boot(Router $router)
+public function boot()
-parent::boot($router);
+parent::boot();
page 327 by by @namo429
// 코드 29-12
-class CommentsEvent extends Event
+class CommentsEvent
page 347 by @namo429
// 코드 블록 제목
-코드 29-40 app/Http/Controller/Cacheable.php
+코드 29-40 app/Http/Controllers/Cacheable.php
// 코드 29-40
-namespace App\Http\Cacheable.php;
+namespace App\Http\Controllers;
page 352 by @dalicom
// 코드 30-4의 파일 경로가 틀렸고, 편집 오류로 2개의 코드 블록으로 분리되어야 합니다.
-resources/lang/ko/comments.php
+resources/lang/ko/forum.php
page 407 by @dalicom
// 코드 34-3
-public function transform(\App\Article $item)
+public function transform(\App\Article $article)
page 497 by @tiher
-PSR-2 표준 권고안은 어디까지나 elsif다
+PSR-2 표준 권고안은 어디까지나 elseif다
page 512 by @nosent79
// 코드 C-13 박스 제목
-Writing.php
+Post.php
이상의 내용은 곧 나올 2쇄에 모두 반영되었습니다.
page 109 by @dalgonafactory
-유효성 검사 오류가 발생하면 컨트롤러는 lluminate\Support\MessageBag 인스턴스를 만들어
+유효성 검사 오류가 발생하면 컨트롤러는 Illuminate\Support\MessageBag 인스턴스를 만들어
page 237 by @harryhan24
-갓허브
+깃허브
page 510 by @luritas
// 코드 C-10
-new Post('Lorem ipsum dolor sit amet')->save();
+(new Post('Lorem ipsum dolor sit amet'))->save();
page 125 by @dalicom
- 우리가 앞에서 이 클래스의 boot() 메서드 본문에 $events->listen()으로 여러 번 ...
+ 우리가 앞에서 이 클래스의 boot() 메서드 본문에 \Event::listen()으로 여러 번 ...
이상의 내용은 3쇄에 모두 반영되었습니다.
page 363 by @YongukMoon
- $timezone = (auth->user->timezone) ?: config('app.timezone');
+$timezone = (auth()->user()->timezone) ?: config('app.timezone');
- 페이지 번호 : 497
- 오탈자 내용 : PSR-2 표준 권고안은 어디까지나 elsif(X) elseif(O) 다.
page 223
-코드 23-14 app/Events/ArticleCreated.php +코드 23-14 app/Events/UserCreated.php
-class UserCreated extends Event +class UserCreated
page 72 쿠키를 이용한 세션 유지 메커니즘에서 웹브라우저 쪽 마지막 쿠키 저장소에 기록에서 expires=zzz -> expires=aaa 일것 같습니다.
page 101 코드 12-3을 참고해서 포럼 글 목록을 포시할 뷰를 만들자. -> 표시할 뷰를 만들자. 일것 같습니다~
page 233 코드 23-29 -class PasswordRemindCreated extends Event +class PasswordRemindCreated
------- extends Event 를 삭제하지 않을경우 아래와 같은 오류 발생합니다 ---------- FatalErrorException in PasswordRemindCreated.php line 13: Class 'App\Events\Event' not found
page 232 코드 23-27 비밀번호 업데이트 하는 부분 누락 ( Git Hub 소스에도 해당하는 부분이 없는 것 같습니다 ) 저는 아래와 같이 추가해서 동작 되게 했습니다.
$email = \DB::table( 'password_resets')->whereToken( $token)->first()->email; \DB::table('users')->whereEmail( $email)->update(['password' => bcrypt( $request->input( 'password'))]);
그리고 토큰 뿐만 아니라 이메일도 일치하는지 확인해야 하는 것 같습니다.
@namo429 @show0910 신고 고맙습니다.
이벤트 클래스에 extends Event가 붙어 있는 것은 라라벨 5.2때 원고를 썼다가, 5.3이 나오고 원고를 고치하는 과정에 꼼꼼이 살피지 못해서 라라벨 5.2의 찌꺼기가 남아 있는 것입니다.
@namo429 님이 지적하신 비밀번호 변경 로직 누락 부분! 완전 고맙습니다.
page 250 코드 25-1 -parent::boot($router); +parent::boot(); ------------- 에러 발생 ------------ ErrorException in RouteServiceProvider.php line 28: Undefined variable: router
page 64 표 8-1
-ArticlesController@delete +ArticlesController@destroy
-> 이부분이 php artisan route:list 로 출력하면 ArticlesController@destroy로 나옵니다. 그런데 소스 전반적으로 destroy로 되어있습니다. 혹시 delete 로 작성해도 되는 것인지는 모르겠습니다만..
P512에 코드 C-13 제목에 Writing.php -> Post.php 가 되야할거 같아요.
@namo429 라우팅 정의 파일에서 Route::resource('articles', 'ArticlesController')로 정의하고, $php artisan make:controller ArticlesController --resource로 컨트롤러를 만들면, 책에 쓴대로 DELETE /articles/{article} URL은 자동으로 ArticlesController::destroy()로 연결됩니다.
직접 하나씩 하나씩 정의한다면 컨트롤러 메서드 이름은 delete로 쓰셔도 됩니다. 예를 들어
<?php // routes/web.php
Route::delete('articles/{article}', 'ArticlesController@delete');
<?php // app/Http/Controllers/ArticlesController.php
class ArticlesController ... {
public function delete($article)
{
// HTTP 요청 처리 로직
}
}
처럼이요.
page 285 코드 27-13 -{{ $file->filename }} ({{ $file->bytes }}) +{{ $attachment->filename }} ({{ $attachment->bytes }})
page 287 -코드 27-17 routes/web.php +코드 27-17 resources/views/articles/partial/form.blade.php
page 305 코드 28-13 -public function boot( Router $router) +public function boot() -parent::boot($router); +parent::boot();
page 327 코드 29-12 -class CommentsEvent extends Event +class CommentsEvent
page 343 dd('캐싱되면 출력 안됨'); 등의 문장을 넣어 놓고.. -> dd 로 했을경우 다음 return 문에 도달하지 못해서요, echo나 var_dump 등의 문장을 넣어 놓고.. 로 바꾸어야 할 것 같습니다.
page 347 코드 29-40 -namespace App\Http\Cacheable.php; +namespace App\Http\Controllers;
오탈자가 왜 이리 많죠 ㅜㅜ @namo429 님 꼼꼼이 봐주셔 정말 고맙습니다. 평일 낮에 삼성역 근처를 지나실 기회가 있으면 페북 메시지로 꼭 한번 연락 주세요. 신고해 주신 3건은 내일 아침에 볼게요~
page 137 중간 -string g iven +string given
page 228 -코드 23-21를 참고하여 +코드 23-12를 참고하여
@namo429 page 343의 캐싱에서 dd()를 찍는 부분은 책 내용이 맞습니다.
class Controller extends BaseController
{
protected function cache($key, $minutes, $query, $method, ...$args)
{
// ...
return \Cache::remember($key, $minutes, function () use ($query, $method, $args) {
// 캐시 저장소에 만료되지 않은 $key가 있다면 이 콜백은 실행되지 않습니다.
dd('캐싱되면 출력 안됨');
return $query->{$method}($args);
});
}
}
page 52 코드설명줄
public function down()
{
Schema::drop('posts');
}
부분을
public function down()
{
Schema::dropIfExists('posts');
}
로 고쳐주셔야될것같습니다 ^^; artisan make로 실행해도 dropIfExists로 생성되네요.
page 88번째 10.2.2 관계확인 tinker 커맨드라인 에제
>>> App\User::find(2)->articles()->create([
로 된 부분을
>>> App\User::find(1)->articles()->create([
로 수정해야될것같아요. 이전 예제에서 User모델로 생성한 데이터가 1건밖에 없는데 2번째 데이터를 찾으려고 하니 오류가 뜨네요.
또하나 발견했습니다. page 122 예제코드 14-4의 코드경로
app/Http/Listeners/ArticlesEventListener.php
를
app/Listeners/ArticlesEventListener.php
로 변경
page 123 예제코드 14-6의 코드경로
app/Http/Events/ArticleCreated.php
를
app/Events/ArticleCreated.php
로 변경해야될듯하네요
263p public function edit()는 있는데, update()는 권한 체크가 없어서 왜 여기서 권한 체크를 안할까?라고 생각해서 Repository의 해당 소스(app/Http/Controllers/Articelscontroller.php)를 찾아보니 update()에는 적용이 되어 있습니다.
@corean 그냥 지면을 아끼기 위해 생략한 것이라 보시면 되겠습니다. 고맙습니다.
262p 코드 25-18 의 Gate::define 부분인데, 아래 설명부분에는 $gate->define('update', ~~~) 으로 되어 있습니다.
266page 262p 와 마찬가지 오타입니다. 코드 25-25 의 Gate::define 부분의 아래 설명에서 $gate->define 으로 되어 있습니다.
352page 코드 30-4 의 파일명이 resources/lang/ko/comments.php 가 아닌 resource/lang/ko/forum.php 입니다.
407page 코드 34-3 에서 public function transform(\App\Article $item) 부분이 public function transform(\App\Article $article) 로 바뀌어야 합니다.
$item 변수명이 잘못되어 있네요.
129p wehreEmail()은 동적 메서드다 -> whereEmail()은 동적 메서드다