#リンクの生成(詳細記事の表示) #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
#表示