Laravel5.7 テンプレートの継承

公式ドキュメントのBladeテンプレートの継承に習って構築していきます。
https://readouble.com/laravel/5.7/ja/blade.html

レイアウト定義
Bladeビューとして定義する。マスターのテンプレート名は迷いますね。公式ドキュメントではapp.blade.phpと記載がありますが、これは悩みますな。
とりあえず入れてみます。
/resources/views/app.blade.php

<!DOCTYPE html>
<html>
  <head>
  	<meta http-equiv="Content-Type" charset="utf-8">
    <title>@yield('title')</title>
    <meta name="description" content="Zeusはメール配信管理システムです。" />
    <link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.css" rel="stylesheet">
    <link rel="stylesheet" href="{{ asset('/css/style.css') }}">
    <link rel="stylesheet" href="{{ asset('/css/main.css') }}">
    <link rel="shortcut icon" href="/assets/img/favicon.png">
    <script src=""></script>
  </head>
  <body>
   <!-- 共通ヘッダー -->
   <div id="header">
    <h1><a href="/"><img src="/asset/img/log.png" alt="" />Zeus</a></h1>
    <ul id="helpNav">
        <li><a href="/top.html">ホーム</a></li>
        <li><a href="/logout.html">ログアウト</a></li>
    </ul>    
    <ul id="gNav">
        <li class="menu__single"><a href="/profile">アカウント一覧</a>
        <ul class="second_level">
          <li><a href="/profile">プロフィール詳細</a></li>
          <li><a href="/account/index">アカウント一覧</a></li>
          <li><a href="/account/input">アカウント新規登録</a></li>
          <li><a href="/company/index">原稿管理会社一覧</a></li>
        </ul>
        </li>
        <li class="menu__single"><a href="/manu/index">原稿一覧</a>
        <ul class="second_level">
          <li><a href="/manu/index">原稿一覧</a></li>
        </ul>
        </li>
        <li class="menu__single"><a href="/help.index">Zeusについて</a>
          <ul class="second_level">
            <li><a href="/help.index">ヘルプ</a></li>
            <li><a href="/manual/zeus.pdf">マニュアル</a></li>
            <li><a href="/rules.html">利用規約</a></li>
            <li><a href="/login">ログイン</a></li>
          </ul>
        </li>
        </ul>
    </div>
    <!-- / 共通ヘッダー -->

    <div id="content">
      @yield('content');
    </div>

    <!-- 共通フッター -->
  	<footer>
  		hpscript
  	</footer>
    <!-- / 共通フッター -->
  </body>
</html>

継承するレイアウトを指定する
resources/views/top.blade.php

@extends('app')
@section('title', 'トップページ')

@section('content')
<div id="top-main">
         <h2>Zeus</h2>
         <p>原稿作成・入稿ツールです。<br>原稿の作成・保存・入稿作業にご利用いただくことができます。</p>
      </div>
      <div id="news_h">
            <p>お知らせ</p>
      </div>
      <div id="news_t">
            <p>2018/10/17 ツールをリニューアルしました。</p>
      </div>
@endsection

ああああああああああ、これはマジで凄い。
Laravelびっくりした。

便宜的にlayoutフォルダの下に格納した方が良さそうですね。

Laravel5.7 bladeファイルをインクルードする手順

1. 何をインクルード化するか決める
2. /resources/views/ 配下にテンプレート化するbladeファイルを作成する
3. 2で作成した共通ファイルにインクルードする内容を書く
4. @include(”)構文を利用してインクルードする

1. 何をインクルード化するか決める
なにをインクルードするか。
パーツとして思いつくのは、head、header navi、footer。他にもあるかもしれないが、まずは、この3つをインクルードする。

2. /resources/views/ 配下にテンプレート化するbladeファイルを作成する
共通ヘッダをインクルードするため、common-head.blade.phpをviewsディレクトリ配下に作る。

3. 2で作成した共通ファイルにインクルードする内容を書く
あれ、titleはインクルードできないじゃん。

<head>
  	<meta http-equiv="Content-Type" charset="utf-8">
    <title>トップページ</title>
    <meta name="description" content="Zeusはメール配信管理システムです。" />
    <link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.css" rel="stylesheet">
    <link rel="stylesheet" href="asset/css/style.css">
    <link rel="stylesheet" href="asset/css/main.css">
    <link rel="shortcut icon" href="/assets/img/favicon.png">
    <script src=""></script>
  </head>

もう一度しっかり公式ドキュメントを見てみよう。
Bladeテンプレートについて記載がありました。
https://readouble.com/laravel/5.7/ja/blade.html
やり直しましょうw

Laravel5.7でCSSを読み込む時

Laravelで読み込む際は、{{ asset(‘$path’)}}を使う。

<link href="{{ asset('$path') }}" media="all" rel="stylesheet" type="text/css" />

具体的に見てましょう。views配下にlogin.blade.phpがあります。
/resources/views/loging.blade.php
viewsの中に以下のようにassetフォルダはおきません。全てpublic配下に置きます。

<head>
    <meta charset="utf-8">
    <title>ログイン</title>
    <link rel="stylesheet" href="asset/css/style.css">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.1/css/all.css" integrity="sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz" crossorigin="anonymous">
    <script src=""></script>
  </head>

CSSが効いていません。

/public/css/style.css を作る
css, js, imgなどはpublic配下に置く

先に作っていたcssをペーストします。

body {
  margin: 0px; }
  body #content {
    margin-right: 50px;
    margin-left: 50px; }
    body #content .sm {
      font-size: 11px; }

h1 {
  text-align: center; }

p {
  font-size: 0.975px; }

#form {
  font-size: 0.875px; }
  #form tr {
    height: 80px; }
  #form th {
    border: solid 1px #ccc;
    width: 200px;
    text-align: left;
    background-color: #f5f5f5;
    padding: 5px; }
  #form td {
    border: solid 1px #ccc;
    width: 800px;
    padding-left: 10px; }

.button_wrapper {
  text-align: center; }

input[type="text"] {
  border: 0;
  padding: 10px;
  font-size: 1.3em;
  color: #aaa;
  border: solid 1px #ccc;
  margin: 0 0 20px;
  width: 700px;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  broder-radius: 3px; }

#square_btn {
  position: relative;
  text-align: center;
  display: inline-block;
  padding: 0.55em 0.7em;
  text-decoration: none;
  color: #fff;
  background: #483d8b;
  border: solid 1px #483d8b;
  border-radius: 4px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); }

