LoginSignup
35
37

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-18

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

35
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
37