35
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?