教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。
その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。
このパートではトップ画面の見た目を整えていきます。
Copied!- Viewの編集
- 見た目を整える方法
- レスポンシブ対応
Copied!- blade
- scss
まず、techpit-match/resources/views
フォルダ内に top.blade.php
ファイルを作成します。
Copied!techpit-match/resources/views
└── top.blade.php
top.blade.php
ファイルに下記を記入します。
resources/views/top.blade.php123456789101112 Copied!@extends('layouts.layout')
@section('content')
<div class="loginPage">
<div class="container">
<div class="loginPage_contents">
<h1 class="h3 loginPage_contents_title">新しいマッチを見つけよう</h1>
<div class="btn loginPage_contents_btn"><a class="text-white" href="{{ route('login') }}">メールアドレスでログインする</a></div>
</div>
</div>
</div>
@endsection
一般的なHTMLの記述方法に加え、
Laravelに実装されているBlade
というテンプレートエンジンを使うため、
一部特殊な記述方法になっています。
ヘッダー、メニュー、フッター、CSSやJavaScript読み込みなど、
複数のページで共通の内容をレイアウトファイルとして保存しておいて、
@extend
とつけることで、レイアウトファイルを読み込みます。
(後述します。)
@section
と @endsection
で囲まれた範囲がそれぞれのページ内容になります。
もう1つ見慣れない記述方法があります。
<a href="{{ route('login') }}">
ルートファイル techpit-match/routes/web.php
にルート名を明記しておくと、
この書き方ができます。
2章(2-3)で解説していますが、
php artisan ui bootstrap --auth
実施時に下記の内容がルートファイルに追記されています。
routes/web.php1 Copied! $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
name('login')
と記載がある事で、
<a href="{{ route('login') }}">
と書くだけでルーティングする事ができます。
新しくファイルを作成した後は、
必ずルーティングファイルにも明記が必要です。
techpit-match/routes/web.php
ファイルの内容を下記に変更します。
routes/web.php1234 Copied!//変更前
Route::get('/', function () {
return view('welcome');
});
routes/web.php1234 Copied!//変更後
Route::get('/', function () {
return view('top');
});
このように記載する事で、
ルート (http://techpit-match など) にアクセスしたら、
top.blade.php
が表示される様になります。
※この時点では layout.blade.php
を作成していないためエラーが発生します。
後述のlayout.blade.php
を作成することで表示されるようになります。
次に、techpit-match/resources/sass/app.scss
ファイルに以下のコードを追記します。
Copied!techpit-match/resources/sass
└── app.scss
resources/sass/app.scss123456789101112131415161718192021 Copied!// Fonts
@import url('https://fonts.googleapis.com/css?family=Nunito');
// Variables
@import 'variables';
$fa-font-path: "../webfonts";
// Bootstrap
@import '~bootstrap/scss/bootstrap';
// FontAwesome
@import "~@fortawesome/fontawesome-free/scss/fontawesome";
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/regular';
@import '~@fortawesome/fontawesome-free/scss/brands';
//ここから追加
//pages
@import "top";
@import "top";
と追記することで、
techpit-match/resources/sass/_top.scss
ファイルが読み込めるようになります。
techpit-match/resources/sass/_top.scss
ファイルを作成し、
_top.scss
に下記コードを記入します。
※先頭に _をつけたファイルはパーシャルファイル と呼ばれます。
Copied!techpit-match/resources/sass
└── _top.scss
resources/sass/_top.scss12345678910111213141516171819202122 Copied!.loginPage {
&_contents {
height: 80vh;
display: flex;
flex-direction: column;
justify-content: space-between;
text-align: center;
&_title {
margin-top: 12vh;
}
&_btn {
display: block;
max-width: 400px;
padding: 20px;
margin: 0 auto;
border-radius: 30px;
background: #fd5068;
color: #fff;
}
}
}
この講座ではScssの詳細な記述方法は解説しませんので、
必要があれば下記記事などを参考にしてみてください。
Laravelではヘッダーやフッター、メニューなど、
複数のページで共通で使用するファイルをレイアウトファイルとして切り分けて保存する事ができます。
2章(2-3)でphp artisan ui bootstrap --auth
を実行しているため、
下記レイアウトファイルが生成されています。
Copied!techpit-match/resources/views/layouts
└── app.blade.php
このファイルを元に、共通箇所を作成します。
ファイル名はなんでもいいのですが、
今回はわかりやすさ重視で、layout.blade.php
ファイルとします。
techpit-match/resources/views/layouts/app.blade.php
ファイルをコピーし、
layout.blade.php
ファイルとして保存してください。
Copied!techpit-match/resources/views/layouts
└── app.blade.php
└── layout.blade.php
次に、layout.blade.php
のコードを下記のように編集してください。
resources/views/layouts/layout.blade.php1234567891011121314151617181920212223 Copied!<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
@yield('content')
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}"></script>
</body>
</html>
変更内容ですが、<body>
タグ内の記述を@yield('content')
と<script>
だけにしています。
@yield('content')
と記載することで、
techpit-match/resources/views/top.blade.php
ファイルに記載した、
@section 〜 @endsection
で囲った内容が表示される事になります。
最後に、
Laravel初期設定では背景色が少しグレーになっているので、白色に変更します。
techpit-match/resources/sass/_variables.scss
ファイルの2行目あたりに、
$body-bg
として背景色が指定されているので、こちらを白に変更します。
resources/sass/_variables.scss12 Copied!// Body
$body-bg: #f8fafc;
こうですね。
resources/sass/_variables.scss12 Copied!// Body
$body-bg: #fff;
SCSSファイルを反映させるため、
コマンドプロンプトで、npm run dev
と入力後、
コマンドプロンプトでphp artisan serve
と入力し、
ブラウザでhttp://localhost:8000
と入力します。
このような表示になっていればOKです。
パソコンだけでなく、
iPhoneなどのスマートフォンやタブレットからアクセスした際もみやすく表示することを
レスポンシブ対応といいます。
すでにインストールしているBootstrap4はレスポンシブ対応を前提に作成されています。
レスポンシブ対応するには、Viewport
という設定が必要になりますが、
この章で作成したレイアウトファイルの中に、Viewport
の設定もすでに含まれています。
techpit-match/resources/views/layouts/layout.blade.php
ファイル内に下記の記述があります。
resources/views/layouts/layout.blade.php1 Copied! <meta name="viewport" content="width=device-width, initial-scale=1">
この記述により、レスポンシブ対応は実施済みということになります。
レスポンシブ対応されているかを確認するために、グーグルクロムで画面上任意の箇所で右クリックし、
検証をクリックします。
クリックすると、グーグルデベロッパーツールが表示されます。
下記画像の通り、①->②とクリックすると、様々なデバイスの画面サイズを確認できます。
デバイスの横幅により、画面の表示が調整されているのがわかるかと思います。
*この講座では、iPhone6/7/8 の画面サイズを想定して作成しています。
以上でこのパートは終了です。お疲れ様でした!
php artisan ui bootstrap --auth実施時に下記の内容がルートファイルに追記されています。
routes/web.php
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
と説明がありますが、追記されておりませんでした。
そのため、routes/web.phpの最後尾にコピペして追記しました。
そして、php artisan serveを実行したところエラーになりました。(画像参照)
その後、追記した内容をコメントアウトして、再度実行すると問題なく『あたらしいマッチを見つけよう』というページが表示されました。
とりあえず、次の章へ進もうと思いますが、
このまま、追記せずに進んでも問題ないでしょうか?
補足情報
Windows10、xampp(Apache/2.4.39 (Win64)・PHP/7.3.5・Server at localhost Port 80・10.5.8-MariaDB)
お世話になっております、Masanoriです。
この教材を参考にさせていただきながら、自分のアプリケーションを作っております。bootstrapは使用せず、resources配下のsassフォルダのscssファイルにスタイルの記述をしております。
scssファイルの記述の変更が、ブラウザのリロードボタンを押しても最新状態に更新されないという問題が起きていました。ターミナルにて%npm run devを実行後、リロードボタンを押すと反映されます。このままでは、scssファイルを変更する度にこの作業をやらないといけないのはめんどくさいです。
対応策として、ターミナルの%php artisan serveを実行しているウィンドウとは別で、%npm run watchを実行しています。こうすれば、scssファイルの記述を変更し、ブラウザのリロードボタンを押した時に、Webpackが自動で変更を感知しアセットを自動的に再コンパイルしてくれるようです。
この対応策以外に方法があるのかをお聞きしたいです。
ディレクトリの構造、各種ファイル、ターミナルの状況を画像にて添付させていただきます。よろしくお願い致します。
laravel 6.X
php 7.3.9
node 12.16.1
npm 6.13.4
アオキさんこんばんは。
ターミナル上でも画面上でもエラーらしきものは出なかったんですがlayout.blade.phpを作成しても
web.phpのすべてのファイルでエラーが消えません。
VScodeを再起動したりしたんですが治らず、、、
どこを見ればいいのかググってもわかりませんでした。
お手数ですがよろしくお願いいたします
アオキ様
こんばんは
発生している問題
1 cssが正しく反映されない。
2 app.scss内のBootstrapとfont awesomeの相対パスが無効になっている。
やってみたこと
layout.blade.phpのstyle以下のパスを現在のディレクトリを見ていじってみた
app.scss内のBootstrapとfont awesomeのリンク先を表示してみた(vs code)→存在しない
環境
mac Mojave 10.14
MAMP
cssとの連携でこけています。
よろしくお願いいたします。