20200221のlaravelに関する記事は7件です。

AWS Cloud9でLaravelを構築する際のTips

Cloud9でLaravel開発環境を構築する際にいろいろハマったのでメモしておきます。

・やりたかった事
すでにgithubに上がっているlaravelプロジェクトをcloud9で動作させたい


・躓いたこと
git clone https:\hogehogeしても、動かない

↓↓↓ 以下、laravelトップページが表示されるまでの足跡 ↓↓↓

cloud9の初期設定はバージョンが古いです。
アップデートしましょう。

参考:https://qiita.com/kidatti/items/2d6a4a24f89dc71eb66e

ちなみにこの記事では7.2をインストールしていますが、現在の最新verは7.3ですね。
まとめると以下のような形でしょうか。

sudo yum -y update
sudo yum -y install php73 php73-mbstring php73-pdo
sudo unlink /usr/bin/php
sudo ln -s /etc/alternatives/php7 /usr/bin/php

phpのバージョンアップが済んだらcomposer installかcomposer updateを走らせると思います。
僕の場合はここでphpのバージョンが古いと以下のように怒られました。

(C9 ゚Д゚) ふざけんじゃねぇバカヤロウ!!
This package requires php ^7.2 but your PHP version (7.1; Package overridden via config.platform (actual: 7.1.33)) does not satisfy that requirement

さっき最新のバージョン入れたのに、php-vしても7.1しか返ってきません。
同じような症状にあった場合は以下を実行してみてください。

sudo yum remove php71*

そうすると7.3なり、7.2なりが顔を出してくると思います。

ちなみにcomposer.jsonの設定が古い可能性もあるので、念のため以下のように変更しておきました。

composer config platform.php 7.1.13

その後、満を期してcomposer updateを実行。
Laravelプロジェクトをgithubにプルした際、Vendorファイルが無くなる現象があります(僕だけ?)
Venderファイル上がってるよって人はこのcomposer updateは不要かも。

あとenvファイルもなかったので、それも復活させます。
参考:https://www.kabanoki.net/2524/

cp .env.example .env
php artisan key:generate
php artisan config:clear

これで初期設定完了。
なお執筆者はド素人なので皆さんの力を借りつつ何とか設定することが出来ました。
ありがとうございました。

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

【Laravel】DBのレコードを元に生成したcsvのダウンロードを行うためのController

やりたいこと

Controller内でデータを取得し、csvのレスポンスを生成して返すControllerを作成します。
どこかのストレージにすでに存在するcsvをレスポンスとして返すものとは少々異なります。

実装

モデル

扱うデータ用オブジェクトは下記のものします。

app\Models\Person.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Person extends Model
{
    protected $table = 'persons';

    protected $fillable = [
        'name',
        'age'
    ];
}

ルーティング

リクエストをControllerにつなぎこみます。
ここは普通にGETリクエストを行う場合と同じやり方。

routes/web.php
Route::get('/persons/download/csv', 'PersonController@download_csv');

コントローラー

ここでレスポンスでcsvを返す処理を書きます。

app\Http\Controllers\PersonController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Schema;
use App\Models\Person;

class PersonController extends Controller
{
    public function download_csv(Request $request)
    {
        $persons = Person::all();
        $persons = $persons->toArray();

        // 全カラム名を配列で取得
        $header = Schema::getColumnListing((new Person)->getTable());

        // レスポンスストリームにcsv用のデータを書き込み
        $stream = fopen('php://temp', 'r+b');
        fputcsv($stream, $header);
        foreach ($persons as $row) {
            fputcsv($stream, $row);
        }
        rewind($stream);
        $csv = str_replace(PHP_EOL, "\r\n", stream_get_contents($stream));
        $csv = mb_convert_encoding($csv, 'SJIS-win', 'UTF-8');
        $headers = array(
            'Content-Type'        => 'text/csv',
            'Content-Disposition' => "attachment; filename=persons.csv", // ファイル名
        );

        return Response::make($csv, 200, $headers);
    }

これで、 /persons/download/csv にアクセスすれば、csvがダウンロードされます。

参考記事

横長のデータでも Laravel の CSV 出力を行うためには

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

Laravel の言語ファイルを一発で配置する ライブラリ作った

以下のファイルだけだと、リマインダーメールなどは日本語化されないので、ja.jsonも配置するコマンドを作成しました。

