20200310のlaravelに関する記事は14件です。

【Laravel】assertSeeとassertSeeTextの違い

結論

assertSeeTextではHTMLタグをテストできません。

// HTMLタグ
$response->assertSee('<title>タイトル</title>'); // OK
$response->assertSeeText('<title>タイトル</title>'); // NG

// テキスト
$response->assertSee('タイトル'); // OK
$response->assertSeeText('タイトル'); // OK

彼らから見えている世界

assertSee

<li><a href="http://localhost">ホーム</a></li>\n
<li><a href="http://localhost/terms">利用規約</a></li>\n
<li><a href="http://localhost/tokutei">特定商取引法表示</a></li>\n
<li><a href="http://localhost/privacy">プライバシーポリシー</a></li>

assertSeeText

ホーム\n
利用規約\n
特定商取引法表示\n
プライバシーポリシー\n

余談

指定したビューが返されたことをテストする場合はassertViewIsを使いましょう。

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

【Laravel】ajaxでPOST送信→Laravelでredirectできない

はじめに

表題の通りです。

やろうとしたこと

jQueryのajaxでPOST送信してデータを更新する。
こんな感じだとリダイレクトしてくれない。

user.blade.php

$.ajax({
    type: 'POST',
    url: "/user/update",
    data: {'name': 'hoge'},
    headers: {
        'X-CSRF-TOKEN': "{{ csrf_token() }}"
    }
});

UserController

return redirect('/detail');

解決策

その1:ajaxではなくformを使う

上記の例だとボタンクリック⇨ajaxでpost通信だったので、Form::openを使ってsubmitさせる

user.blade.php

{{Form::open(['url' => 'user.update', 'method' => 'post'])}}
    <button type=“submit”>Click</button>
{{ Form::close() }}

その2:redirectをせずにajax側でリダイレクトの処理をする

user.blade.php

$.ajax({ 
    type: 'POST',
    url: "/user/update",
    data: {'name': 'hoge'},
    headers: {
        'X-CSRF-TOKEN': "{{ csrf_token() }}"
    }
}).done ({
    location.href = “/detail”;
});

UserController.php

return response()->json([]);
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Win10 + PHP + Laravel 開発環境構築メモ

概要

  • Windows10にPHP開発環境を構築したときのメモです
  • 後で見返す用に書きだしたレベルなので、内容は適宜修正します。

PHP(XAMMP)

  • Apache, MariaDB, PHP, Perl などがパッケージ化されたもの
  • https://www.apachefriends.org/jp/index.html
    • 特定バージョンを入れる場合は「その他のバージョン~」から
  • インストールした後はPATHを追加する
    • 例) C:\xampp\php

composer


xdebug

  • PHPでデバッグするための拡張モジュール
  • https://xdebug.org/download
    • 色々試行錯誤したけどうまくいかなかったので、最終的に以下の手順で導入した。
  1. コマンドプロンプトで $ php -i をたたく
  2. https://xdebug.org/wizard に[1]の内容を貼り付けて「Analyse my phpinfo() output」を押下
  3. 画面下部に表示される手順に従って操作していく
  4. [1]に戻り、再度 Analyze して Xdebug installed のところにバージョンが出てきたらOK
  5. $ php -v の出力でも確認できる
$ php -v
PHP 7.4.3 (cli) (built: Feb 18 2020 17:29:46) ( ZTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v2.9.2, Copyright (c) 2002-2020, by Derick Rethans ★ここが出力されたらOK
php.ini(参考)
zend_extension = C:\xampp\php\ext\php_xdebug-2.9.2-7.4-vc15-x86_64.dll

[xdebug]
xdebug.remote_enable=1
xdebug.remote_autostart=1
  • vscodeで php -i したとき色々エラーが出る場合は、
    エラー箇所の extension= の後ろをフルパスにしていくとよい?

npm (node.js)


VisualStudioCode

setting.json(追記する)
"php.validate.executablePath": "C:\\xampp\\php\\php.exe",
"php.suggest.basic": false,
  • Extensions として以下を追加した。
    • PHP Debug
    • PHP IntelliSense
    • PHP Class Generator
    • PHP DocBlocker
    • PHP import checker
    • phpcs
    • PHP Intelephense
    • PHP Namespace Resolver
    • Bracket Pair Colorizer
    • VS Code Counter

サンプルプロジェクトで動作確認

  1. $ composer create-project "laravel/laravel=6.*" sample
  2. $ cd sample
  3. $ php artisan -V
  4. $ composer install
  5. $ npm install
  6. $ php artisan serve
  7. 任意の場所 (routes/web.php あたり?) にブレークポイントを置いて、デバッグ起動
launch.json(参考)
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "stopOnEntry": true,
            "log": true
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000,
        }
    ]
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

