3. MVC
Co to jest MVC (Model, View, Controller)?
MVC jest to sposób pracy (można nazwać wzór/model) z Laravel który jest domyślnie wbudowany już na samym starcie.
MVC stał się standardem nie tylko w Laravel, jest on bardzo popularny.
Jeżeli używamy go, to rozdzielamy odpowiednio na Model:
On mowi z którą tabelą w bazie danych rozmawiamy.
On mowi z którą tabelą w bazie danych rozmawiamy.
Controller, czyli Kontroler:
Tutaj wrzucamy wszystkie funkcje, czyli jak operujemy na danych w bazie danych, API, itd.
No i View (Wju), czyli widok:
Tutaj wyświetlamy informacje oraz dzięki niemu wrzucamy informacje do bazy danych.
Żeby to wszystko działało potrzeba jest jeszcze Routes (rołts), czyli trasy jaką użyjemy żeby te informacje mogły dotrzeć tam gdzie powinny.
Kompletną zawartość tej strony stworzę po nagraniu video na ten temat.
A teraz pokażę tutaj jeden z moich już ustawionych kontrolerów. Jest kilka rzeczy których się można czepić w nim, ale to zależy czego oczekujemy od niego. W kolejnych tematach poznamy go lepiej.
Tutaj jest sama zawartość Kontrolera, jeden kolor, jedna funkcja:
public function index()
{
$posts = Post::orderBy('created_at', 'desc')->paginate(10);
return view('posts.index')->with('posts', $posts);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request,[
'title' => 'required',
'body' => 'required'
]);
//Create Post
$post = new Post;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->user_id = auth()->user()->id;
$post->save();
return redirect('/posts')->with('success', 'Post Created');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$post = Post::find($id);
return view('posts.show')->with('post', $post);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$post = Post::find($id);
return view('posts.edit')->with('post', $post);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request,[
'title' => 'required',
'body' => 'required'
]);
//Create Post
$post = Post::find($id);
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('/posts')->with('success', 'Post Updated');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$post = Post::find($id);
$post->delete();
return redirect('/posts')->with('success', 'Post Deleted');
}
Przykładowy plik create.blade.php:
<div class="container">
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col">
<a href="/posts" class="btn btn-success">Wróć do listy</a>
</div>
</div>
<hr>
<div class="row">
<div class="col">
<h1>Dodaj Nowy Wpis</h1>
</div>
</div>
<br>
<div class="col">
<form action="/posts" method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="text" name="name" placeholder="Nazwa" class="form-control"><br><br>
<input type="text" name="description" placeholder="Opis" class="form-control">
<br><br>
<button type="submit" class="btn btn-primary"> Zapisz</button>
</form>
</div>
</div>
@endsection
Ten plik wykorzystuje nasz kontroler żeby przekazać dane do bazy danych. Część odpowiedzialna w kontrolerze, to:
/**
* Pokazuje forme do wypełnienia z której dane potem wyślemy do bazy danych.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('posts.create');
}
/**
* Zapisuje dane z formy w naszym magazynie, czyli połączonej bazie danych.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request,[
'title' => 'required',
'body' => 'required'
]);
//Create Post
$post = new Post;
$post->title = $request->input('name');
$post->body = $request->input('description');
$post->user_id = auth()->user()->id;
$post->save();
return redirect('/posts')->with('success', 'Post Created');
}
Kompletną zawartość tej strony stworzę po nagraniu video na ten temat.
A teraz pokażę tutaj jeden z moich już ustawionych kontrolerów. Jest kilka rzeczy których się można czepić w nim, ale to zależy czego oczekujemy od niego. W kolejnych tematach poznamy go lepiej.
Tutaj jest sama zawartość Kontrolera, jeden kolor, jedna funkcja:
public function index()
{
$posts = Post::orderBy('created_at', 'desc')->paginate(10);
return view('posts.index')->with('posts', $posts);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request,[
'title' => 'required',
'body' => 'required'
]);
//Create Post
$post = new Post;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->user_id = auth()->user()->id;
$post->save();
return redirect('/posts')->with('success', 'Post Created');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$post = Post::find($id);
return view('posts.show')->with('post', $post);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$post = Post::find($id);
return view('posts.edit')->with('post', $post);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request,[
'title' => 'required',
'body' => 'required'
]);
//Create Post
$post = Post::find($id);
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('/posts')->with('success', 'Post Updated');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$post = Post::find($id);
$post->delete();
return redirect('/posts')->with('success', 'Post Deleted');
}
Przykładowy plik create.blade.php:
<div class="container">
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col">
<a href="/posts" class="btn btn-success">Wróć do listy</a>
</div>
</div>
<hr>
<div class="row">
<div class="col">
<h1>Dodaj Nowy Wpis</h1>
</div>
</div>
<br>
<div class="col">
<form action="/posts" method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="text" name="name" placeholder="Nazwa" class="form-control"><br><br>
<input type="text" name="description" placeholder="Opis" class="form-control">
<br><br>
<button type="submit" class="btn btn-primary"> Zapisz</button>
</form>
</div>
</div>
@endsection
Ten plik wykorzystuje nasz kontroler żeby przekazać dane do bazy danych. Część odpowiedzialna w kontrolerze, to:
/**
* Pokazuje forme do wypełnienia z której dane potem wyślemy do bazy danych.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('posts.create');
}
/**
* Zapisuje dane z formy w naszym magazynie, czyli połączonej bazie danych.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request,[
'title' => 'required',
'body' => 'required'
]);
//Create Post
$post = new Post;
$post->title = $request->input('name');
$post->body = $request->input('description');
$post->user_id = auth()->user()->id;
$post->save();
return redirect('/posts')->with('success', 'Post Created');
}
Comments
Post a Comment