  • Resources/lang/ja/auth.php
  • Resources/lang/ja/pagination.php
  • Resources/lang/ja/passwords.php
  • Resources/lang/ja/validation.php

GitHub

https://github.com/ShibuyaKosuke/laravel-language-setting

laravel-language-setting

インストール

composer require shibuyakosuke/laravel-language-setting --dev

コマンド

config/app.php 先にプロジェクトの言語を設定しておきます。

'locale' => 'ja',

使用方法

言語ファイルのお配置

php artisan lang:setting ja

以下のようなファイルが配置されます。

  • Resources/lang/ja.json
  • Resources/lang/ja/auth.php
  • Resources/lang/ja/pagination.php
  • Resources/lang/ja/passwords.php
  • Resources/lang/ja/validation.php

対応している言語のリストを表示する

php artisan lang:list

現在対応している言語

language locale
Japanese ja

Contribution

他の言語ファイルをお持ちの方は、是非、プルリク送ってください。

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

Laravel requestのバリデーションをControllerで受け取りたいとき

どうしてもコントローラ側でバリデーションエラーを制御したかったときに実装した内容を備忘録として残します。

バージョン

Laravel Framework 5.5.45
PHP 7.2.25

やったこと

failedValidation を override して、Handlerに飛ばないようにします。
getValidatorを実装して、インスタンスを返せるようにします。

GetIndexRequest.php
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;

class GetIndexRequest extends FormRequest
{
  /**
   * リクエストに適用するバリデーションルールを取得
   *
   * @return array
   */
  public function rules()
  {
      return [
          'title' => 'required|max:255',
          'body' => 'required',
      ];
  }

    /**
     * 定義済みバリデーションルールのエラーメッセージ取得
     *
     * @return array
     */
    public function messages()
    {
        return [
            'title.required' => 'A title is required',
            'body.required'  => 'A message is required',
        ];
    }

    /**
     * @param Validator $validator
     */
    protected function failedValidation(Validator $validator)
    {
    }

