Open hasyrails opened 4 years ago
CalendarViewクラスの作成
<?php namespace App\Calendar;
use Carbon\Carbon;
class CalendarView {
private $carbon;
function __construct($date){
$this->carbon = new Carbon($date);
}
/**
* タイトル
*/
public function getTitle(){
return $this->carbon->format('Y年n月');
}
/**
* カレンダーを出力する
*/
function render(){
$html = [];
$html[] = '<div class="calendar">';
$html[] = '<table class="table">';
$html[] = '<thead>';
$html[] = '<tr>';
$html[] = '<th>月</th>';
$html[] = '<th>火</th>';
$html[] = '<th>水</th>';
$html[] = '<th>木</th>';
$html[] = '<th>金</th>';
$html[] = '<th>土</th>';
$html[] = '<th>日</th>';
$html[] = '</tr>';
$html[] = '</thead>';
$html[] = '</table>';
$html[] = '</div>';
return implode("", $html);
}
}
### Rails
app/view/calender に対応
- タイトルを表示させるメソッド:```getTitle()```メソッド
→ Railsの i18n + Dateクラスの使用でOK
- カレンダーをrenderするメソッド : ```render``` メソッド
→ Railsのパーシャルファイルをrenderすることに対応
namespace App\Calendar;
設置場所がapp/CalendarなのでnamespaceをApp\Calendarで設定します。
Railsでは特に設定不要
use Carbon\Carbon;
CarbonはLaravelで日付を扱う時に利用可能な便利なライブラリです。色々な機能があるためすべて解説できませんが、気になる方は公式サイトのドキュメントなどを見てください。
Dateクラスを使用する
コントローラーの作成、ルーティングの設定
カレンダーを表示するためのCalendarControllerをmake:controllerコマンドを利用して作成します。
php artisan make:controller CalendarController
app/Http/Controllers/CalendarController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Calendar\CalendarView; class CalendarController extends Controller { public function show(){ $calendar = new CalendarView(time()); return view('calendar', [ "calendar" => $calendar ]); } }
現在時刻の日時オブジェクトを作成して 今月のカレンダーを表示させる
Route::get('/', 'CalendarController@show');
表示自体は完了している ロジックは要変更
ルーティングはRailsデフォルト
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ $calendar->getTitle() }}</div>
<div class="card-body">
{!! $calendar->render() !!}
</div>
</div>
</div>
</div>
</div>
@endsection
getTitle()
メソッド : 不要 → Date.now.~~
で表示できるrender()
メソッド : パーシャルをrender 週の部分を表示できるところまで実装する
i18n のja.ymlでは 「○月○日」が表示できない?
<% l(Date.today, format: :long) %>
<%= Date.today.year %>年<%= Date.today.month %>月
カレンダーアプリの作成(#1) #Laravel基礎 #Laravelの教科書