nginxとphp-fpmを使ってLaravelのhome画面を表示する

前書き

初めての投稿ですので、わかりにくい箇所があるかもしれません。改善案などございましたら、教えてください。

nginxとphpのインストール

自分はMacを使っているので、今回はHomebrewを利用してインストールしていきます。

Homebrew

brew install php@(バージョンは各自指定してください)
brew install nginx

php-fpmはbrewでphpをインストールすると同時にインストールされます。

インストールできたか確認

php -v
nginx -v

nginxとはなにか

nginxとはフリーでオープンなウェブサーバーで、主に静的なコンテンツを高速に配信するように設計されている

php-fpmとは

php-fpmとは、phpのFastCGI 実装のひとつで、主に高負荷のサイトで用意されている機能です。
そもそも、CGIとはwebサーバーで、PHPなどのプログラムを動かすための仕組みです。

なぜnginxを使う時にphp-fpmが必要か?

上記にも書いた通り、nginxは静的ファイル(html/css/js)処理できません。なのでphp-fpmを利用します。

nginxを起動する

nginx (起動)
nginx -s stop (停止)
nginx -s reload (再読み込み)

https://localhost:8080
にアクセスしてみて

こんな画面がでたら成功です。
Welcome-to-nginx-Mozilla-Firefox_001.png

nginxの設定

nginxの編集は基本的にnginx.confに記述していきます。
nginx.confはどこにあるのか、/usr/local/etc/nginxにあリます。
nginx.confを開いて

location / {
            root   html;
            index  index.html index.htm;
        }



 #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

主にlocationというところを編集していきます。
自分の場合はDesktopに新たにindexディレクトリを作成し、その中にindex.phpを作成し、それを表示させました。

nginx -t

このコマンドで、編集したnginx.confのシンタックスチェックしてみてください。
nginx.confの中身を編集した場合は、必ずnginxを再起動してください。

location / {
            root   /Users/username/Desktop/index/;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
           root          /Users/username/Desktop/index/;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME /Users/username/Desktop/index/index.php$fastcgi_script_name;
           include        fastcgi_params;
        }

こんな感じで編集しました。
困ったことはnginxとDesktopの管理者権限が異なり、中々表示できませんでした。

$chown 

このコマンドでnginxのerror.logとaccess.logの実行者を変更しました。

php-fpmの編集

$brew info php@(自分のバージョン)

これで、brewでインストールした、phpの情報が分かります。
php-fpmの編集ファイルはwww.confなので、その中身を

user = nginx
group = nginx

このように編集しました。

$brew services start php

このコマンドも忘れずに実行してください。

ちなみにDesktopのindexディレクトリのindex.phpの中身は

<?php phpinfo(); ?>

としておきました。

こんな画面が表示されたら成功です。
download.png

Laravelを表示するには

nginx.confのrootを編集するだけです。
Laravelの処理の起点となるのは、publicディレクトリです。
Laravelで扱うWebページのルート部分はpublic/ディレクトリになります。このことを理解していれば簡単です。

root          /Users/username/Desktop/projectname/public/;

あとは
https://localhost:8080

download-2.png

この画面が出れば完了です。

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

【Laravel】知らず知らず地雷踏んで死んだ話。

なんの地雷???

php artisan config:cache

キャッシュクリア系のコマンドでよく見るこれ。
これを実行してしまったことによって、env()でnullしか返さなくなってしまった。

いつ気づいた?

元々、config/app.phpに記述している内容が反映されてなかったので、上記のコマンドを使用して反映させるために使った。しかし、使用後すぐローカルのサーバーを落として、再度立ち上げようとすると問題発生。

php artisan serve


