進度規劃ing... 請有耐心的各位慢慢等待...
太久沒寫了 都忘記文章怎麼寫...
臥病寫文章ing 寫出什麼垃圾文章也不能怪我了(藉口一堆)
上上次已經建立了一個Controller了 接下來我們就先建立一個給CRUD用的模板
不過在那之前我們先把上次的檔名換一下resources\views\layouts\app.blade.php
改成別的什麼都好 因為之後會用到這個檔名...
之後建立一個resources\views\layouts\CRUD.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>@yield('title')</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
<script src="{{ asset('js/app.js') }}"></script>
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">IRONMAN</a>
</div>
</div>
</nav>
<div class="container-fluid">
@yield('content')
</div>
</body>
</html>
這樣大家就知道其他頁面只要專心在那頁該做的事情上了
然後幫我把這傢伙resources\views\crud\index.blade.php
也改個名 因為之後也用得到這個檔名... (Day8的我在裝忙)
再來我們就來到app\Http\Controllers\Web\CRUDController.php
的create跟store這兩個function(因為這次只講Create的部分)
然後根據我第六天講過的東西 我們要先建立一個Repository
整個Controller會長得像這樣
前面有一段是在進行dependency injection的動作
<?php
namespace App\Http\Controllers\Web;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Repositories\CRUDRepository;
class CRUDController extends Controller
{
protected $CRUDRepo;
public function __construct(CRUDRepository $CRUDRepo) {
$this->CRUDRepo = $CRUDRepo;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('crud.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$data = $request->only('title', 'content');
$post = $this->CRUDRepo->create($data);
return redirect()->route('crud.show', $post->id);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
接下來還要建立一個Repositoryapp\Repositories\CRUDRepository.php
<?php
namespace App\Repositories;
use App\Entities\CRUD;
class CRUDRepository
{
public function create($data)
{
return CRUD::create($data);
}
}
接下來我們來建立一個很醜很醜的新增頁面resources\views\crud\create.blade.php
@extends('layouts.CRUD')
@section('title', '新增')
@section('content')
<form action="{{ route('crud.store') }}" method="post">
{{ csrf_field() }}
<div class="form-group">
<label for="title">標題</label>
<input type="text" class="form-control" name="title">
</div>
<div class="form-group">
<label for="content">內容</label>
<textarea class="form-control" name="content" cols="30" rows="10"></textarea>
</div>
<button type="submit" class="btn btn-primary">送出</button>
</form>
@endsection
先來解釋一下form的route 用了這個之後 管你路由那邊怎麼改 只要名字對了 就不用改這邊了 是個很方便的東西 還可以避免一堆鬼打牆
再來就是csrf 這個東西以前在開api的時候是個麻煩 不過自從5.4之後web跟api切開來 用不同的middleware之後就不是什麼太大的問題了
反正那行就是用來防止csrf攻擊所建立在web的一個東西 如果那行拿掉的話Laravel就會跳一個錯誤給你看
之後我們就可以來送出我們的文章了
送完之後如果一切正常 接下來就會成功轉址(Controller)然後就會看到一個白畫面
因為那個頁面還沒有做XDD 下次再來做唄
等等 忘了說 剛剛撞到一個Laravel的bug 看起來就是c_r_u_ds跟c_r_u_d_s之間的誤會...
migration那邊的命名是前面 但是Model採用的是後面 為了避免重建資料表的麻煩 直接改Model好了app\Entities\CRUD.php
直接在class裡新增這行就好了
protected $table = 'c_r_u_ds';
真的抱歉了 接下來文章內容會大幅縮短 因為沒想到期末還一堆事 加上要拿來趕文章的時間又感冒(咳咳)
希望下次會更好...