LoginSignup
6
6

More than 5 years have passed since last update.

Laravel5.2のチュートリアルを試す

Last updated at Posted at 2016-09-10

↓こちらのチュートリアルを試します。
Laravel 5.2 中級者向けタスクリスト
ただし、ここで使用しているLaravelのバージョンは5.3です。

  • プロジェクトの作成
php composer.phar create-project --prefer-dist laravel/laravel mytodo
  • データベースの作成
create database laravel_mytodo;
grant all on laravel_mytodo.* to dbuser@localhost identified by 'Abc1234';
  • プロジェクトの初期設定
.env
DB_DATABASE=laravel_mytodo
DB_USERNAME=dbuser
DB_PASSWORD=Abc1234
config/app.php
'name' => 'My ToDo',
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
  • テーブルの作成
php artisan make:migration create_tasks_table --create=tasks
database/migrations/20XX_XX_XX_XXXXXX_create_tasks_table.php
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned()->index();
            $table->string('name');
            $table->timestamps();
        });
    }
php artisan migrate
  • モデルの作成
php artisan make:model Task
app/Task.php
class Task extends Model
{
    protected $fillable = ['name'];
}
  • リレーションの設定
app/User.php
    public function tasks() {
        return $this->hasMany(Task::class);
    }
app/Task.php
    public function user() {
        return $this->belongsTo(User::class);
    }
  • 認証
php artisan make:auth
  • タスク表示へのリンクを作成

チュートリアルではログインしたらタスク表示にリダイレクトしていますが、
ここではHomeを表示して、タスク表示へのリンクを作成することにします。

resources/views/home.blade.php
<a href="{{ url('/tasks') }}">ToDo List</a>
  • コントローラーの作成
php artisan make:controller TaskController
routes/web.php
Route::get('/tasks', 'TaskController@index');
Route::post('/task', 'TaskController@store');
Route::delete('/task/{task}', 'TaskController@destroy');
app/Http/Controllers/TaskController.php
    public function __construct() {
        $this->middleware('auth');
    }
  • index表示
resources/views/tasks/index.blade.php
@extends('layouts.app')

@section('content')
@include('common.errors')
<form action="{{ url('task') }}" method="POST">
    {{ csrf_field() }}
    <label for="task-name">Task</label>
    <input type="text" name="name" id="task-name">
    <button type="submit">Add Task</button>
</form>
@endsection
app/Http/Controllers/TaskController.php
    public function index(Request $request) {
        return view('tasks.index');
    }
  • タスク追加
app/Http/Controllers/TaskController.php
    public function store(Request $request) {
        $this->validate($request, [
            'name' => 'required|max:255',
        ]);

        $request->user()->tasks()->create([
            'name' => $request->name,
        ]);

        return redirect('/tasks');
    }
resources/views/tasks/index.blade.php
@include('common.errors')
resources/views/common/errors.blade.php
@if (count($errors) > 0)
    <strong>おや何かがおかしいようです</strong>
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif
  • タスク表示
app/Http/Controllers/TaskController.php
    public function index(Request $request) {
        $tasks = $request->user()->tasks()->get();
        return view('tasks.index', [
            'tasks' => $tasks,
        ]);
    }
resources/views/tasks/index.blade.php
@if (count($tasks) > 0)
    Current Tasks
    <table>
        <thead>
            <th>Task</th>
            <th>&nbsp;</th>
        </thead>
        <tbody>
            @foreach ($tasks as $task)
                <tr>
                    <td>{{ $task->name }}</td>
                    <td></td>
                </tr>
            @endforeach
        </tbody>
    </table>
@endif
  • リポジトリの作成
app/Repositories/TaskRepository.php
<?php

namespace App\Repositories;

use App\User;

class TaskRepository {
    public function forUser(User $user) {
        return $user->tasks()->orderBy('created_at', 'asc')->get();
    }
}
app/Http/Controllers/TaskController.php
use App\Repositories\TaskRepository;

class TaskController extends Controller
{
    protected $tasks;

    public function __construct(TaskRepository $tasks) {
        $this->middleware('auth');
        $this->tasks = $tasks;
    }

    public function index(Request $request) {
        return view('tasks.index', [
            'tasks' => $this->tasks->forUser($request->user()),
        ]);
    }
}
  • タスクの削除
resources/views/tasks/index.blade.php
    <form action="{{ url('task/'.$task->id) }}" method="POST">
        {{ csrf_field() }}
        {{ method_field('DELETE') }}
        <button type="submit">削除</button>
    </form>
php artisan make:policy TaskPolicy
app/Policies/TaskPolicy.php
use App\Task;

    public function destroy(User $user, Task $task) {
        return $user->id === $task->user_id;
    }
app/Providers/AuthServiceProvider.php
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        'App\Task' => 'App\Policies\TaskPolicy',
    ];
app/Http/Controllers/TaskController.php
use App\Task;

    public function destroy(Request $request, Task $task) {
        $this->authorize('destroy', $task);
        $task->delete();
        return redirect('/tasks');
    }
  • 確認
php artisan serve --host 192.168.33.10 --port 8000
6
6
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
6
6