記事の新規作成

routing

Route::get('/', 'PostsController@index');
// Route::get('/posts/{id}', 'PostsController@show');
Route::get('/posts/{post}', 'PostsController@show')->where('post','[0-9]+');
Route::get('/posts/create', 'PostsController@create');

index.blade.php

@section('container')
<h1>
	<a href="{{ url('/posts/create') }}" class="header-menu">New Post</a>
	Blog Posts
</h1>
<ul>
	{{-- 
	@foreach ($posts as $post)
	<li><a href="">{{ $post->title }}</a></li>
	@endforeach
	--}}

	@forelse ($posts as $post)
	<li><a href="{{ action('PostsController@show', $post) }}">{{ $post->title }}</a></li>
	@empty
	<li>No posts yet</li>
	@endforelse
</ul>
@endsection

@extends('layouts.default')

@section('title', 'New Post')

@section('container')
<h1>
	<a href="{{ url('/') }}" class="header-menu">Back</a>
	New Post</h1>
<form method="post" action="{{ url('/posts') }}">
	{{ csrf_field() }}
	<p>
		<input type="text" name="title" placeholder="enter title">
	</p>
	<p>
		<textarea name="body" placeholder="enter body"></textarea>
	</p>
	<p>
		<input type="submit" value="Add">
	</p>
</form>
@endsection

なんじゃこりゃー 洒落にならん。

getではなく、postにします。

Route::get('/', 'PostsController@index');
// Route::get('/posts/{id}', 'PostsController@show');
Route::get('/posts/{post}', 'PostsController@show')->where('post','[0-9]');
Route::get('/posts/create', 'PostsController@create');
Route::post('/posts', 'PostsController@store');

resources/viewsの中に共通化コンポーネント

resources/viewsの中に共通化コンポーネントを作成する
ああああああああああ、cake.phpを思い出してきた。。。

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>

index.blade.php


@extends('layouts.default')

{{-- 
@section('title')
Blog Posts
@endsection
--}}

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

@section('container')
<h1>Blog Posts</h1>
<ul>
	{{-- 
	@foreach ($posts as $post)
	<li><a href="">{{ $post->title }}</a></li>
	@endforeach
	--}}

	@forelse ($posts as $post)
	<li><a href="{{ action('PostsController@show', $post) }}">{{ $post->title }}</a></li>
	@empty
	<li>No posts yet</li>
	@endforelse
</ul>
@endsection

show.blade.php

@extends('layouts.default')

@section('title', $post->title)

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

うわーーーーーーーーーーー 酒飲みてーーーーーーーーーーーーーーー

laravel 詳細ページ

routingから
/posts/{id} とする。

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

postController.php

public function show($id){
    	// $post = Post::find($id);
    	$posts = Post::findOrFail($id);
		return view('posts.show')->with('posts', $posts);
    }

show.Blade.php

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>{{ $posts->title }}</title>
	<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
	<div class="container">
		<h1>{{ $posts->title }}</h1>
		<p>{!! nl2br(e($posts->body)) !!}</p>
	</div>
</body>
</html>

implicit binding
なんかまた新しいの出てきた

 public function show(Post $post){
    	// $post = Post::find($id);
    	// $posts = Post::findOrFail($id);
		return view('posts.show')->with('post', $post);
    }

ぎょえーーーーーーーーーー

laravelのcss

public/css フォルダの中
style.css

body {
	font-family: Verdana, sans-serif;
	font-size: 14px;
}

.container {
		width: 400px;
		margin: 20px auto;	
}

h1 {
	font-size: 16px;
	padding-bottom: 10px;
	margin-bottom: 15px;
	border-bottom: 1px solid #ddd;
}

ul > li {
		margin-bottom: 5px;
}

ふむふむ

bladeの@forelseという書き方

コメントアウトは{{– –}}
@forelse, @emptyで出し分け出来る。

<ul>
			{{-- 
			@foreach ($posts as $post)
			<li><a href="">{{ $post->title }}</a></li>
			@endforeach
			--}}

			@forelse ($posts as $post)
			<li><a href="">{{ $post->title }}</a></li>
			@empty
			<li>No posts yet</li>
			@endforelse
		</ul>
class PostsController extends Controller
{
    //
    public function index(){
    	// $posts = Post::orderBy('created_at', 'desc')->get();
    	// $posts = Post::latest()->get();
    	$posts = [];
    	// dd($posts->toArray()); // dump die
    	// return view('posts.index', ['posts' => $posts]);
    	return view('posts.index')->with('posts', $posts);
    }

}

ぎゃー

Laravel controllerを編集

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;

class PostsController extends Controller
{
    //
    public function index(){
    	$posts = Post::all();
    	dd($posts->toArray()); // dump die
    	return view('posts.index');
    }

}

うわー どうしよ、これ。困った。。

orderBy, latest()でfetchできる。

class PostsController extends Controller
{
    //
    public function index(){
    	// $posts = Post::orderBy('created_at', 'desc')->get();
    	$posts = Post::latest()->get();
    	dd($posts->toArray()); // dump die
    	return view('posts.index');
    }

}
class PostsController extends Controller
{
    //
    public function index(){
    	// $posts = Post::orderBy('created_at', 'desc')->get();
    	$posts = Post::latest()->get();
    	// dd($posts->toArray()); // dump die
    	// return view('posts.index', ['posts' => $posts]);
    	return view('posts.index')->with('posts', $posts);
    }

}
<body>
	<div class="container">
		<h1>Blog Posts</h1>
		<ul>
			@foreach ($posts as $post)
			<li><a href="">{{ $post->title }}</a></li>
			@endforeach
		</ul>
	</div>
</body>

Laravelでviewをつくっていく

resources/views の中にpostsフォルダを作成し、その中にindex.blade.phpファイルを作成する。

PostsController.php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostsController extends Controller
{
    //
    public function index(){
    	return view('posts.index');
    }

}

html

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>Blog Posts</title>
</head>
<body>
	<div class="container">
		<h1>Blog Posts</h1>
		<ul>
			<li><a href="">title</a></li>
			<li><a href="">title</a></li>
			<li><a href="">title</a></li>
		</ul>
	</div>
</body>
</html>

[vagrant@localhost myblog]$ php artisan serve –host 192.168.35.10 –port 8000
Laravel development server started:
[Sun Sep 9 12:24:50 2018] 192.168.35.1:57370 [200]: /favicon.ico

なんだこれ

Laravel routing, controller

/routes/web.php

Route::get('/', 'PostsController@index');

php artisanでPostControllerをつくる
[vagrant@localhost myblog]$ php artisan make:controller PostController
Controller created successfully.

あ、PostsControllerでした。
[vagrant@localhost myblog]$ php artisan make:controller PostsController
Controller created successfully.

app/Httpの中に作られます。

ipアドレスを調べる。コマンドはip a
[vagrant@localhost myblog]$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:a9:1b:8f brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
inet6 fe80::a00:27ff:fea9:1b8f/64 scope link
valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:cb:a5:1b brd ff:ff:ff:ff:ff:ff
inet 192.168.35.10/24 brd 192.168.35.255 scope global eth1
inet6 fe80::a00:27ff:fecb:a51b/64 scope link
valid_lft forever preferred_lft forever

tinker 抽出、更新、削除

クラスを呼んでいる書き方だが、独特ですな。
[vagrant@localhost myblog]$ php artisan tinker
Psy Shell v0.9.8 (PHP 7.1.21 — cli) by Justin Hileman
>>> App\Post::find(3)->toArray();
=> [
“id” => 3,
“title” => “title 3”,
“body” => “body 3”,
“created_at” => “2018-09-08 23:32:01”,
“updated_at” => “2018-09-08 23:32:01”,
]

>>> App\Post::where(‘id’, ‘>’, 1)->orderBy(‘created_at’,’desc’)->get()->toArray();
=> [
[
“id” => 3,
“title” => “title 3”,
“body” => “body 3”,
“created_at” => “2018-09-08 23:32:01”,
“updated_at” => “2018-09-08 23:32:01”,
],
[
“id” => 2,
“title” => “title 2”,
“body” => “body 2”,
“created_at” => “2018-09-08 23:31:24”,
“updated_at” => “2018-09-08 23:31:24”,
],
]

update
>>> $post = App\Post::find(3);
=> App\Post {#2893
id: “3”,
title: “title 3”,
body: “body 3”,
created_at: “2018-09-08 23:32:01”,
updated_at: “2018-09-08 23:32:01”,
}
>>> $post->title = ‘title 3 updated’;
=> “title 3 updated”
>>> $post->save();
=> true

delete


>>> $post = App\Post::find(3);
=> App\Post {#2908
     id: "3",
     title: "title 3 updated",
     body: "body 3",
     created_at: "2018-09-08 23:32:01",
     updated_at: "2018-09-09 00:18:20",
   }
>>> $post->delete();
=> true
>>> App\Post::all()->toArray();
=> [
     [
       "id" => 1,
       "title" => "title 1",
       "body" => "body 1",
       "created_at" => "2018-09-08 23:21:01",
       "updated_at" => "2018-09-08 23:21:01",
     ],
     [
       "id" => 2,
       "title" => "title 2",
       "body" => "body 2",
       "created_at" => "2018-09-08 23:31:24",
       "updated_at" => "2018-09-08 23:31:24",
     ],
   ]