PHP Warning:  A non-numeric value encountered in /Users/shiga1/git/training_customer_app/config/app.php on line 16

Warning: A non-numeric value encountered in /Users/shiga1/git/training_customer_app/config/app.php on line 16

In ProviderRepository.php line 208:

  Class name must be a valid object or a string

はじめは全く意味がわからなかったので、調べてみると使用したコマンドがおかしく、実行する前の状態に戻したかったがよく分からず。。。

今後

実行前に軽く、どんなコマンドなのか調べておく。
幸い、ローカルだったので新しいプロジェクト立ててそこに移動させる。

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

LaravelでCookieのSameSite属性を設定する

chromeアップデートでcookieに新しくSameSite属性が追加

SameSite属性の目的

今開いているページのドメインから、別のドメインにリクエストを送る際に、cookieをセットするかどうかを制御。

SameSite属性の種類

Strict
  • cookieをセットしない
Lax (デフォルト)
  • SameSite属性の指定がない場合、扱われる。
  • サーバーとCookieのドメインが同じでもcookieをセットしない場合がある。(POSTメソッド、imgタグ、XMLHttpRequests等)
  • トップレベルナビゲーションであるもの、かつ、getリクエストであるものにcookieをセットする。
    • トップレベルナビゲーションとは・・・ ナビゲーションのためにアドレスバーのURLが変更されること。
None
  • cookieをセットする(secure属性を有効する必要がある。)

SameSite属性のポイント

  • SameSite 属性が指定されていない場合、デフォルトでcookieを「SameSite = Lax」として扱うようになる
  • SameSite = Noneが指定されてる場合、secure属性を有効にしていないとエラーを返す

多くの人がLux設定にするだろうからもう少しわかりやすく

調べてみたら、リクエストタイプ別にCookie送信の可否を書いている人がいたので引用させてもらいます
引用元の記事

リクエストタイプ コード Cookie送信
Link a href="…"
Pererender link rel="prerender" href="…"
Form GET form method="get" action="…"
Form POST form method="post" action="…" ×
iframe iframe src="…" ×
AJAX $.get('…') ×
Image img src="…" ×

設定方法

src/config/session.phpを修正

src/config/session.php
'same_site' => null,
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのインストール後の設定

概要

前回記事でmacOSにインストールしたLarvelの設定を行う

設定

ローカリゼーション

 タイムゾーン(時刻設定)とロケール(地域、言語設定)、フェイカー(ダミーデータ言語)を日本に変更。
 作成したプロジェクトフォルダ配下のconfigフォルダに、設定ファイル app.php があります。

 timezoneで検索(70行目)、値を Asia/Tokyo へ、続くブロックにある local の値を ja へ、 faker_localeja_JP へ変更。

config/app.php
'timezone' => 'Asia/Tokyo',

'locale' => 'ja',

'faker_locale' => 'ja_JP',

データベース

データベースを使わない場合は不要ですが、使う場合はローカルにインストールするか仮想サーバをインストールします。Laravelでは、前者はMac用のValet、後者はHomesteadが用意されています。今回は軽量で動作するValet(ベレット)を使います。

Valetインストール

公式サイト
https://readouble.com/laravel/6.x/ja/valet.html

Laravelをインストールしたディレクトリにて、Composerを使って実行
(artisanでローカルサーバを起動している場合は停止しておきます)

$ composer global require laravel/valet
$ valet install

メッセージ確認
Valet installed successfully!

ping確認
任意のxxx.testにpingを打つと127.0.0.1から応答確認

その他

他のドメインの使用

デフォルトでValetは.test TLDをプロジェクトのドメインとして処理します。他のドメインを使いたい場合、valet tld tld-nameコマンドを使ってください。
たとえば、.testの代わりに.appを使用したければ、valet tld appと実行します。Valetは *.appをプロジェクトのために自動的に使い始めます。

MySQLインストール

Homebrewを用いてインストール

$ brew install mysql@5.7

インストール後、起動

 $ brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)

その他

PHPバージョン

Valetではvalet use php@versionコマンドにより、PHPバージョンを変更できます。指定されたPHPバージョンがインストールされていない場合、ValetはBrewによりインストールします。
valet use php@7.2
valet use php
Note: 複数のPHPバージョンをインストールしている場合でも、Valetは一度に一つのPHPバージョンのみを提供します。

インストレーションのリセット

Valetインストレーションが正しく動作せずに問題が起きた時は、composer global updateの後に、valet installを実行してください。これによりインストール済みのValetがリセットされ、さまざまな問題が解決されます。稀にValetを「ハードリセット」する必要がある場合もあり、その場合はvalet installの前にvalet uninstall --forceを実行してください。

アップグレード

Valetインストールをアップデートするには、ターミナルでcomposer global updateコマンドを実行します。アップグレードできたら、valet installコマンドを実行し、必要な設定ファイルの追加アップグレードを行うのは、グッドプラクティスです。

サイト動作確認

ディレクトリを作成し、parkコマンド実行

$ mkdir ~/DIR
$ cd DIR/
$ valet park

Laravelサイトを作成

$ laravel new blog

ブラウザから http://blog.test を開く

必要なのはこれだけです。 これで"parked"ディレクトリ内に作成されたLaravelプロジェクトは、http://フォルダ名.test規約に従い、自動的に動作します。

前回と同様サイトが表示されればOKです。

blog.png

Valetの停止

起動したサービスを停止する場合

$ valet stop
MySQL
$ /usr/local/opt/mysql@5.7/bin/mysql.server stop
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

XAMPPを使って、Windows環境にLaravelをインストールしてみた!

はじめに

ふとしたきっかけで、Laravelの環境が必要となりましたので、備忘録として、Laravelのインストール手順を纏めてみました。

Laravelとは?

http://laravel.jp/

laravel0.PNG

『ウェブ職人のためのPHPフレームワーク』。響きがいいですね。使ってみるが一番なので、インストールから始めたいと思います。

手順として、3stepsありますので、step by stepで進めて行きたいと思います。

Step1.PHP環境の導入 (XAMPP)
Step2.Composeのインストール
Step3.Laravelのインストール

Step1.PHP環境の導入 (XAMPP)

1-1.XAMPP公式ページにアクセスして、[Windows向けXAMPP]をクリック。

https://www.apachefriends.org/jp/index.html

xamp0.PNG

1-2.ユーザーアカウント制御のポップアップが表示されますので、[はい]をクリック。

1-3.bitnamiが表示されて、インストールが続きます。

install1.PNG

1-4.UACの警告が表示されますが、[OK]をクリック

xamp1.PNG

C:\Program Filesへのインストールを止めてください。もしくは、UACを無効にしてくださいとの警告となります。後の手順で、インストールフォルダを選択できるので、その時にC:\Program files以外を選択することになります。

1-5.[Next]をクリック。

xamp2.PNG

1-6.インストールするコンポーネントを選択して、[Next]をクリック。(今回は、すべてのコンポーネントを選択しております。)

xamp3.PNG

1-7.インストールフォルダを入力して、[Next]をクリック。
(私のPC環境では、C:\の空きがないので、D:\へインストールしております。)

xamp4.PNG

1-8.[Next]をクリック。

xamp5.PNG

1-9.[Next]をクリック。

xamp6.PNG

1-10.インストールが始まります。

xamp7.PNG

1-11.[Finish]をクリック。

xamp8.PNG

1-12.英語 Or ドイツ語のどちらかを選択し、「Save」をクリック。

xamp9.PNG

1-13.XAMPPのコントロールパネルが表示されれば、インストール完了です。

xamp11.PNG

これにて、Step1:PHP環境の準備は完了となります。

Step2.Composerのインストール

2-1.composer公式ページにアクセスして、[Download]をクリック。

https://getcomposer.org/

composer.PNG

2-2.[Composer-Setup.exe]をクリック

composer2.PNG

2-3.『Composer-Setup.exe』がダウンロードされますので、ファイルを実行。

composer2.5.PNG

2-4.[Next]をクリック。

composer3.PNG

2-5.Step1でインストールしたXAMPP配下にあるphp.exeを選択して、[Next]をクリック。

composer4.PNG

2-6.プロキシ環境がある場合には、プロキシ設定を適宜入力して、利用しない場合は、[Next]をクリック。

composer5.PNG

2-7.[Install]をクリック。特にエラーが無ければ、インストール完了となります。

