【Laravel】Laravel課題:10-1 ひとこと掲示板
1・利用者が名前とコメントを入力し、発言できる。
2・利用者の過去の発言内容をCSVファイルで管理する。
3・全ての利用者の過去の発言内容を一覧で表示する。
4・最新の書き込みが一番上に表示されるようにする。
5・一覧には「名前」「コメント」「発言日時」の3つを1行ずつ表示する。
ルーティング
/routes/web.php
<?php
Route::get('/simple_bbs', 'SimpleBBSController@index');
Route::post('/simple_bbs', 'SimpleBBSController@store');
コントローラー
app/Http/Controllers/SimpleBBSController.php.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SimpleBBSController extends Controller
{
public function index(){
$file = new \SplFileObject(storage_path('app/bbs.csv'));
// 読み込み設定
$file->setFlags(
\SplFileObject::READ_CSV | // CSVを配列形式で読み込む
\SplFileObject::READ_AHEAD |
\SplFileObject::SKIP_EMPTY | // 前の行と合わせて、空行があったら読み飛ばす
\SplFileObject::DROP_NEW_LINE // 改行コードは無視する
);
// 1行ずつ読み込んで配列に保存
$boards = [];
foreach($file as $board){
$boards[] = $board;
}
return view('bbs.index', [
'boards' => $boards,
'title' => 'メールアドレス帳',
]);
}
public function store(Request $request){
$file = new \SplFileObject(storage_path('app/bbs.csv'), 'a');
$request->validate([
'username' => ['required', 'min:2' ,'max:20'],
'comment' => ['required', 'min:2' ,'max:100'],
]);
$date = date('Y-m-d H:i:s');
$board = [
$request->input('username'),
$request->input('comment'),
$date,
];
$file->fputcsv($board);
// flashメッセージの設定
session()->flash('success', '書き込みを追加しました。');
return redirect('/simple_bbs');
}
}
ビュー
resources/views/samples/index.blade.php
@extends('layouts.default')
@section('title', $title)
@section('content')
<h1>ひとこと掲示板</h1>
<form method="post" action="{{ url('/simple_bbs') }}">
@csrf
<div>
<label>
名前:
<input type="text" name="username">
</label>
</div>
<div>
<label>
コメント:
<input type="text" name="comment">
</label>
</div>
<div>
<input type="submit" name="送信">
</div>
</form>
<ul>
@foreach($boards as $board)
<li>{{ $board[0] }}: {{ $board[1] }} [{{ $board[2] }}]</li>
@endforeach
</ul>
@endsection
共通レイアウトファイル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>@yield('title')</title>
<style>
.header_nav {
display: flex;
list-style: none;
padding-left: 0;
}
.header_nav li {
margin-right: 30px;
}
/* エラーメッセージ用のスタイル */
.error {
color: red;
}
/* 成功メッセージ用のスタイル */
.success {
color: green;
}
</style>
</head>
<body>
@yield('header')
{{-- エラーメッセージを出力 --}}
@foreach($errors->all() as $error)
<p class="error">{{ $error }}</p>
@endforeach
{{-- 成功メッセージを出力 --}}
@if (session()->has('success'))
<div class="success">
{{ session()->get('success') }}
</div>
@endif
@yield('content')
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>@yield('title')</title>
<style>
.header_nav {
display: flex;
list-style: none;
padding-left: 0;
}
.header_nav li {
margin-right: 30px;
}
/* エラーメッセージ用のスタイル */
.error {
color: red;
}
/* 成功メッセージ用のスタイル */
.success {
color: green;
}
</style>
</head>
<body>
@yield('header')
{{-- エラーメッセージを出力 --}}
@foreach($errors->all() as $error)
<p class="error">{{ $error }}</p>
@endforeach
{{-- 成功メッセージを出力 --}}
@if (session()->has('success'))
<div class="success">
{{ session()->get('success') }}
</div>
@endif
@yield('content')
</body>
</html>
Author And Source
この問題について(【Laravel】Laravel課題:10-1 ひとこと掲示板), 我々は、より多くの情報をここで見つけました https://qiita.com/panda-chibi/items/48cfa5e72a55870cd369著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .