20190203のlaravelに関する記事は6件です。

Laravelのサービスコンテナについて

サービスコンテナとは?

  • Laravelの中のDIコンテナ
  • クラスのインスタンスを管理する
  • サービスコンテナに登録することでそのクラスをアプリケーションのどこからでも使用することができる

そもそもDIコンテナとは?

  • インスタンスの生成を全て別の場所で一括で管理すること
  • 単純なDIだけの場合、引数が鬼のような数になる可能性がある
  • 上記を解決するのがDIコンテナ

DIとDIコンテナは異なる

DIとは?

  • Dependency Injectionの略
  • 依存性の注入と言われるが、オブジェクト注入のこと
  • constructorで引数を元に外部からオブジェクトを注入すること。普通は、newを使う
  • Interfaceを使って外部注入したほうがより変更に強くなる
  • constructor以外にもsetter,methodなどから注入する方法も存在する
  • DIとDIじゃない場合の比較をした際のDIのメリット
    • newしないので、引数のクラスが実装されていなくても動かすことが可能
    • 外部注入したクラスに変更があっても、呼び出し元だけを変更すればよい
  • 参考記事

サービスコンテナ詳細

bind/binding(バインド)

  • サービスコンテナに対してインスタンスの生成方法を登録すること
  • バインドの定義場所はServiceProviderクラス
  • バインドの方法種類
    • bind
      • 常に新しいインスタンスを生成
      • 最も利用される
    • bindif
      • 引数で指定された文字列に対するバインドが存在しない場合のみインスタンスを生成
      • 既に存在していれば何もしない
    • singleton
      • インスタンスを1つのみにする場合に利用する
      • 最初インスタンスを生成して、次からはキャッシュされたインスタンスを返す
    • instance
      • 既に生成したインスタンスを返す
      • singleton同様にサービスコンテナにキャッシュされ、生成では同じインスタンスを返す

resolve/resolving(解決する)

  • サービスコンテナが指定されたインスタンスを生成して返すこと
  • 解決方法
    • makeメソッド
    • appヘルパ関数
    • 両方同じ挙動で、指定された文字列にバインドされた処理を実行してインスタンスを返す
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel ルーティングファイルは増やしていい

Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう (4) 認証API | Hypertext Candy
https://www.hypertextcandy.com/vue-laravel-tutorial-authentication

これの間違い。
routes/api.phpをwebミドルウェアで使うためにRouteServiceProviderを変更してるけどこれはやめたほうがいい。
フレームワークはルールなので普通と違うことをするならそれなりに理由が必要。
例えば後から何も知らない人が参加して気付けるか?と考えると難しい。それどころか変更した本人でさえ数ヶ月後には忘れる。

ではどうすればいいのか。(web.phpに書けば終わるけど他の方法)
RouteServiceProvider::map()の// このたった2文字がヒントだけどルーティングファイルは好きなように増やしてカスタマイズしろってこと。

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapWebRoutes();

        $this->mapApiRoutes();

        //
    }

routes/にファイルを作ってRouteServiceProviderで読み込む。
今回なら内部用のAPIをwebミドルウェアで使うのでroutes/internal_api.phpとでもする。中身の書き方はapi.phpと同じ。

RouteServiceProviderは

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapWebRoutes();

        $this->mapApiRoutes();

        $this->mapInternalApiRoutes();

        //
    }

    protected function mapInternalApiRoutes()
    {
        Route::prefix('api')
             ->middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/internal_api.php'));
    }

何も知らない人が見た場合。
RouteServiceProviderの変更には気付かなくても問題ない。
routes/は絶対に見るので見慣れないファイルがあれば必ず気付く。
webミドルウェアなことなどはroutes/internal_api.phpのコメントにでも書いておけばいい。

将来的に外部用のAPIを作るようになってもroutes/api.phpを普通に使える。
webミドルウェアに変えてたら面倒なことになる。

web.phpかapi.phpかは認証方法で分ける

たぶん一番大元の間違いは「json返すものがAPI」という思い込み。
APIだからapi.phpに書く→apiミドルウェアが適用されてなにもかも間違った方向に。

Laravelのweb/apiはroutes、app/Http/Kernelのミドルウェア、config/auth.phpのguardsと色々出てくるけど偶然同じなのではなく全部セットと考える。
routesを最初と考えると間違える。完全に逆で認証から考える。

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

一番普通なブラウザでログインしてるのはSessionGuard
→webガード
→セッション使うのでwebミドルウェア
→web.php
認証の指定はauth。省略してるだけなので正確にはauth:web

APIはTokenGuard(デフォルトなのにドキュメントには何も書かれてない)
→apiガード
→セッションは使わないのでapiミドルウェア
→api.php
認証の指定はauth:api
Passportなどを使う場合でも同じ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのMigrationでカラムの追加

Laravelのデータベース設計を更新したい

最近、Laravelで新規のWebアプリケーションを製作しております。
MySQLを選択してMigrationでデータベースの設計をやっており、データの挿入をしていましたが、
追加したいカラムが出てきました。

mysql> desc stadium_posts;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| stadium    | varchar(255)     | NO   |     | NULL    |                |
| latitude   | double           | NO   |     | NULL    |                |
| longitude  | double           | NO   |     | NULL    |                |
| league     | varchar(255)     | NO   |     | NULL    |                |
| address    | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
8 rows in set (0.03 sec)


$ php artisan tinker
>>> App\StadiumPost::all()->toArray();
=> [
     [
       "id" => 1,
       "stadium" => "阪神甲子園球場",
       "latitude" => 34.721394,
       "longitude" => 135.361594,
       "league" => "プロ野球",
       "address" => "兵庫県西宮市甲子園町1番82号",
       "created_at" => "2019-02-02 10:37:56",
       "updated_at" => "2019-02-02 10:45:26",
     ],
     [
       "id" => 2,
       "stadium" => "東京ドーム",
       "latitude" => 35.703667,
       "longitude" => 139.753393,
       "league" => "プロ野球",
       "address" => "東京都文京区後楽1丁目3-61",
       "created_at" => "2019-02-02 10:52:41",
       "updated_at" => "2019-02-02 10:52:41",
     ],
     [
       "id" => 3,
       "stadium" => "ナゴヤドーム",
       "latitude" => 35.170915,
       "longitude" => 136.881537,
       "league" => "プロ野球",
       "address" => "愛知県名古屋市東区大幸南1丁目1-1",
       "created_at" => "2019-02-02 11:05:36",
       "updated_at" => "2019-02-02 11:05:36",
     ],
     [
       "id" => 6,
       "stadium" => "明治神宮野球場",
       "latitude" => 35.674572,
       "longitude" => 139.717136,
       "league" => "プロ野球",
       "address" => "東京都新宿区霞ヶ丘町3番1号",
       "created_at" => "2019-02-02 11:09:29",
       "updated_at" => "2019-02-02 11:09:29",
     ],
     [
       "id" => 8,
       "stadium" => "横浜スタジアム",
       "latitude" => 35.443428,
       "longitude" => 139.6401,
       "league" => "プロ野球",
       "address" => "神奈川県横浜市中区横浜公園",
       "created_at" => "2019-02-02 11:11:30",
       "updated_at" => "2019-02-02 11:11:30",
     ],
     [
       "id" => 9,
       "stadium" => "MAZDA Zoom-Zoom スタジアム広島",
       "latitude" => 34.392938,
       "longitude" => 132.458942,
       "league" => "プロ野球",
       "address" => "広島県広島市中区本通8−24",
       "created_at" => "2019-02-02 11:14:15",
       "updated_at" => "2019-02-02 11:14:15",
     ],
   ]

今のデータベースのカラムに以下のことをやりたいと思います。

  • カラムにスタジアムのある国のcountryを追加

 Migrationファイルの作成・実行

参考にしたサイト
https://laraweb.net/knowledge/2251/

artisanコマンドでデータベース更新用のMigrationファイルを作成します

$ php artisan make:migration update_stadiumpost_table --table=StadiumPost
Created Migration: 2019_02_03_190732_update_stadiumpost_table

Migrationファイルを以下のように編集しました

2019_02_03_190732_update_stadiumpost_table.php
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class UpdateStadiumpostTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('stadium_posts', function (Blueprint $table) {
            // countryカラム追加
            $table->string('country');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('stadium_posts', function (Blueprint $table) {
            //
        });
    }
}

php artisan migrateでマイグレーションが実行され、以下の通りカラムが追加されました。

mysql> desc stadium_posts;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| stadium    | varchar(255)     | NO   |     | NULL    |                |
| latitude   | double           | NO   |     | NULL    |                |
| longitude  | double           | NO   |     | NULL    |                |
| league     | varchar(255)     | NO   |     | NULL    |                |
| address    | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
| country    | varchar(255)     | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
9 rows in set (0.01 sec)

$ php artisan tinker
>>> App\StadiumPost::all()->toArray();
=> [
     [
       "id" => 1,
       "stadium" => "阪神甲子園球場",
       "latitude" => "34.721394",
       "longitude" => "135.361594",
       "league" => "プロ野球",
       "address" => "兵庫県西宮市甲子園町1番82号",
       "created_at" => "2019-02-02 10:37:56",
       "updated_at" => "2019-02-02 10:45:26",
       "country" => "",
     ],
     [
       "id" => 2,
       "stadium" => "東京ドーム",
       "latitude" => "35.703667",
       "longitude" => "139.753393",
       "league" => "プロ野球",
       "address" => "東京都文京区後楽1丁目3-61",
       "created_at" => "2019-02-02 10:52:41",
       "updated_at" => "2019-02-02 10:52:41",
       "country" => "",
     ],
     [
       "id" => 3,
       "stadium" => "ナゴヤドーム",
       "latitude" => "35.170915",
       "longitude" => "136.881537",
       "league" => "プロ野球",
       "address" => "愛知県名古屋市東区大幸南1丁目1-1",
       "created_at" => "2019-02-02 11:05:36",
       "updated_at" => "2019-02-02 11:05:36",
       "country" => "",
     ],
     [
       "id" => 6,
       "stadium" => "明治神宮野球場",
       "latitude" => "35.674572",
       "longitude" => "139.717136",
       "league" => "プロ野球",
       "address" => "東京都新宿区霞ヶ丘町3番1号",
       "created_at" => "2019-02-02 11:09:29",
       "updated_at" => "2019-02-02 11:09:29",
       "country" => "",
     ],
     [
       "id" => 8,
       "stadium" => "横浜スタジアム",
       "latitude" => "35.443428",
       "longitude" => "139.6401",
       "league" => "プロ野球",
       "address" => "神奈川県横浜市中区横浜公園",
       "created_at" => "2019-02-02 11:11:30",
       "updated_at" => "2019-02-02 11:11:30",
       "country" => "",
     ],
     [
       "id" => 9,
       "stadium" => "MAZDA Zoom-Zoom スタジアム広島",
       "latitude" => "34.392938",
       "longitude" => "132.458942",
       "league" => "プロ野球",
       "address" => "広島県広島市中区本通8−24",
       "created_at" => "2019-02-02 11:14:15",
       "updated_at" => "2019-02-02 11:14:15",
       "country" => "",
     ],
   ]
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP Laravel ログイン実装

PHP Laravel ログイン実装

今回はサーバ側にも手を出そうと思い、PHPフレームワークのLaravelというのを使用して、ログイン機能を実装してみました。
※実に簡単でした。。。(Laravel便利ですね)

環境

Ubuntu 18.04.1(AWS)
PHP 7.2.14
Laravel 5.7
Mysql 5.7.25

前提

本記事ではPHP、Laravelのインストールは既に終わっている程で話を進めますので、もしまだインストールが終わっていない場合は別記事などで終わらせてください。

Laravelプロジェクトの作成

ターミナルで下記を打ち込みます。
laravel new loginProject

もしこれでできない場合は下記を試してください。
composer create-project --prefer-dist laravel/laravel blog

色々とファイルとディレクトリが作られますが、とりあえずはおいといてください。
(僕もあまり全貌を理解してはいません....)

Auth作成

ターミナルで下記を打ち込みます。
php artisan make:auth

これはauthというライブラリ?のようなものが自動的にログインに必要なもの(登録、ログイン、リマインダーなど)を作成してくれるコマンドになります。
違ってたらすいません。。。

php artisan migrate

DB設定

プロジェクト直下の.envというファイルを開いてください。
下記の[]内の部分を変更してください。

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=[your database name]
DB_USERNAME=[your mysql username(etc root)]
DB_PASSWORD=[your username's password]

SMTP設定

DB設定の中の.envというファイルで、下記の[]内の部分を変更してください。
今回はgmailを使用しました。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_FROM_ADDRESS=[your gmail address]
MAIL_FROM_NAME=[your name]
MAIL_USERNAME=[your gmail address]
MAIL_PASSWORD=[your gmail password]
MAIL_ENCRYPTION=SSL

※GithubなどにPushする場合は、この.envファイルというのはPushしてはいけません。

サーバ起動

ターミナルで下記を打ち込みます。
php artisan serve

下記にアクセスして登録、ログイン、リマインダーが動いていれば成功です。
http://localhost:8000

AWSの場合

AWSなどでグローバルIPを使用している場合はリマインダーのパスワード再設定のリンクがひらけないかもしれません。
これはURLにlocalhostが代入されているからなので、.evnファイルを開いて下記の[]部分を変更しましょう。

APP_URL=[your ip address or DNS(etc http://gmail.com)]

以上です。
まだ始めたばっかでわからないことが多いので、もし間違っていたらご指定頂けると幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelウルトラ超入門 Mac環境構築(Vagrant+Virtualbox+Homestead+Composer)から入門アプリケーション、複数アプリケーションの管理(DB等)まで

書くに至った経緯

はじめまして!
ruby,Railsを一通り終えて(そんなに出来ない、、)次は案件多くて名前かっこいいPHPをやってみようと適当な理由で学習し、フレームワークは『今はLaravelだろ!!』という声もあり(これも理由はふわっとしてますww)
フレームワークはLaravelを用いてやってみようと思ったのですが、初心者なんで環境構築でも詰まるわ、複数管理するのはどうしたらいいの??次何からやったらいいか分かんない!!
って事でそこまでの最短と最初に作ってよかったなと思ったデモアプリまで書いていこうと思います。
やっぱりこれから何個もプロジェクト作れるようになるところまでが環境構築ですよね!
初心者の自分が困った箇所も色々書いていこうと思います。
対象としてはVagrant,Virtualboxで一回は環境構築した事あるよって人向けですが、初心者にも分かりやすく必要以上に丁寧に書こうと思うので温かい目で見てやってください

おまけ:Homesteadで複数のアプリケーションを動かす
参考:PHPフレームワークLaravel Webアプリケーション開発「現場で使えるプロのテクニック」
   初めてのLaravelチュートリアル
   https://paiza.hatenablog.com/entry/2018/02/16/paizacloud_laravel

前提

Vagrant
Virtualbox
Git
ここまでは記事も多いので頑張って来てください!!

手順

Homesteadのダウンロード

Homesteadの設定

Vagrantの起動

入門アプリケーション

おまけ

ざっくりこんな感じで進めていきます。
ではやっていきましょう!!

Homesteadのダウンロード

ホームディレクトリかデスクトップでも(おそらくどこでも大丈夫)いいので下記のコマンドで仮想環境のセットをダウンロードしましょう。

$ vagrant box add laravel/homestead

下みたいに仮想環境ソフトウェアを聞かれるのでvirtualboxを選択してください。

This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) virtualbox
3) vmware_desktop

Enter you choice: 2  ←この場合はvirtualboxが『2』なので2を選択

結構長いので辛抱強く待っててください。

box: Successfully added box .....(略) for 'virtualbox'!

上が出たら正常に終了してます。

ホームディレクトリに移動(「〜」←このディレクトリです)
$ cd

git cloneでダウンロード
$git clone https://github.com/laravel/homestead.git Homestead

これはサクッと終わります。

Homesteadの設定

Homesteadの初期化をしていきます。

Homesteadディレクトリに移動して
$ cd ~/Homestead

初期化
$ bash init.sh

ここからはVimの操作が入ってきます(説明するので分からない方は気にしないでください)

Homesteadディレクトリで
$ vi Homestead.yaml

すると

Homestead.yaml
---
  ip: "192.168.10.10"
  memory: 2048
  cpus: 1
  provider: virtualbox

  authorize: ~/.ssh/id_rsa.pub

  keys:
      - ~/.ssh/id_rsa

  folders:
      - map: ~/code
        to: /home/vagrant/code

  sites:
      - map: homestead.test
        to: /home/vagrant/code/public

  databases:
      - homestead

  # ports:
  #     - send: 50000
  #       to: 5000
  #     - send: 7777
  #       to: 777
  #       protocol: udp

  # blackfire:
  #     - id: foo
  #       token: bar
  #       client-id: foo
  #       client-token: bar

  # zray:
  #  If you've already freely registered Z-Ray, you can place the token here.
  #     - email: foo@bar.com
  #       token: foo
  #  Don't forget to ensure that you have 'zray: "true"' for your site.

上のようにデフォルトの状態になっていると思います
この

sites:
    - map: homestead.test
      to: /home/vagrant/code/public

の部分を

sites:
    - map: homestead.test
      to: /home/vagrant/code/sampleapp/public

に変えてください。(sampleappはこれから作るデモアプリの名前)

vimには特別な操作が必要なのでここではとりあえずファイルを開いたら『i』を押してください、そこからは方向キーを使って移動して上のように変更してください。
変更したら『esc』キーを押してください、その後、『:wq』を押してエンターキーを押してくださいそうしたら保存され、元の画面に戻るはずです。
vimの操作を習得したい方は他で練習してください、、
ちなみにvim使えるようになると開発速度も上がりますし、便利でおすすめです。

共有ディレクトリ、hostsの設定

上が上手くいったら、

ホームディレクトリに移動して
$ cd

codeというディレクトリを作ります。
$ mkdir code

そうしたら

etcディレクトリに移動して
$ cd /etc

管理者権限でhostsファイルを開きます。
$ sudo vi hosts

passwordを聞かれますがmacのパスワードでOKです。

##
  # Host Database
  #
  # localhost is used to configure the loopback interface
  # when the system is booting.  Do not change this entry.
  ##
  127.0.0.1 localhost
  255.255.255.255 broadcasthost
  ::1             localhost

こうなってると思うので一番下に上のvimの操作の通り

192.168.10.10 homestead.test

を追加してあげてください。

Vagrantの起動

ここまでくれば環境構築は後少しで終わりです。
頑張りましょう!!

Homesteadディレクトリに移動
$ cd ~/Homestead

Vagrantを起動
$ vagrant up

だけです!!笑

Laravelのデモアプリ

ではサンプルアプリを作って環境構築出来ているか確認しましょう。

Homesteadディレクトリで
$ vagrant ssh

ssh接続した後に
$ cd ~/code

laravelプロジェクトの作成
$ composer create-project laravel/laravel sampleapp --prefer-dist "5.5.*"

上の方法だとlaravelのバージョン指定が可能です。

しなくて大丈夫です。
$ laravel new sampleapp

このコマンドだと最新のバージョンで作成されます。
学習段階であるなら、適時バージョン指定して学習を進める事をお勧めします。(変なところで詰まるから)

これでプロジェクトも作成されたので

http://homestead.test

にアクセスしてみましょう

スクリーンショット 2019-02-03 17.09.07.png

この画面になれば環境構築は成功しています。
お疲れ様でした!!!

環境構築のみの方はここまでで問題ありません頑張ってください。(おまけは読むことをお勧めします、、)

ではデモアプリに入っていきましょう!!

デモアプリケーション

先ほど作成したsampleappを好みのエディタで開きましょう
ホームディレクトリのcodeの中にあるのでfinderを開いて画面左上の移動を押してそこからホームを選択して移動してcodeの中のsampleappを丸ごとエディタで開きましょう

スクリーンショット 2019-02-03 17.13.56.png

ディレクトリの説明等は他の記事で勉強してください。
今回は投稿、削除機能、一覧機能を実装するデモアプリです。

ではssh接続した状態で

ディレクトリに移動
$ cd ~/code/sampleapp
その後
$ php artisan make:model Task -m -c -r

このコマンドでマイグレーションファイル、コントローラ、モデルが作られます。便利ですね、

ではまず、マイグレーションファイルをいじってみましょう。

database/migrationsの中にあります。

function upの中を

2018_xx_xx_xxxxxxxx_create_tasks_table.php
public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

のようにnameカラムを足してください。これはrailsでも見慣れた光景ですね
その後はもちろんマイグレーションです
laravelではこのコマンドになります。

$ php artisan migrate

これでtasksテーブルが作られました。
念の為mysqlを確認しましょう。

$ mysql --host=localhost --user=homestead --password=secret homestead

mysqlに繋ぐコマンドなので頻発するので.bash_profileに入れてもいいかも知れませんね!

mysqlに入ったら
$ show tables;
$ desc tasks;

これでtasksテーブルがあるのを確認してください
ちなみにshow databases; で確認できるhomesteadをデータベースで使っています。
これはおまけで説明します。

ルーティング設定

laravelのルーティングはroutes/web.phpで管理しています。(多分、、)

web.phpを開いたら

web.php
Route::get('/', function(){return redirect('/tasks');});
Route::get('/tasks', 'TaskController@index');
Route::post('/tasks', 'TaskController@store');
Route::delete('/tasks/{id}', 'TaskController@destroy');

を追加します。
デフォルトの記述は消して下さい。

コントローラー

MVCのCに当たるコントローラーの設定です。
場所はapp/Http/Controllers/にあります。先ほど作成したTaskController.phpを開いて下さい。

TaskController.php
<?php

namespace App\Http\Controllers;

use App\Task;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    public function index()
    {
        $tasks = Task::all();
        return view('tasks', ['tasks' => $tasks]);
    }

    public function store(Request $request)
    {
        $task = new Task;

        $task->name = request('name');
        $task->save();
        return redirect('/tasks');
    }

    public function destroy(Request $request, $id, Task $task)
    {
        $task = Task::find($id);
        $task->delete();
        return redirect('/tasks'); 
    }
}

中身をこのように変更して下さい。
他のcreate等のメソッドはそのままで大丈夫です。

use文がキモだったりします、、

ビューの作成

MVCのVに当たるものです。
viewはresources/views/の中にあります。ここに新たにlayout.blade.phpを作成して下さい。
.bladeはphpの記述をサッパリさせるものと覚えといて下さい。
これはrailsでいう application.html.erbです@yieldに他のビューが埋め込まれます。

layout.blade.php
<!DOCTYPE html>
<html>
    <head>
        <title>Task List</title>
        <!-- CSS And JavaScript -->
        <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic">
        <link rel="stylesheet" href="//cdn.rawgit.com/necolas/normalize.css/master/normalize.css">
        <link rel="stylesheet" href="//cdn.rawgit.com/milligram/milligram/master/dist/milligram.min.css">
    </head>
    <body>
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

の部分はMIlligramというある程度見た目を整えてくれるものを使用しています。
(見た目は今回はどうでもいいので、、)

後は一覧表示させるtasks.blade.phpをまたresources/views/の中に作成します。

tasks.blade.php
@extends('layout')

@section('content')
    <h1>Task List</h1>
    <form action="/tasks" method="POST" class="form-horizontal">
        {{ csrf_field() }}
        <!-- Task Name -->
        <div class="form-group">
            <label for="task" class="col-sm-3 control-label">Task</label>
            <div class="col-sm-6">
                <input type="text" name="name" id="task-name" class="form-control">
            </div>
        </div>

        <!-- Add Task Button -->
        <div class="form-group">
            <div class="col-sm-offset-3 col-sm-6">
                <button type="submit" class="btn btn-default">
                    <i class="fa fa-plus"></i> Add Task
                </button>
            </div>
        </div>
    </form>

    <!-- Current Tasks -->
    <h2>Current Tasks</h2>
    <table class="table table-striped task-table">
        <thead>
            <th>Task</th><th>&nbsp;</th>
        </thead>

        <tbody>
            @foreach ($tasks as $task)
                <tr>
                    <!-- Task Name -->
                    <td>
                        <div>{{ $task->name }}</div>
                    </td>
                    <td>
                        <form action="/tasks/{{ $task->id }}" method="POST">
                            {{ csrf_field() }}
                            {{ method_field('DELETE') }}                    
                            <button>Delete Task</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
@endsection

駆け足ですがこれでデモアプリケーションは完成しています。
これでhttp://homestead.test/tasks/ 
アクセスすると動きが見れます。

コードの詳しい説明は
参考にさせて頂いた
https://paiza.hatenablog.com/entry/2018/02/16/paizacloud_laravel
に丁寧に分かりやすく書かれてあるので読んで置いてください(少し内容をlocal環境に合わせるために変更しています。)

お疲れ様でした!!!
後は作りたいものがある方はそれを実現させれるように頑張って、とりあえず勉強したい方はlaravel 入門などでググって色々作って見る事をおすすします!

おまけ(複数のアプリケーションを管理する)

このままではこのデモアプリケーションしか動作しません
それでは困るので2つ目以降の時の変更点を紹介します。(ここで自分は詰まりました、、)
実際にsampleapp_twoというプロジェクトを作ると想定して説明します。

ssh接続した状態で先ほどのようにプロジェクトを作成します。
ディレクトリは~/codeで実行して下さい。

$ composer create-project laravel/laravel sampleapp_two --prefer-dist "5.5.*"

そうしたらssh接続を抜けて(必要あるかは?)~/Homesteadに移動してください

ssh接続を抜ける
$ exit

移動
$ cd ~/Homestead

で先ほど開いたHomestead.yamlをviで編集します。