composer6.PNG

これにて、Step2のComposerのインストールは完了です。

Step3.Laravelのインストール

3-1.Laravelをインストールしたいディレクトリに移動して、composerとPHPのPathが通っている事を確認する。(私の場合は、XAMPP配下にインストール致します。)
Pathが通っていない場合は、Pathの追加をお願い致します。

laravel0.PNG

3-2.composerコマンドに create-projectオプションを指定してSampleのプロジェクトを作成します。

#composer create-project laravel/laravel --prefer-dist Sample

laravel0.5.PNG

3-3.Application key set successfullyが表示されれば、インストールが完了です。(約、5分くらいかかりますので、気長にお待ちください!!)

laravel1.PNG

3-4.Sampleフォルダに移動して、下記コマンドを実行するとhttp://localhost:8000 startedとなりますので、Laravelがブラウザで確認可能となります。

#php -S localhost:8000 -t public

laravel1.5.PNG

3-5.http://localhost:8000 にアクセスするとLaravelのページが表示されます。

laravel3.PNG

コンソール画面に下記が表示されます。

laravel2.PNG

これにて、step3:Laravelのインストールは完了となります。

まとめ

Laravelのインストール手順は、いかがでしたでしょうか?
手間はかかりますが、Step by Stepで進めていけば、インストール可能となります。
Laravelのインストール自体に5分位、待ちがありますが、、

最後に、私の記事が少しでも皆様のお役に立てれば、幸いでございます。

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

Laravelのコア1つを、複数サブドメインを作ったエックスサーバーで駆動させる

概要

筆者以前から実験してみたかったのですが、エックスサーバーのサブドメインで、マルチサイトを作れるCMSを構築したい。
個人的にエックスサーバーが好きなんです。すみません。

使い道は、
・テンプレートタイプのLPやホームページの運用
・通販サイト

そんな感じかなぁと。
私は、単純に日々の業務を合理化したいのが目的です。

設定

config/app.php

config/app.php に記述されている urlは 標準だと.envから設定値を読み取り設定しています。
動的に設定したいので、PHPで記述しておきます。
テンプレートで {{ulr('/xxx')}} を使いたい時など設定しておくと便利かと。
.envのAPP_URLは、使っているドメインでも入れておけば良いかと。使われませんので。

    //'url' => env('APP_URL', 'http://localhost'),
    'url' => empty($_SERVER["HTTPS"]) ? "http://" : "https://" . $_SERVER["HTTP_HOST"],

public_html/{subdomain}/

エックスサーバーでサブドメインを作成すると、ドメインの手前の部分はフォルダでpublic_htmlの直下に作成されてきて、そのフォルダがサブドメインのルートディレクトリになりますよね。

サブドメインのルートに標準で作成されているpublicフォルダのデータをコピーします。
ただ、階層が1つ深く沈むのでindex.phpを少々編集が必要です。
autoload.phpとbootstrap/app.php'の相対パス(../)をそれぞれ1つ増やします。

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <taylor@laravel.com>
 */

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels great to relax.
|
*/

require __DIR__.'/../../vendor/autoload.php';

/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/

$app = require_once __DIR__.'/../../bootstrap/app.php';

/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

routes/web.php

