- 投稿日:2020-02-21T23:53:38+09:00
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/phpphpのバージョンアップが済んだら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これで初期設定完了。
なお執筆者はド素人なので皆さんの力を借りつつ何とか設定することが出来ました。
ありがとうございました。
- 投稿日:2020-02-21T19:14:42+09:00
【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.phpRoute::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がダウンロードされます。参考記事
- 投稿日:2020-02-21T19:05:32+09:00
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
他の言語ファイルをお持ちの方は、是非、プルリク送ってください。
- 投稿日:2020-02-21T19:04:39+09:00
Laravel requestのバリデーションをControllerで受け取りたいとき
どうしてもコントローラ側でバリデーションエラーを制御したかったときに実装した内容を備忘録として残します。
バージョン
Laravel Framework 5.5.45
PHP 7.2.25やったこと
failedValidation
を override して、Handlerに飛ばないようにします。
getValidator
を実装して、インスタンスを返せるようにします。GetIndexRequest.phpuse 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.phppublic function find(GetIndexRequest $request) { $validator = $request->getValidator(); if ($validator->fails()) { // エラーが表示される echo $validator->getMessageBag()->first(); } }
- 投稿日:2020-02-21T18:48:46+09:00
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しても良いけどこういう書き方もある。
- 投稿日:2020-02-21T17:16:09+09:00
速攻でLaravelのインストール Mac編
初投稿ということで、私が学習しているPHPのフレームワーク「laravel」のインストール手順をまとめてみます。
ちなみにこれから書く記事は、
「とりあえず上からコピペしていけば動くぜ!」
という端折りまくった内容です。
[環境]
mac
php 7.2.26
Homebrew 2.2.4
Composer 1.9.2
[コマンドをどこで実行するのか]
ターミナルも知らずにいきなりlaravelを勉強している人がいるのか?、って話ですが一応書いておきます。
MacにはデフォルトでターミナルというUNIX端末エミュレータが付属しています。
↑こんなの。
Launchpadで「ターミナル」と検索すれば出てくるので探して起動。
これから書くコマンドは全てそこで実行する。
[Homebrewのインストール]
既にインストールしている場合は必要ないです。
brew -v
と打ってHomebrewのバージョン情報が出てくるようなら既にインストールされてます。
出てこない人は以下のコマンドでインストール。
/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
って感じで、アスキーアートとバージョン情報、それと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の初期画面を表示することができます。以下にアクセス。↓
すると、以下のようなlaravelの初期画面が出てきます。
[終わりに]
laravel楽しいです。
次回はデータベース周りの設定をやろうかと。
mampでやるとわかりやすそうだなー。その前にvps環境の構築もやらねば……。
- 投稿日:2020-02-21T07:08:39+09:00
Laravel バリデーション
ファームなどを使って、データを送信するとき、正しい形式で書かれているか検証する仕組みがバリデーション。
なぜバリデーション必要か?
ユーザーが意図しないデータを入力してしまったり、そもそも正しく入力をしようとしていない人がデータを送信してくることもある。ユーザーからの入力を、必ず正しい形式で入力されているかチェックして、間違った所があれば再入力をもとめるようにすることが必要。
これをチェックしてくれる機能が『バリデーション』。
ユーザー入力画面
name:
mail:
age:↓
フォーム送信
↓アクション
バリデーション→→エラー→ユーザー入力画面に戻す入力データに問題なければ、
↓
処理を実行どうやってやるか?
コントローラーのvalidateメソッド使う。validateはアクションメソッドから呼び出す
$this-> validate($request,[検証設定時の配列]);第一引数にはリクエスト。
第二引数には検証する設定情報を配列にまとめたものを用意。