Edited at

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

More than 1 year has passed since last update.


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


「同一階層の  /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



表示


/

スクリーンショット 2016-07-21 14.55.19.png


posts/1

スクリーンショット 2016-07-21 14.55.28.png