ここについては、マニュアル通りに設定してみます。
(公式マニュアル)
https://laravel.com/docs/6.x/routing#route-group-subdomain-routing

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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::domain('{subdomain}.yourdomain.com')->group(function () {
    Route::get('/', function ($subdomain) {
    //ビュー渡し
        return view('welcome',['subdomain'=>$subdomain]);
    });
    //コントローラ渡し
    Route::get('/', 'Controller@index');
});
    /**
     * コントローラ渡しの時は、引数がこれで渡ります
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request, $subdomain)
    {
        return view('welcome', [
            'subdomain'=> $subdomain
        ]);
    }

https://subdomain.yourdomain.com 
所定のURLを開いてみると、welcomeテンプレートには、subdomainの変数が取れるようになります。
あとは、このsubdomainを引数として使って、コントローラやモデルを組んでいけば、
マルチサイトの構築は、いつも通りに作っていけば、できそうですね。
なかなか面白いと思います。
比較的簡単なので興味ある方は一度試してみてわ。
でわでわ。

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

外部キーエラーが出た人へ「SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint」

要因

mysqlにてテーブルを外部キーとして連携したときに起こったエラーです。

エラー

php artisan migrateで下記エラー内容

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `comments` add constraint `comments_ico_id_foreign` foreign key (`ico_id`) references `icos` (`id`) on delete cascade)

解決方法

migrateファイルの生成の順番に問題がありました。

外部キー設定をさせるcomments_tableより後に紐づけたいテーブルであるico_tableがありました。

なので名前を変更してcomments_tableより前に持ってきてphp artisan migrateで治りました。

名前変更前
migrate2.jpg

名前変更後
migrate.jpg

治ったー!

[vagrant@localhost myblog]$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.02 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_12_05_215839_create_posts_table
Migrated:  2019_12_05_215839_create_posts_table (0.01 seconds)
Migrating: 2019_12_22_211023_create_icos_table
Migrated:  2019_12_22_211023_create_icos_table (0.02 seconds)
Migrating: 2019_12_23_071756_create_comments_table
Migrated:  2019_12_23_071756_create_comments_table (0.04 seconds)
Migrating: 2020_01_12_020348_tests_migrate_table
Migrated:  2020_01_12_020348_tests_migrate_table (0 seconds)

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

【laravel】AWSでhttps化したはずなのに一部のページだけhttpになる

今回の騒動

AWSにてhttps化したのに本番環境に以降したら一部のページだけhttp表示となり、かなり困っていたので解消方法を共有します。

前提

環境はlaravel5.8です。
バージョンによっていろいろ違うみたいなのでそこは注意です。

解消方法

App\Http\Middleware\TrustProxiesにprotected $proxies = '**'; を入れるだけ

実例

TrustProxies
<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array|string
     */
    // protected $proxies;
    // protected $proxies = [
    //     '172.31.36.97/16',
    // ];
    protected $proxies = '**'; //付け加えた
    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

laravel公式マニュアルを参照しました。
https://readouble.com/laravel/5.5/ja/requests.html#configuring-trusted-proxies

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

LaravelをMacにインストールしてみよう!

LaravelをMacにインストールしてみよう!

概要

macOSにローカル開発環境としてLaravelをインストール

公式サイト
https://readouble.com/laravel/6.x/ja/installation.html

前提

■環境 
 macOS HighSierra 10.13.16
 Homebrew 2.2.9
 Composer 1.9.3
 PHP 7.4.3
 Laravel 7.0.8

■インストール済みソフト
 Homebrew(macOS用パッケージマネージャー)
 >日本語サイト:Homebrew
 >インストール参考記事:Homebrew使い方まとめ

準備

■Composerインストール
 PHP用ライブラリ依存管理ツールをインストール

$ brew install composer

 >参考記事:PHPのライブラリ管理ツール「Composer」入門

インストール

■laraverlインストール
Composerを使ってインストール

$ composer global require "laravel/installer"

PATHを通す

~/.bash_profile または ~/.bashrc にパスを追加(お使いの設定により)

~/.bash_profile
export PATH=$PATH:/usr/local/bin:$HOME/.composer/vendor/bin

 パス確認(値は環境依存)

$ echo $PATH
usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

 設定反映

$ source .bash_profile

 パス確認

$ echo $PATH
usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/{ユーザー名}/.composer/vendor/bin

 末尾に :/Users/{ユーザー名}/.composer/vendor/bin が追加されていることを確認

プロジェクト作成

$ laravel new {任意のプロジェクト名}

成功のメッセージを確認

Package manifest generated successfully.
Application ready! Build something amazing.

 動作確認 作成したプロジェクトに移動してartisanでバージョン確認&サーバを起動

$ cd PROJECT
$ php artisan --version
Laravel Framework 7.0.8
$ php artisan serve
Laravel development server started: http://127.0.0.1:8000

 ブラウザで表示
ローカルサーバ

以上です。

参考記事

Mac OSにLaravelローカル開発環境構築
https://qiita.com/da-sugi/items/7ee7a458aad4209bab01

Mac OSにLaravel 5.7を導入する方法
https://qiita.com/nemui_/items/a62637a6aa173cbb8b09

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

【laradock】macでの環境構築

【laradock】macでの環境構築