footer {
  position: fixed;
  margin-top:;
  bottom: 0px;
  width: 100%;
  height: 30px;
  padding-top: 10px;
  padding-bottom: 10px;
  background: #483d8b;
  text-align: center;
  color: #fff; }

/resources/views/loging.blade.php のCSSパスを書き換え
bladeのパスを{{ asset(‘/css/style.css’) }}とします。

<head>
    <meta charset="utf-8">
    <title>ログイン</title>
    <link rel="stylesheet" href="{{ asset('/css/style.css') }}">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.1/css/all.css" integrity="sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz" crossorigin="anonymous">
    <script src=""></script>
  </head>

サーバーで確認
下図赤線で囲っているように、/loginでCSSが通っているのが分かります。

OKじゃないでしょうか。
では、数十ページやりましょうかね。やっぱり、Controllerとview、modelはそれぞれ考えることが違うので、モデル、フロントは先に作っておいた方が効率いいですね。
一人称でサイトつくるとMVCのメリットがイマイチわからんと思ってたけど、ER図、frontなどをそれぞれ作るなら、MVCの利が理解できます。

Laravel5.7でController、Routing、Viewを構築する

laravel5.7でloginページを作りたいとします。

構築の流れ
1. コマンドラインphp artisan make:controllerでloginをつくる
2. /routes/web.phpでLoginControllerのgetメソッドを書く
3. /app/Http/Controllers/LoginController.phpでviewを書く
4. /resources/views/login.blade.phpでviewを書いていく
5. php artisan server –host でサーバーを立てる
6. ブラウザで192.168.35.10:8000/login で表示確認

1. コマンドラインphp artisan make:controllerでloginをつくる
Laravelは命名規則は他のフレームワークに較べて、然程厳しくないと言われています。
しかしながら、Controllerはキャメル記法が推奨されています。
キャメル記法とは単語の頭を大文字にする記述方法です。
例えば、userのcontrollerならUserControllerとします。複数形が推奨されており、UsersControllerの方が良いとされています。ここでは、キャメル記法に習ってLoginControllerとします。
[vagrant@localhost zeus]$ php artisan make:controller LoginController
Controller created successfully.
すると、/app/Http/Controllers/ 配下に、LoginController.phpが出来ます。

2. /routes/web.phpでLoginControllerのgetメソッドを書く
web.phpに以下のように$uriと$callbackを追加します。これは、LoginController.phpの”login”メソッドを呼び出せ、という意味です。上の’/’に関しては、ホームディレクトリにアクセスがあった場合には、AccountControllerのindexメソッドを呼び出せ、という意味になります。

Route::get('/', 'AccountController@index');
Route::get('/login', 'LoginController@login');

なお、Httpリクエストに対して定義できるメソッドは以下のようになります。

Route::get($uri, $callback);
// GETリクエストに対してのルーティング
Route::post($uri, $callback);
// POSTリクエストに対してルーティング 主にフォームのPOSTリクエスト
Route::put($uri, $callback);
// PUTリクエストに対してルーティング
Route::patch($uri, $callback);
// PATCHリクエストに対してのルーティング
Route::delete($uri, $callback);
// DELETEリクエストに対してのルーティング
Route::options($uri, $callback);
// OPTIONSリクエストに対してのルーティング

3. /app/Http/Controllers/LoginController.phpでviewを書く
上記1で作成されたLoginController.phpに、loginメソッドを書きます。
viewのlogin.blade.phpを読み込みます。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class LoginController extends Controller
{
    public function login(){
    	return view('login');
    }
}

4. /resources/views/login.blade.phpでviewを書いていく
なんでもいいですが、hello laravelとしておきます。

<!DOCTYPE HTML>
<html>
<head>
    <title>login</title>
</head>
<body>
    <h1>Hello Laravel</h1>
</body>
</html>

5. php artisan server –host でサーバーを立てる
サーバーを立ち上げます。
[vagrant@localhost zeus]$ php artisan serve –host=192.168.35.10
Laravel development server started:

6. ブラウザで192.168.35.10:8000/login で表示確認

Laravelアプリケーション開発の進め方

どのような流れで開発していけばいいか。DBのテーブル、モデル、フロントは出来ている前提。

1. make artisanでControllerページ作成
2. Controllerにfunctionを書く
3. Routingを設定
4. Controllerに処理を書く
5. Viewを書く
6. バリデーション

つまり、Controllerをつくって、routingして、Viewを書いて、Controllerの処理を編集していく。

あ、小俣さんの会社も上のようなホワイトボードにcontrollerの流れを書いてた。。

ヨ〇バシ mac book air 64GB 2011年モデル 査定額

純正のアダプターがなかったので、じゃんぱら、ソフマップで買い取り対象とならず。
さすが、しっかりしてますね。

しょうがないので、ヨ〇バシに行ってみよう

11時ごろ
定員「osが入ってないので、査定に早くても夜くらい、もしくは朝になりますね」
わたし「そんなにかかりますか?」
定員「OSダウンロードに時間かかりますので」
わたし「(OSのダウンロードって20分の筈だが…) 」


正直ここで止めとけばよかった。嫌な予感が走った。


わたし「えらいかかりますね、、わかりました。お願いします。」
定員「査定が終わったら連絡します。」

翌日10:30
定員「もしもし、査定が終わりまして、付属品がない為、2000円になります」

わたし「??? 」
わたし「(焼肉一回食べるのと一緒じゃん…)」
わたし「(爽やか風に)今回は止めときますー」

ということで結論
2000円

なるほど、こういう風に商売するのか。これは誰がやっても絶対に利益が出るね。
実際の査定は30分くらいだけど、査定に1日かけるってところがミソだな。

同じ仕組み作るかー

パソコン(mac book air)断捨離の覚書

パソコン (mac book air 64GB 2011年モデル)を断捨離したいと思う。エンジニアにとってパソコンは商売道具だから、断捨離の順番でいくと本当に最後の最後(20万のスーツより後)になった。

パソコン(macbook)を断捨離する理由
– 現在、他のパソコンを使っており、ほぼ使用していない
– 64GBはHDDのスペック低すぎる。Unity、X-codeを入れたらすぐに容量が足りなくなる。HDDは256GBくらい欲しい
– CPUもcore-iシリーズの一つ前のスペックで、遅い。最低corei 5以上は欲しい
– mac bookにはphotoshop、illustrator、x-codeが入っており、それが気になって、思考の邪魔をする
– 必要なタイミングでmac bookを買いなおしてphotoshop、illustrator、x-codeを入れればいいと思えるようになった

macbookの断捨離方法
– 必要なデータはi cloudに移行
– データを全て削除し初期化
– mac bookの外装を掃除
– キーボードカバー、電源アダプターなどは処分
– じゃんぱらに買い取ってもらう
http://www.janpara.co.jp/

パソコン断捨離の効果

– 時間が増える(パソコンを買い替えるかどうか考えなく済むようになった)
– 思考がよりクリアーになり、優先順位がつけやすくなった
– より今の仕事にコミットできるように感じる
– 自分自身を今のクライアントに捧げている感じ
– するとクライアントから少しづつ面白い仕事が舞い込んでくる。これはマジ。自分でも理解不能。
– 周りのエンジニアとのコミュニケーションが格段に良くなった。みんなが色々教えてくれる。これもすげー不思議。
– 相手の要望をちゃんと聞ける余裕ができてきた。余裕がないときは自分のプライドをひたすら守っていたが、今は、相手のプライドや立場、考えを尊重しようと思えるようになった。結果的に1対1の交渉事が上手くいきやすくなる。
– その結果、謎の臨時収入が入る(笑) 使い道が全くない。再投資か。。。
– そして更に、金だけでなく色々教えてもらえる。
– やりたかったことをしたり贅沢しまくってるのに金が全く減らない。どうしよう。

パソコン断捨離のデメリット
– 正直何一つない
– あえて言うならば他に断捨離するものがほぼなくなってきた

OK!三連休一番の仕事した!!

Laravel5.7 ControllerからMySQLへupdate, delete

DB::updateで、update文を書けばOKです。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Account;

class AccountController extends Controller
{
    //
    public function index()
    {
    	// $account = Account::first();
    	// dd($account->login_id);
    	DB::update('update account set login_id = "adminUser" where id = ?', ['1']); 	
    }
}

deleteの場合

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Account;

class AccountController extends Controller
{
    //
    public function index()
    {
    	// $account = Account::first();
    	// dd($account->login_id);
    	DB::delete('delete from account where id = ?', ['2']); 	
    }
}

Laravel5.7 ControllerからMySQLへレコードインサート

公式ドキュメントにならって、Controllerから接続しているDBにinsertしたいと思います。

公式ドキュメントhttps://readouble.com/laravel/5.7/ja/database.html

AccountController.phpからaccount tableに入れたいと思います。Http\RequestとApp\Accouontは特に使っていませんmm

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Account;

class AccountController extends Controller
{
    //
    public function index()
    {
    	// $account = Account::first();
    	// dd($account->login_id);
    	DB::insert('insert into account(login_id, company_id) values(?, ?)', ['user1', 0001]);		
    }
}

mysql側でinsertされているか確認します。

入っているようです。OKかな。次は、recordをdeleteしたいと思います。

Laravel5.7でコントローラーからモデルの呼び出し

大まかな流れです。Controllerからのモデルの呼び出しは、Controllerでモデルを引っ張てくればいいだけです。

1. SeederでMySQLにデータを入れる
2. MySQLにデータが入っているか確認する
3. Controllerを作成する
4. Routingで作成したコントローラーの設定をする
5. Controllerでモデルを呼び出す
6. Viewの確認

Controllerの作成から見てみましょう。
1. php artisan make:controllerでコントローラーを作成する
AccountControllerをつくります。

[vagrant@localhost zeus]$ php artisan make:controller AccountController
Controller created successfully.

するとapp/Http/Controllers 配下にAccountController.phpが作成されます。
AccountController.phpの中身は以下の通りです。後程、モデルを呼び出す際に編集していきます。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AccountController extends Controller
{
    //
}

2. Routingで作成したコントローラーの設定をする
routes/web.phpを編集していきます。ホーム(“/”)にGetリクエストがあった場合に、AccountController@indexを呼び出すよう書きます。

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// Route::get('/', function () {
//     return view('welcome');
// });
Route::get('/', 'AccountController@index');

3. Controllerでモデルを呼び出す
まず、use App\Accountで、Accountモデルを呼び出すと定義し、Account::first();を変数に格納します。$account->login_idで呼び出します。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Account;

class AccountController extends Controller
{
    //
    public function index()
    {
    	$account = Account::first();

    	dd($account->login_id);
    }
}

4. php artisan serveでサーバーを立てます
[vagrant@localhost zeus]$ php artisan serve –host=192.168.35.10
Laravel development server started:

5. viewで確認する
ブラウザでhttp://192.168.35.10:8000/にアクセスする
mysqlからデータをひっぱてきています。

OK!
テーブルごとにモデルを作る必要があるか。