$ vi Homestead.yaml
Homestead.yaml
sites:
    - map: homestead.test
      to: /home/vagrant/code/sampleapp/public

    - map: sampleapptwo.app     ←追加
      to: /home/vagrant/code/sampleapp_two/public     ←追加

この2行を追加してください(インデントは合わせてください)
さらに

Homestead.yaml
databases:
    - homestead
    - app   ←追加(データーベース名なんでもいい)

を追加して

etcに移動
$ cd /etc

hostsファイルを開く
$ sudo vi hosts

一番下に

192.168.10.10 sampleapptwo.app

を追加してください。

sampleapp_twoに移動します
$ cd ~/code/sampleapp_two

.envファイルを開きます。
$ vi .env

そしてDB_DATABASEを以下のように変更してください。
DB_USERNAMEはそのままで大丈夫です。(ここでハマりました)

DB_DATABASE=app

これで設定はOKです

Homesteadに移動
$ cd ~/Homestead

vagrant停止
$ vagrant halt

vagrant起動 
$ vagrant up --provision

これで
http://sampleapptwo.app
にアクセスすると二つ目のアプリケーションにアクセスできます。

ちなみに

ssh接続した後
$ mysql --host=localhost --user=homestead --password=secret homestead

$ show databases;

これでappデータベースが作成されているかと思います。

3つ目以降も同じ方法で大丈夫かと思います!

最後に

ここまでお付き合いしていただきありがとうございます。
自分自身もコマンド一つ一つの説明ができる程ではありませんが書かせてもらいました。
知識がある方には無駄な記述が多いかと思いますがこれで初心者の方が早くアプリケーション開発に進んでくれればと思います。
うる覚えなのでもしかしたら抜けているところがあるかも知れませんが、この後進めない!って箇所があればコメント下されば適時対応します。

アプリケーション開発の勉強したいのに環境構築で詰まるとやる気無くなっちゃいますよね、、
自分自身もこれからゴリゴリlaravelで開発していきたいと思います!!

お疲れ様でした!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PSequel から Homestead 上の PostgreSQL に接続するときの設定

PSequel から Homestead 上の PostgreSQL に接続します。

動作環境

  • Mac OS X 10.14.2
  • psql (PostgreSQL) 10.6 (Ubuntu 10.6-0ubuntu0.18.04.1)
  • Homestead v8.0.2
  • PSequel Version 1 (1.5.3)

PSequel の接続設定

Homestead では標準で PostgreSQL が使用できるので、特別な設定は必要ありません。

Host: localhost
User: homestead
Password: secret
Database: homestead
Port: 54320

psequel_setting.png

接続エラーが出る場合の対処

ポート番号の設定を「Port: 5432」としてしまうと、以下のエラーが出ます。

psequel_error.png

PostgreSQL Error
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (::

ホスト OS(Mac OS)から Homestead 上のデータベースにアクセスするには、以下のポート番号を使用する必要があります。

MySQL: 33060 → Forwards To 3306
Postgres: 54320 → Forwards To 5432

Laravel Homestead > Connecting To Databases
https://laravel.com/docs/5.7/homestead#connecting-to-databases

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む