laradockで環境構築をする基本的流れです。

事前に必要なインストール

  • git
  • homebrew
  • Docker

laradockのインストール

dockerで環境構築するフォルダの作成
laradockのインストール

$ mkdir laravel_docker && cd laravel_docker
$ mkdir project01 && cd project01
$ git clone https://github.com/Laradock/laradock.git

.envファイルの作成

.envファイルはlaradockの設定ファイル

$ cd laradock
$ cp env-example .env

laradockの設定ファイルの編集(.env)

nginxの設定

### NGINX #################################################

- NGINX_HOST_HTTP_PORT=80
+ NGINX_HOST_HTTP_PORT=8888
NGINX_HOST_HTTPS_PORT=443
NGINX_HOST_LOG_PATH=./logs/nginx/
NGINX_SITES_PATH=./nginx/sites/
NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
NGINX_PHP_UPSTREAM_PORT=9000
NGINX_SSL_PATH=./nginx/ssl/

mysqlを使用する場合の設定

### MYSQL #################################################

- MYSQL_VERSION=latest
+ MYSQL_VERSION=5.7
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

コンテナの作成

$ docker-compose up -d nginx
Recreating laradock_docker-in-docker_1 ... done
Recreating laradock_workspace_1        ... done
Recreating laradock_php-fpm_1          ... done
Recreating laradock_nginx_1            ... done

workspaceにログイン

$ docker-compose exec --user=laradock workspace /bin/bash
laradock@a651667e1cfc:/var/www$ 

composerを使って、インストール

laradock@a651667e1cfc:/var/www$ composer create-project laravel/laravel="5.8" myapp

laradockの.envファイルの編集

# Point to the path of your applications code on your host
- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../myapp

myappのデータベースを設定する(.envファイルを編集)

mysqlを使用する場合

変更前
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

変更後
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=root
DB_PASSWORD=root

sqliteを使用する場合

変更前
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

変更後
DB_CONNECTION=sqlite

ブラウザから確認する

以下にアクセスしてlaravelが表示されていれば、成功です。
お疲れ様でした。

localhost:8888

スクリーンショット 2020-03-10 10.12.32.png

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

【Laravel】カスタムディレクティブを定義し、タイトル補完処理をviewから呼び出す

環境

  • Laravel Framework 6.14.0

やりたいこと

以下Railsチュートリアルのように、タイトル補完用のメソッドを定義しviewから直接呼び出したい。
https://railstutorial.jp/chapters/rails_flavored_ruby?version=5.1#sec-custom_helpers

<title><%= full_title(yield(:title)) %></title>

事前調査

公式ドキュメントによると、カスタムディレクティブを定義すればいけそうです。
処理に変更があった場合、キャッシュの削除が必要みたいです。面倒くさいですね。

Blade拡張
https://readouble.com/laravel/6.x/ja/blade.html#extending-blade

Bladeではdirectiveメソッドを使い、自分のカスタムディレクティブを定義できます。Bladeコンパイラがそのカスタムディレクティブを見つけると、そのディレクティブに渡される引数をコールバックへの引数として呼び出します。

Note: Bladeディレクティブのロジックを更新した後に、Bladeビューのキャッシュを全部削除する必要があります。view:clear Artisanコマンドで、キャッシュされているBladeビューを削除できます。

実装

full_titleディレクティブを定義します。
引数が無い場合はサイト名をそのまま返し、引数がある場合は「hoge | サイト名」の形式で返します。
どうやらPHPタグを返さなきゃいけないようなのでそうします。
(参考: https://www.slideshare.net/ShoheiOkada/laravel-blade-107130164

app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Blade;

        Blade::directive('full_title', function ($title) {
            if ($title === "") {
                return "<?php echo 'サイト名'; ?>";
            }
            return "<?php echo $title.' | サイト名'; ?>";
        });

一応、ロジックを更新(追加)したのでビューのキャッシュを削除します。

$ php artisan view:clear

ビューからよしなに呼び出します。

@section('title')
    @full_title('タイトル')
@endsection

引数なしでも動きました。

@section('title')
    @full_title()
@endsection

動的な値を渡したいときはこんな感じ。

@section('title')
    @full_title($item->id)
@endsection
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む