昨天我們先使用了controller中的index和create,那我們今天要進到controller中看看,在開始存資料之前我們先想想一個網頁的架構,要是每次進到一個頁面都要登錄,那是不是很麻煩?要是我只是想要逛逛活動還沒有這麼急著想要報名,那我還要登錄也太麻煩了,所以先讓我們在controller中加入一個__construct()
的function。
<?php
namespace App\Http\Controllers;
use App\Models\Prefer;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
/**
* 設定哪項功能不需登錄即可查看
*/
public function __construct(){
$this->middleware('auth')->except(methods:['index', 'show']);
}
/**
* Display a listing of the resource.
*/
public function index()
{
$articles = Article::with('user')->orderBy('start_time', 'desc')->paginate(10);
return view('articles.index', ['articles' => $articles]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('articles.create');
}
}
$this->middleware('auth')->except(methods:['index', 'show']);
這個的想法和之前一樣我們用except告訴他我不要這些,但是這邊是告訴laravel說之後的東西我不要經過middleware,這樣就我們在進到網頁時我們所看到的東西就不需要登錄了,終於比較像普通的網頁了。
接著我們回到我們的blade中看看,在<form action = "{{ route('articles.store') }}" method = "post">
下,有一個長得和別人很不一樣的@csrf
,這是甚麼呢?
想要知道更加清楚的介紹可以到https://tech-blog.cymetrics.io/posts/jo/zerobased-cross-site-request-forgery/ 去看看。
而laravel提供了這一個簡單的token@csrf
,讓web server每一次都去確認是否這個請求來自於你個人,讓你輕鬆地躲過csrf的攻擊,也是你網頁的資安有更多一層的防護。
有了@csrf
,laravel卻還是為你的資安擔心,所以他還有另外一個小小動作去保護你的資料,那就是大量儲存。他將這個儲存鎖起來,那麼這樣 Hacker 放進來的資料就會因為無法存取。
所以我們要先到app\Models\Article.php
去更改我們的大量填寫。
protected $fillable = [
'title',
'content',
'start_time',
'end_time',
'summary'
];
這個表中要填入之後要存取的資料名稱,若是現在沒有寫進$fillable
元件內容設定,之後會無法將取得的資料放入database。
那我們今天就先到這裡,地獄的防火牆應該是防外面吧!讓今天摩拳擦掌想要寫程式的人可能會有點失望,但是這些觀念也是非常重要的,不能輕易跳過。那我們明天開始寫store,真正將我們得資料放入資料庫,明天再祝你們中秋節快樂,今天先祝各位老師以及參加鐵人賽的各位夥伴教師節快樂。