Laravel まとめ2 (リンクの生成/詳細記事の表示)

#リンクの生成(詳細記事の表示)　#15まで
http://dotinstall.com/lessons/basic_laravel/36115
http://bit.ly/29EvNEA

##概要

####1.view
　「http:(ドメイン)/posts/id」　へアクセスするリンクを作る

```/myblog/resources/views/posts/index.blade.php

//action() コントローラーとメソッドを指定する記述　(Postsコントローラのshowメソッド)
<li><a href="{{ action('PostsController@show', $post->id) }}">{{ $post->title }}</a></li>
```

####2.routes
posts/idでアクセスしたら、PostControllerのshowメソッドを呼び出す

```/myblog/app/Http/routes.php

Route::get('/posts/{id}', 'PostsController@show');
```

####3.Controller
呼び出されるshowメソッドを実行(viewのshowテンプレートにデータを渡す)

```/myblog/app/Http/Controllers/PostsController.php
//showメソッドを追加
public function show($id) {
	$post = Post::findOrFail($id);
	return view('posts.show')->with('post', $post);
}
```

####4.ビュー　
showテンプレートで表示する

```/myblog/resources/views/posts/show.blade.php

<h1>{{ $post->title }}</h1>
<p>{!! nl2br(e($post->body)) !!}</p>
```

---

##ルート

```/myblog/app/Http/routes.php

<?php

Route::get('/', 'PostsController@index');
//追加
Route::get('/posts/{id}', 'PostsController@show');
```

- posts/idでアクセスしたら、PostControllerのshowメソッドを呼び出す


##Controller

```/myblog/app/Http/Controllers/PostsController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Post;

class PostsController extends Controller
{
    public function index() {
      $posts = Post::latest('created_at')->get();
      return view('posts.index')->with('posts', $posts);
    }

　　　　　　　//showメソッドを追加
    public function show($id) {
      $post = Post::findOrFail($id);
      return view('posts.show')->with('post', $post);
    }
}
```

- findOrFail 見つからなかったら例外を返す
- view「postsのshow」にデータを渡す


##view

- リンクにコントローラとメソッドと値を指定する


```/myblog/resources/views/posts/index.blade.php

@extends('layouts.default')

@section('title', 'Blog Posts')

@section('content')
<h1>Posts</h1>
<ul>
  @forelse ($posts as $post)

//直接埋め込む記述
<!-- <li><a href="/posts/{{ $post->id }}">{{ $post->title }}</a></li> -->
//url()
<!--<li><a href="{{ url('/posts', $post->id) }}">{{ $post->title }}</a></li>-->

//action() コントローラーとメソッドを指定する記述　(Postsコントローラのshowメソッド)
<li><a href="{{ action('PostsController@show', $post->id) }}">{{ $post->title }}</a></li>

  @empty
  <li>No posts yet</li>
  @endforelse
</ul>

@endsection
```

- @extends('layouts.default')

「同一階層の　　/layouts/default.blade.phpを読み込む」

- action
「コントローラー@メソッド」の形式でルートを指定してアクセスする

```/myblog/resources/views/layouts/default.blade.php

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>@yield('title')</title>
  <link rel="stylesheet" href="/css/styles.css">
</head>
<body>
  <div class="container">
    @yield('content')
  </div>
</body>
</html>
```

```/myblog/resources/views/posts/show.blade.php

@extends('layouts.default')

@section('title', 'Blog Detail')

@section('content')
<h1>{{ $post->title }}</h1>
<p>{!! nl2br(e($post->body)) !!}</p>
@endsection
```

- {!! !!}　　中身をエスケープしないで表示する
- eヘルパー　エスケープ
- nl2br　　　　http://php.net/manual/ja/function.nl2br.php


#表示

### /

![スクリーンショット 2016-07-21 14.55.19.png](https://qiita-image-store.s3.amazonaws.com/0/62264/f1710de2-a3e3-d03e-24c4-de910f218a3c.png)


### posts/1

![スクリーンショット 2016-07-21 14.55.28.png](https://qiita-image-store.s3.amazonaws.com/0/62264/a1a02270-97e0-db49-ab66-c14b8622a904.png)