Create new Laravel Project
composer create-project --prefer-dist laravel/laravel crudresourcecontroller
Create new Migration
php artisan make:migration create_posts_table
Post Migration
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('body');
$table->timestamps();
});
Create new Model and new Controller
php artisan make:model Post
php artisan make:controller PostController --resource
Post Model
protected $table = 'posts';
protected $fillable = ['title','body'];
PostController
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppPost;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$posts = Post::latest()->paginate(5);
return view('posts.index', compact('posts'))->with('i',(request()->input('page',1) -1) *5);
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
request()->validate([
'title' => 'required',
'body' => 'required',
]);
Post::create($request->all());
return redirect()->route('posts.index')->with('success','Post created successfully');
}
/**
* Display the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function show($id)
{
$post = Post::find($id);
return view('posts.show', compact('post'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
$post = Post::find($id);
return view('posts.edit', compact('post'));
}
/**
* Update the specified resource in storage.
*
* @param IlluminateHttpRequest $request
* @param int $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
request()->validate([
'title' => 'required',
'body' => 'required',
]);
Post::find($id)->update($request->all());
return redirect()->route('posts.index')->with('success','Post updated successfully');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
Post::find($id)->delete();
return redirect()->route('posts.index')->with('success','Post deleted successfully');
}
}
Route
Route::resource('posts','PostController');
Install Laravel Collective (Html and Form)
composer require laravelcollective/html
Modife your config/app.php files
'providers' => [
....
CollectiveHtmlHtmlServiceProvider::class,
],
'aliases' [
....
'Form' => CollectiveHtmlFormFacade::class,
'Html' => CollectiveHtmlHtmlFacade::class,
],
Next, create new view (Master, Index, Edit, Show, Create, Form)
Master.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Simple Crud with Resource Controller</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.2/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
@yield('content')
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
Index.blade.php
@extends('posts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
<h3>Simple laravel CRUD with resource controller</h3>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="pull-right">
<a class="btn btn-xs btn-success" href="{{ route('posts.create') }}">Create New Post</a>
</div>
</div>
</div>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<tr>
<th>No.</th>
<th>Title</th>
<th>Body</th>
<th width="300px">Actions</th>
</tr>
@foreach ($posts as $post)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $post->title }}</td>
<td>{{ $post->body }}</td>
<td>
<a class="btn btn-xs btn-info" href="{{ route('posts.show', $post->id) }}">Show</a>
<a class="btn btn-xs btn-primary" href="{{ route('posts.edit', $post->id) }}">Edit</a>
{!! Form::open(['method' => 'DELETE', 'route'=>['posts.destroy', $post->id], 'style'=> 'display:inline']) !!}
{!! Form::submit('Delete',['class'=> 'btn btn-xs btn-danger']) !!}
{!! Form::close() !!}
</td>
</tr>
@endforeach
</table>
{!! $posts->links() !!}
@endsection
Form.blade.php
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<strong>Title : </strong>
{!! Form::text('title', null, ['placeholder'=>'Title','class'=>'form-control']) !!}
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<strong>Body : </strong>
{!! Form::textarea('body', null, ['placeholder'=>'Body','class'=>'form-control','style'=>'height:150px']) !!}
</div>
</div>
<div class="col-xs-12">
<a class="btn btn-xs btn-success" href="{{ route('posts.index') }}">Back</a>
<button type="submit" class="btn btn-xs btn-primary" name="button">Submit</button>
</div>
</div>
Create.blade.php
@extends('posts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
<div class="pull-left">
<h3>Add New Post</h3>
</div>
</div>
</div>
@if(count($errors) > 0)
<div class="alert alert-danger">
<strong>Whooops!! </strong> There were some problems with your input.<br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
{!! Form::open(['route' => 'posts.store', 'method' => 'POST']) !!}
@include('posts.form')
{!! Form::close() !!}
@endsection
Show.blade.php
@extends('posts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
<div class="pull-left">
<h3>Show Post </h3> <a class="btn btn-xs btn-primary" href="{{ route('posts.index') }}">Back</a>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<strong>Title : </strong>
{{ $post->title }}
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<strong>Body : </strong>
{{ $post->body }}
</div>
</div>
</div>
@endsection
Edit.blade.php
@extends('posts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
<div class="pull-left">
<h3>Edit Post</h3>
</div>
</div>
</div>
@if(count($errors) > 0)
<div class="alert alert-danger">
<strong>Whooops!! </strong> There were some problems with your input.<br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
{!! Form::model($post, ['method'=>'PATCH','route'=>['posts.update', $post->id]])!!}
@include('posts.form')
{!! Form::close() !!}
@endsection
Aucun commentaire:
Enregistrer un commentaire