守 新太郎
https://scrapbox.io/files/62626efaad2024001d57d325.jpg
自己紹介
情報メディア創成学類3年の守 新太郎(もり しんたろう)です.
神戸高専から3年次編入してきました.
Discord:モリシン
ソロ活動
やりたいこと
ハードウェア製作(マイコン使ったセンシングなど)
アプリケーション製作(Webとの連携?)
etc.
→ハードもソフトも両方やりたい!
触ったやつ
Web:HTML,CSS
スマホアプリ:Kotlin,Flutter
その他:C,電子工作
etc.
4/29
高速Lチカ
https://scrapbox.io/files/626ba18eafea8c00219b505f.mp4
次回:Flutter or Webの勉強
5/4
なぜか今まで触ってなかった Python とバイトで使う php & Laravel を勉強
MVCアーキテクチャはDjango(MVT)でも触れた
とりあえずLaravelの開発環境はMAMPを使用予定(Mac OSなので)
せっかくなので Django と Laravel 同時並行で勉強しようか検討中
次回:実際にサイトを作ってみる
5/13
Laravelまとめ
マイグレーション
SQLを直接使わないデータベース管理システム
テーブル作成
マイグレーションファイルを作成
ファイルにテーブル定義を書く
マイグレーションを実行し,DBに反映
マイグレーション生成
場所:database/migrations
ファイル名:2014_10_12_000000_create_users_table.php
ファイル名規則:生成時間(2014_10_12_000000)_アクション名(create)_テーブル名(users)
コマンド:php artisan make:migration create_users_table
カラム追加:add_column_to_users_table
実行コマンド:php artisan migrate
マイグレーションの詳細
upとdownメソッド
upが実行(作成),downがもとに戻す(削除)
カラムの作成はBlueprintオブジェクトのtableメソッドを使う
$table->string('name') // 名前カラムを作成
DB作成
https://scrapbox.io/files/627e132d77d959001d6e74fa.png
コメント
azami.icon
しっかり書いていてすごい
めっちゃやる..!今日はlaravel
恥ずかしながらDB周りちゃんとやったことないからなるほどーになっている
mirgateはどのバックエンドでもやるやつ "理解"っていてすごい
ひのき
コマンドをここに書いているのすごくいい。真似したいときに真似しやすい
↑めっちゃわかるazami.icon
Laravel、名前だけしか知らなかったからめっちゃ参考になる!
Django一緒に頑張ろうね!
次回
Laravel続き,Django
5/20
Eloquent ORM
Laravel で提供されているデータ操作のための機能
「モデル(DB処理,ロジック)」 と「DB」を対応づける
ORM
Object Relational Mappingの略
プログラミング技法
データベースから取得したデータをオブジェクトして扱える
Eloquentモデルの作成
php artisan make:model ModelName
モデル名はテーブル名の単数形にする
fillableプロパティ
ホワイトリスト
$fillableに指定したカラムのみ、create()やfill()、update()で値が代入される
複数代入(複数のカラムにデータを入れる)できる
guardedプロパティ
ブラックリスト
$guardedに指定したカラムのみ、create()やfill(),update()で値が代入されない
複数代入(複数のカラムにデータを入れる)できない
ルーティング
ブラウザから任意のURLにアクセスがあった場合、 どのController処理を動かすのかを定義する
routes/web.php ファイルに処理を記述する
HTTPメソッドも定義できる (GET、 POST, PUT, DELETE)
例
Route::get(’blogs’, ‘BlogController@showlist’)->name('blogs’);
get:httpメソッド,blogs:任意のURL,BlogController:作ったControllerを指定
showlist:Controllerのメソッド名を指定,->name('blogs’):ルートの名前
コントローラ
route で定義されたHTTPリクエスト (URL) の処理を書く
Laravelの既存のコントローラクラスを拡張して作られる
例えば、 ブログの処理をするコントローラはBlog Controllerでまとめる
コントローラの作成
ブログコントローラを作る
php artisan make:controller BlogController
コントローラの呼び出し,流れ
場所:routes/wep.php
Route::get('blogs', 'Blog Controller@showList')
場所:controller/BlogController.php
public function showList()
※コントローラーはスリム(コードを少なく)するのが良い
view
resources/viewsのなかのbladeを返す
Bladeテンプレート
Laravelのテンプレートエンジン
※PHPにはsmartyというテンプレートエンジンもある
HTMLを書くイメージ
BladeはPHPを直接記述できる
Bladeはテンプレートの継承やデータの受け渡しができる
感想
バージョン違いで記述が変わっているので少し大変
コメント
宮本凜.icon知恵袋僕も作っていきたいです
次回
Laravel続き,Djangoも触りたい...
5/27
bladeファイル
code:list.blade.php
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ブログ</title>
<link rel="stylesheet" href="/css/app.css">
<script src="/js/app.js" defer></script>
</head>
<body>
<header>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="#">ブログ</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-item nav-link active" href="#">ブログ一覧 <span class="sr-only"></span></a>
<a class="nav-item nav-link" href="#">ブログ投稿</a>
</div>
</div>
</nav>
</header>
<br>
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<h2>ブログ記事一覧</h2>
<table class="table table-striped">
<tr>
<th>記事番号</th>
<th>日付</th>
<th>タイトル</th>
<th></th>
</tr>
<tr>
<td>1</td>
<td>2112/09/03</td>
<td>テスト</td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<footer class="footer bg-dark fixed-bottom">
<div class="container text-center">
<span class="text-light">blog</span>
</div>
</footer>
</body>
</html>
→ここから共通部分をテンプレート化する
表示結果
https://scrapbox.io/files/62905250c169110021158043.png
Viewの継承
親Viewですべきこと
@yieldで各子ビュー固有のパーツをどこで反映させたいかを記述する。
@yield('section名')
@includeでbladeファイルを読み込む。
@include('bladeを指定')
子Viewですべきこと
@extendsで今から親ビューを継承する、と宣言する。
@extends('bladeを指定')
@sectionで自分固有のパーツを定義する。
@section('セクションの名前')
共通テンプレの作成
code:layout.blade.php
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>@yield('title')</title>
<link rel="stylesheet" href="/css/app.css">
<script src="/js/app.js" defer></script>
</head>
<body>
<header>
@include('header') <!-- ヘッダ共通化 -->
</header>
<br>
<div class="container"> <!-- コンテンツパーツ -->
@yield('content')
</div>
<footer class="footer bg-dark fixed-bottom">
@include('footer') <!-- フッタ共通化 -->
</footer>
</body>
</html>
code:list.blade.php
@extends('layout') <!-- layout.bladeを継承 -->
@section('title', 'ブログ一覧') <!-- セクションで引数の指定も可能 -->
@section('content') <!-- コンテンツセクション -->
<div class="row">
<div class="col-md-8 col-md-offset-2">
<h2>ブログ記事一覧</h2>
<table class="table table-striped">
<tr>
<th>記事番号</th>
<th>日付</th>
<th>タイトル</th>
<th></th>
</tr>
<tr>
<td>1</td>
<td>2112/09/03</td>
<td>テスト</td>
<td></td>
</tr>
</table>
</div>
</div>
@endsection
code:header.blade.php
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="#">ブログ</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-item nav-link active" href="#">ブログ一覧 <span class="sr-only"></span></a>
<a class="nav-item nav-link" href="#">ブログ投稿</a>
</div>
</div>
</nav>
code:footer.blade.php
<div class="container text-center">
<span class="text-light">blog</span>
</div>
seeder
seederはLaravelのクラスの一つ
テストデータを簡単にデータベースに設定できる
Factoryによってランダムデータを与える
seederの使い方
生成・実行
php artisan make:seeder ファイル名
php artisan db:seed
seederファイルを編集
runメソッドに設定を記述
データ作成の処理を書いていく
DatabaseSeeder.phpに登録
作ったシーダーをこのファイルに登録することで呼び出せる
Factoryの使い方
生成
php artisan make:factory ファイル名
php artisan db:seed
Faker PHPライブラリ
ダミーデータを生成するphpライブラリ
https://scrapbox.io/files/629087f925856c001dd1896d.png
seederで生成したテストデータ
====5/27コメント====
azami.icon
バックエンド何もわからんけど結構実践的なことをやっているーーー
すごい結構逐一ちゃんといろいろ書いてる
hi6emon
php使ってるんですね!
おもしろい
Mahiro_Irie.icon
僕バックエンドわからないので凄いです
知識を細かく書いていて良いですね
次回
Laravel続き,Djangoも触りたい...,gitをVScodeで使えるようにする
6/10
ブログ表示の処理の流れ
EloquentモデルでDBからブログデータを取り出す
Eloquentモデルのメソッドを使ってデータを取得
今回はallメソッドを使用
Controllerでモデルクラスを呼び出してVIewにデータを渡す
Blade(view)でブログデータを一覧表示する
ブログ詳細表示の処理の流れ
詳細表示したいブログのIDでリンクを作って飛ばす
routeでIDを受け取り Controllerへ渡す
Modelで該当IDデータを取り出す
Viewで表示する
→一旦エラーが出たが,サーバーソフトをNginxからApacheに切り替えたら表示できました
https://scrapbox.io/files/62ac3518f13867001e89b465.png
https://scrapbox.io/files/62ac3525f530ec001dfbd802.png
6/17
ブログ登録の流れ
フォームからデータを飛ばす(CSRF保護必須)
routeで受け取りControllerへ
フォームリクエストでバリデート
Modelでデータを登録(トランザクション処理を入れる)
エラー処理(DBエラーの対処(try-catch))
バリデーション
入力されたデータが正しいかどうかをチェックする
必須チェックや文字数チェックなど
Laravelフォームリクエスト
Illuminate\HttpRequestにある
validateメソッド
バリデーションのルールを作成でき、失敗したらエラー ($errors) を返せる
例) titleが必須または255未満のルール
code:title<255
Request->validate([
'title' => 'reuired | max:255'
]);
Modelでデータ登録
createメソッドを使う
code:タイトル追加
$blog Blog::create([ =
'title' => 'タイトル'
]);
saveメソッドを使う
code:タイトル追加
$blog = new Blog;
$blog->save();
※modelでfillableかguarded属性を設定して保護が必要
フィードバック
amixedcolor.icon
Scrapboxすっごいいっぱいかいてあってすごいなぁ
これぞエンジニア日誌感
tomoki.icon
Laravelも勉強しなきゃなあ PHPが嫌いで
kawaguchi.icon
Youtubeのチュートリアルなるほど
見返すの大変だからテキストに起こしておく需要すごいありそう
次回
Laravel続き
6/23
ブログ登録のつづき
ブログ投稿フォーム
https://scrapbox.io/files/62b575130db416001d858c15.png
https://scrapbox.io/files/62b574f855dc7e002292b9a2.png
https://scrapbox.io/files/62b574dfe8050a0023a33d88.png
タイトル・本文が空白のときは投稿できない
https://scrapbox.io/files/62b574edf76279001d8ccf99.png
フィードバック
naga.icon おお!デモがある~ 過去のブログも見られる、本格的。他の人も触れるとうれしいな
空白なしで投稿できない機能を作っているのがすごいと思いました!
Nakaya.icon Laravel私もやってます!デモすごいですね!
次回
ブログサイト完成させる