    /**
     * @return  Validator  $validator
     */
    public function getValidator()
    {
        return $this->getValidatorInstance();
    }
}

Controller側で受け取ってみます。

HogeController.php
public function find(GetIndexRequest $request)
{
    $validator = $request->getValidator();
    if ($validator->fails()) {
       // エラーが表示される
        echo $validator->getMessageBag()->first();
    }
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelでjoinせずにサブクエリを使ってデータを絞る

データ

high_schoolsテーブル
各学校に所属する生徒の情報が入っている

id name student_id
1 A高校 3
2 B高校 1
3 A高校 2

studentsテーブル
生徒が志望する大学の情報が入っている

id student_name university_id
1 鈴木一郎 10
2 佐藤二朗 15
3 田中三郎 23

やったこと

high_schoolsテーブルで「A高校」に所属する生徒のIDを取得し、その生徒たちが志望する大学の一覧を取得する

コード

school_name = ‘A高校’;
Student::select(‘university_id’)
    ->whereIn(’students.id’, function ($sub) use ($school_name) {
        return $sub->select(‘high_schools.student_id')
            ->from('high_schools')
            ->where(‘name’, $school_name);
    });

付記

二つのテーブルをjoinしても良いけどこういう書き方もある。

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

速攻でLaravelのインストール Mac編

スクリーンショット 2.png

初投稿ということで、私が学習しているPHPのフレームワーク「laravel」のインストール手順をまとめてみます。

ちなみにこれから書く記事は、

「とりあえず上からコピペしていけば動くぜ!」
 

という端折りまくった内容です。


[環境]

mac
php 7.2.26
Homebrew 2.2.4
Composer 1.9.2


 [コマンドをどこで実行するのか]

ターミナルも知らずにいきなりlaravelを勉強している人がいるのか?、って話ですが一応書いておきます。

MacにはデフォルトでターミナルというUNIX端末エミュレータが付属しています。
スクリーンショット 2020-02-21 16.45.37.png

↑こんなの。

Launchpadで「ターミナル」と検索すれば出てくるので探して起動。

これから書くコマンドは全てそこで実行する。

 [Homebrewのインストール]

既にインストールしている場合は必要ないです。

brew -v

と打ってHomebrewのバージョン情報が出てくるようなら既にインストールされてます。
スクリーンショット 2020-02-21 5.03.16.png

出てこない人は以下のコマンドでインストール。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

コマンドの終了後に

brew -v

をもう一回打つと、今度はちゃんとバージョン情報が表示されます。

表示されたら次はcomposerのインストール。

 [composerのインストール]

composerについてはこちらの記事を読むと吉。

https://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94

まずは、composerが既にインストールされているか以下のコマンドで確認する。

composer -v

すると、既にインストール済みの人は
スクリーンショット 2020-02-21 5.17.22.png

って感じで、アスキーアートとバージョン情報、それとcomposerのコマンドのリストが表示される。

出てこないぜ、って人は以下のコマンドでcomposerをインストール。

brew install composer

インストールが終わったら、また

composer -v

で、アスキーアートとかがちゃんと表示されるか確認。

無事に進めたら、次は遂にcomposerを通じてlaravelをインストールしていく。

 [Laravelのインストール]

※バージョンを指定してインストールしたい人は、先にこの小見出しの最後の(注※)を呼んでください。

先にインストールしたcomposerを経由して、以下のコマンドでlaravelのプロジェクト作成(インストール)します。

composer create-project --prefer-dist laravel/laravel プロジェクト名

赤字の部分は自分で好きな名前をつけてやってください。
 
自分で名前つけるのさえ怖い人は以下のコマンドで一緒にやりましょう。

composer create-project --prefer-dist laravel/laravel my_laravel

これで、laravelがインストールされました。
 
注※)バージョンを指定したい場合。

例として、laravel5.5をインストール。

composer create-project --prefer-dist laravel/laravel my_laravel

赤字の部分を以下のように

laravel/laravel=5.5

と変更するとそのバージョンがインストールされます。
 

[インストールしたlaravelを動かしてみる]

プロジェクトに移動します。

プロジェクト名を自分でつけた人は

cd プロジェクト名

自分でやるのが怖かった人は、

cd my_laravel

 
プロジェクトに移動したら、

その状態で

php artisan serve

と打ち込む。
このコマンドでlaravelのビルトインサーバーが立ち上がり、念願のlaravelの初期画面を表示することができます。

以下にアクセス。↓

http://localhost:8000/

すると、以下のようなlaravelの初期画面が出てきます。

スクリーンショット 2.png
お疲れ様でした!

[終わりに]

laravel楽しいです。

次回はデータベース周りの設定をやろうかと。
mampでやるとわかりやすそうだなー。

その前にvps環境の構築もやらねば……。
 

 

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

Laravel バリデーション

ファームなどを使って、データを送信するとき、正しい形式で書かれているか検証する仕組みがバリデーション。

なぜバリデーション必要か?
ユーザーが意図しないデータを入力してしまったり、そもそも正しく入力をしようとしていない人がデータを送信してくることもある。

ユーザーからの入力を、必ず正しい形式で入力されているかチェックして、間違った所があれば再入力をもとめるようにすることが必要。

これをチェックしてくれる機能が『バリデーション』。

ユーザー入力画面
name:
mail:
age:


フォーム送信

アクション     
バリデーション→→エラー→ユーザー入力画面に戻す

入力データに問題なければ、

処理を実行

どうやってやるか?
コントローラーのvalidateメソッド使う。

validateはアクションメソッドから呼び出す
$this-> validate($request,[検証設定時の配列]);

第一引数にはリクエスト。
第二引数には検証する設定情報を配列にまとめたものを用意。

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