- 投稿日:2021-01-01T22:37:43+09:00
Laravel6でTwitterログインを実装する
この記事ではLaravel6でTwitterログインを実装する手順を解説していきます。
メモ程度ですが、悪しからず。
Twitter Developerの登録
まずはTwitter Developerにてアプリを作成してください。
env.ファイルの作成
とりあえずTwitterAPIを使う時の初期設定。
TWITTER_CLIENT_ID= TWITTER_CLIENT_SECRET= TWITTER_CLIENT_ID_ACCESS_TOKEN = TWITTER_CLIENT_ID_ACCESS_TOKEN_SECRET = CALLBACK_URL=http://127.0.0.1:8000/login/twitter/callback空白の箇所は自分のやつを入れる。
config/service.phpに処理追加
今回は必要ないけど、とりあえず追加しておく。
envファイルから呼び出すわけにはいかないので、config経由するための記述。'twitter' => [ 'client_id' => env('TWITTER_CLIENT_ID'), 'client_secret' => env('TWITTER_CLIENT_SECRET'), 'access_token' => env('TWITTER_CLIENT_ID_ACCESS_TOKEN', ''), 'access_token_secret' => env('TWITTER_CLIENT_ID_ACCESS_TOKEN_SECRET', ''), 'redirect' => env('CALLBACK_URL') ],config/appに処理追加
下記を追加する。
サービスプロバイダへ登録して、コンテナに登録する。
あとエイリアスにも追加する。'providers' => [ ~省略~ Laravel\Socialite\SocialiteServiceProvider::class, //Socialiteを使う設定 ], 'aliases' => [ ~省略~ 'Socialite' => Laravel\Socialite\Facades\Socialite::class,//Socialiteを使う設定 ],Socialiteをインストール
composer require laravel/socialiteSocialiteについてはLaravel6ドキュメントを見るべし。
ルーティングの追加
Route::get('login/twitter', 'Auth\LoginController@redirectToTwitterProvider'); Route::get('login/twitter/callback', 'Auth\LoginController@handleTwitterProviderCallback');Loginコントローラーに処理を追加
とりあえずここまで。
use Socialite; ~省略~ public function redirectToTwitterProvider() { return Socialite::driver('twitter')->redirect(); } public function handleTwitterProviderCallback() { $user = Socialite::driver('Twitter')->user(); dd($user); }テーブルの作成
php artisan make:migration create_social_users --create social_users中身は次の通り。
Schema::create('social_users', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('user_id')->unsigned()->index(); $table->string('provider_user_id')->index(); $table->timestamps(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); });usersテーブルの拡張
php artisan make:migration add_social_columns_to_users --table users中身は次の通り。
public function up() { Schema::table('users', function (Blueprint $table) { $table->string('unique_id')->after('id'); $table->string('avatar')->after('password'); $table->text('bio')->after('avatar'); $table->string('email')->nullable()->change(); $table->string('password')->nullable()->change(); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->string('password')->change(); $table->string('email')->change(); $table->dropColumn('bio'); $table->dropColumn('avatar'); $table->dropColumn('unique_id'); }); }マイグレーションの実行
下記をインストール。
カラム属性を変更する時は必要。composer require doctrine/dbalもしエラーが出たら、バージョンを指定すればOK。
次にマイグレーション実行。
php artisan migrateモデルの作成
php artisan make:model SocialUser
リレーションも追加しておく。
まずはUserモデル。public function socialUsers() { return $this->hasMany(SocialUser::class); }下記も。
public function user() { return $this->belongsTo(User::class); }Loginコントローラーに処理追加。
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\AuthenticatesUsers; use App\User; use App\SocialUser; use Auth; use DB; use Socialite; class LoginController extends Controller { use AuthenticatesUsers; protected $redirectTo = RouteServiceProvider::HOME; public function __construct() { $this->middleware('guest')->except('logout'); } public function redirectToTwitterProvider() { return Socialite::driver('twitter')->redirect(); } public function handleTwitterProviderCallback() { $providerUser = Socialite::driver('Twitter')->user(); // 既に存在するユーザーかを確認 $socialUser = SocialUser::where('provider_user_id', $providerUser->id)->first(); if ($socialUser) { // 既存のユーザーはログインしてトップページへ Auth::login($socialUser->user, true); return redirect('/'); } // 新しいユーザーを作成 $user = new User(); $user->unique_id = $providerUser->nickname; $user->name = $providerUser->name; $user->avatar = $providerUser->user['profile_image_url_https']; $user->bio = $providerUser->user['description']; $socialUser = new SocialUser(); $socialUser->provider_user_id = $providerUser->id; DB::transaction(function () use ($user, $socialUser) { $user->save(); $user->socialUsers()->save($socialUser); }); Auth::login($user, true); return redirect('/'); } }参考
Laravel Socialiteを使ってTwitterアカウントでログイン機能
Laravel6.0+SocialiteでTwitterログインを実装する
- 投稿日:2021-01-01T16:37:30+09:00
Laravel8.x でルーティングが上手くいかない
エラー
dockerを用いてLaravelを触り始めて早速、ルーティングが上手くできない。
「controllerがないよ」と怒られる。
(Target class [TestController] does not exist.)web.phpRoute::get('/tests/test', 'TestController@index');TestController.phpnamespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { // public function index(){ return view('tests/test'); } }test.blade.php<h1>test.blade.phpファイルだよ!!</h1>解決
バージョンに合ったドキュメントを読んで解決
Laravel 8.x ルーティング
web.phpを編集web.phpuse Illuminate\Support\Facades\Route; // 以下追加 use App\Http\Controllers\TestController; // 以下修正 Route::get('/tests/test', [TestController::class, 'index']);解決まで
- エラーは9割タイプミス→何度確認してもエラー
- 6.xのドキュメント読んで初心に帰る→おそらく間違ってない
- 今回触ってるの8.xだった...ドキュメント読む→書き方違う!?
これから
「使うクラスをすべてuseで指定するのは面倒...」と思ったが、以前の記法も使える模様
もとの自動プレフィクス付きコントローラルーティングを使い続けたい場合は、RouteServiceProvider内の $namespaceプロパティの値を設定し、bootメソッド内のルート登録を$namespaceプロパティを使用するように変更します。
Laravel 8.x アップグレードガイド
私はとりあえず教科書通りに進めます。
バージョン意識していないのが致命的だった。
- 投稿日:2021-01-01T16:37:30+09:00
【Laravel】8.x でルーティングが上手くいかない
エラー
dockerを用いてLaravelを触り始めて早速、ルーティングが上手くできない。
「controllerがないよ」と怒られる。
(Target class [TestController] does not exist.)web.phpRoute::get('/tests/test', 'TestController@index');TestController.phpnamespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { // public function index(){ return view('tests/test'); } }test.blade.php<h1>test.blade.phpファイルだよ!!</h1>解決
バージョンに合ったドキュメントを読んで解決
Laravel 8.x ルーティング
web.phpを編集web.phpuse Illuminate\Support\Facades\Route; // 以下追加 use App\Http\Controllers\TestController; // 以下修正 Route::get('/tests/test', [TestController::class, 'index']);解決まで
- エラーは9割タイプミス→何度確認してもエラー
- 6.xのドキュメント読んで初心に帰る→おそらく間違ってない
- 今回触ってるの8.xだった...ドキュメント読む→書き方違う!?
これから
「使うクラスをすべてuseで指定するのは面倒...」と思ったが、以前の記法も使える模様
もとの自動プレフィクス付きコントローラルーティングを使い続けたい場合は、RouteServiceProvider内の $namespaceプロパティの値を設定し、bootメソッド内のルート登録を$namespaceプロパティを使用するように変更します。
Laravel 8.x アップグレードガイド
私はとりあえず教科書通りに進めます。
バージョン意識していないのが致命的だった。
- 投稿日:2021-01-01T15:22:08+09:00
Laravel + Inertia + Vueで簡単にAPI実装する
はじめに
2021年明けましておめでとうございます!
2020年は色々あり、コロナに翻弄された年でした。
この逆境に立ち向かい、社会に貢献されているすべての皆様に敬意を表させて頂きます。
恐らく2021年も、変わらずな環境下であると思われますが…皆様同様に私も負けじと頑張ります。さて…PHPerの皆様、Laravel8をガンガンお使いでしょうか?
Laravel8では、Laravel JetstreamというUIライブラリが用意されており、簡単にアプリケーションを作ることができるようになりましたね。
このJetstreamは、以前から似たようなものがありましたが、より簡単に作ることができるようになりました。
CSSをBootstarpからTailwind CSS に変更しており、より柔軟にCSSを使いUIを作ることができます。
さらに、実装においては、Livewireを用いてBladeを利用するか、Inertia.jsを用いてVueを利用するかを選択することができます。
Laravel8を触ってから、Inertiaを初めて知ったのですが、非常に理にかなった思想で便利だったので、そのInertiaについて書こうと思います。Inertiaとは?
Inertiaは、「Modern Monolith(モダン モノリス)」という事を謳っています。
マイクロサービスが広まる中、モノリシックは時代錯誤な気がしますよね。
フロントエンド + バックエンドの構成では、APIを設計し実装し、フロントではそれを呼び出して描写する…これを書くAPI毎に毎回書くわけで、よく考えればこれは冗長ではないでしょうか?
Inertiaはその「毎回書くこと」をライブラリで吸収して、実装を簡単にするためのライブラリです。
API設計は必要ありません、APIの呼び出しも必要ありません。
変数やルーティングは、バックエンドの実装をもとにフロントエンドの変数のアサインやルーティングを作成してくれます。
フロントエンド + バックエンドの構成でありながら、サーバーサイドテンプレートを扱うように(モノリシックであるかのように)、 実装が可能です。
なので、ModernでありながらMonolithなもの、というわけです。実装サンプル
routes/web.php
<?php use Illuminate\Support\Facades\Route; // 通常のroutingです。 Route::resource('/user','App\Http\Controllers\UserController');UserController.php
<?php namespace App\Http\Controllers; use App\Models\User; use Inertia\Inertia; class UserController extends Controller { public function index() { // Inertia::renderを呼び出す事で、どのコンポーネントに対して // どの変数をセットするかをここできめ、vueにも反映させることができます。 return Inertia::render( 'User/Index', ['users' => User::all()] ); } // show // create // store // edit // update // destroy }resources/js/Pages/User/index.vue
<template> <layout title="Users"> <div v-for="user in users" :key="user.id"> <inertia-link :href="`/users/${user.id}`"> {{ user.name }} </inertia-link> <div>{{ user.email }}</div> </div> </layout> </template> <script> import Layout from '../Shared/Layout' export default { components: { Layout, }, /* Controllerで指定した変数をpropsで受け取るため、同じ変数名を指定します。 IFはInertiaにおまかせです。 */ props: { users: Array, }, } </script>vue側でのルーティングは、Vue Routerを使わずに、Inertia側で受け持ちます。
その為、this.$route.params等は使えず、laravel側からパラメータは受け渡すことになります。
* vueを触っていると使えるのが当たり前だと思っており、使えず若干ハマりました…。まとめ
実装サンプルのように、APIのレスポンス時も、フロントで受け取る側もいつもの記述は必要がないことがわかります。
実はコンポーネントの設計もある程度もInertiaの設計に引っ張られる為、構成が整っていいかもしれません。
デメリットとしては、ブラックボックス化してしまう事くらいでしょうか。
ただフレームワーク自体もある程度ブラックボックス化しているわけで、それと同じようなものだと考えれば、気にならないくらいのレベルです。
メリットとしては、「バックエンドテンプレートと似たような感じでVueを使える」「APIやりとりのコードが極端に減る」等です。是非、モダンモノリスなライブラリ「Inertia」を使って見てください。
それでは今年も頑張りましょう!
- 投稿日:2021-01-01T13:13:23+09:00
【Laravel】既定Userのmigrationにてエラーが出た場合にチェックする点
■前提
・Laravelでのプロジェクト作成が2回目以降であること
・databaseを作成済であること
・使っているdatabaseはmysqlであること■概要
プロジェクト作成時に既定にあるUserテーブルに対してmigrationをかけた際に
エラーが2点発生した。
①既にuserテーブルが存在している(users already exists〜辺り)
②user_emailの設定にエラーがある(key was too long~の辺り)
■対策
上記エラーに対しての対策は以下の通り。
①.envにてDB_DATABASEを今回作成したbatabase名に修正する
※今回はtodoというデータベースを作成しました。
②database.php内のmysqlにて「charaset」/「collation」をutf8mb4からutf8に変更する。
- 投稿日:2021-01-01T12:06:45+09:00
laravel MySQL tinyInteger型のカラムはchangeできない
目的
- マイグレーションファイルを用いてTinyInt型のカラム情報を変更しようとしたけどエラーが出たのでまとめる
情報
- 今回の事例はすでに作成されているTinyInt型カラムのコメントを変更しようとした。
エラーまでの経緯
マイグレーションファイルのup側に下記のように記載してカラムのコメントを変更しようとした。
$table->tinyInteger('カラム名')->comment('変更後のコメント')->change();下記コマンドを実行してマイグレーションを実行した。
$ php artisan migrateエラー
下記のエラーが出力された。
Unknown column type "tinyinteger" requested. Any Doctrine type that you use has to be registered with \Doctrine\DBAL\Types\Type::addType(). You can get a list of all the known types with \Doctrine\DBAL\Types\Type::getTypesMap(). If this error occurs during database introspection then you might have forgotten to register all database types for a Doctrine Type. Use AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type name is empty you might have a problem with the cache or forgot some mapping information.原因
公式ドキュメントにこんな記載を発見した。https://readouble.com/laravel/6.x/ja/migrations.html
Note: 以降のカラムタイプのみ変更可能です:bigInteger、binary、boolean、date、dateTime、dateTimeTz、decimal、integer、json、longText、mediumText、smallInteger、string、text、time、unsignedBigInteger、unsignedInteger and unsignedSmallIntegerこのドキュメントによるとTinyIntegerはchangeメソッドを用いた変更をする事ができない。
解決までの経緯
- 下記の方法を用いてTinyIntegerのカラムの内容を修正した。
- 投稿日:2021-01-01T03:31:15+09:00
laravel-filemanagerをインストールするときにつまづいたこと
CKEditorを導入
<textarea id="ckeditor" name="pageBody"></textarea> {{-- CKEditor --}} <script src="//cdn.ckeditor.com/4.15.0/full/ckeditor.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src="js/ckeditor.js"></script>$(function () { // エディタへの設定を適用する CKEDITOR.replace("ckeditor", { uiColor: "#EEEEEE", height: 400, // スペルチェック機能OFF scayt_autoStartup: false, // Enterを押した際に改行タグを挿入 enterMode: CKEDITOR.ENTER_BR, // Shift+Enterを押した際に段落タグを挿入 shiftEnterMode: CKEDITOR.ENTER_P, // idやclassを指定可能にする allowedContent: true, // ファイルマネージャー関連 filebrowserImageBrowseUrl: "/laravel-filemanager?type=Images", filebrowserImageUploadUrl: "/laravel-filemanager/upload?type=Images&_token=", filebrowserBrowseUrl: "/laravel-filemanager?type=Files", filebrowserUploadUrl: "/laravel-filemanager/upload?type=Files&_token=", // preコード挿入時 format_pre: { element: "pre", attributes: { class: "code", }, }, // タグのパンくずリストを削除 removePlugins: "elementspath", // webからコピペした際でもプレーンテキストを貼り付けるようにする forcePasteAsPlainText: true, // 自動で空白を挿入しないようにする fillEmptyBlocks: false, // タブの入力を無効にする tabSpaces: 0, }); $(function () { // エディタへの設定を適用する CKEDITOR.replace("ckeditor", { uiColor: "#EEEEEE", height: 400, // スペルチェック機能OFF scayt_autoStartup: false, // Enterを押した際に改行タグを挿入 enterMode: CKEDITOR.ENTER_BR, // Shift+Enterを押した際に段落タグを挿入 shiftEnterMode: CKEDITOR.ENTER_P, // idやclassを指定可能にする allowedContent: true, // ファイルマネージャー関連 filebrowserImageBrowseUrl: "/laravel-filemanager?type=Images", filebrowserImageUploadUrl: "/laravel-filemanager/upload?type=Images&_token=", filebrowserBrowseUrl: "/laravel-filemanager?type=Files", filebrowserUploadUrl: "/laravel-filemanager/upload?type=Files&_token=", // preコード挿入時 format_pre: { element: "pre", attributes: { class: "code", }, }, // タグのパンくずリストを削除 removePlugins: "elementspath", // webからコピペした際でもプレーンテキストを貼り付けるようにする forcePasteAsPlainText: true, // 自動で空白を挿入しないようにする fillEmptyBlocks: false, // タブの入力を無効にする tabSpaces: 0, }); }); // 保存アイコンの無効化 CKEDITOR.plugins.registered["save"] = { init: function (editor) { var command = editor.addCommand("save", { modes: { wysiwyg: 1, source: 1 }, exec: function (editor) { if (My.Own.CheckDirty()) My.Own.Save(); else alert("No changes."); }, }); editor.ui.addButton("Save", { label: "", command: "save" }); }, }; });CKEditorに画像のアップロード機能を導入する
インストールしようとするとエラーが出力された
composer require unisharp/laravel-filemanager Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for unisharp/laravel-filemanager ^2.2 -> satisfiable by unisharp/laravel-filemanager[v2.2.0]. - unisharp/laravel-filemanager v2.2.0 requires ext-exif * -> the requested PHP extension exif is missing from your system.
- PHPで画像からEXIF情報を取得するためにEXIFモジュールが必要らしい
DockerFileに以下を追加し再度ビルドする
RUN docker-php-ext-install exif RUN docker-php-ext-configure exif \ --enable-exifもう一度インストールすると無事に成功した!
composer require unisharp/laravel-filemanager
- 投稿日:2021-01-01T03:31:15+09:00
Laravel-filemanagerをインストールするときにつまづいたこと
CKEditorを導入
<textarea id="ckeditor" name="pageBody"></textarea> {{-- CKEditor --}} <script src="//cdn.ckeditor.com/4.15.0/full/ckeditor.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src="js/ckeditor.js"></script>$(function () { // エディタへの設定を適用する CKEDITOR.replace("ckeditor", { uiColor: "#EEEEEE", height: 400, // スペルチェック機能OFF scayt_autoStartup: false, // Enterを押した際に改行タグを挿入 enterMode: CKEDITOR.ENTER_BR, // Shift+Enterを押した際に段落タグを挿入 shiftEnterMode: CKEDITOR.ENTER_P, // idやclassを指定可能にする allowedContent: true, // ファイルマネージャー関連 filebrowserImageBrowseUrl: "/laravel-filemanager?type=Images", filebrowserImageUploadUrl: "/laravel-filemanager/upload?type=Images&_token=", filebrowserBrowseUrl: "/laravel-filemanager?type=Files", filebrowserUploadUrl: "/laravel-filemanager/upload?type=Files&_token=", // preコード挿入時 format_pre: { element: "pre", attributes: { class: "code", }, }, // タグのパンくずリストを削除 removePlugins: "elementspath", // webからコピペした際でもプレーンテキストを貼り付けるようにする forcePasteAsPlainText: true, // 自動で空白を挿入しないようにする fillEmptyBlocks: false, // タブの入力を無効にする tabSpaces: 0, }); };CKEditorに画像のアップロード機能を導入する
インストールしようとするとエラーが出力された
composer require unisharp/laravel-filemanager Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for unisharp/laravel-filemanager ^2.2 -> satisfiable by unisharp/laravel-filemanager[v2.2.0]. - unisharp/laravel-filemanager v2.2.0 requires ext-exif * -> the requested PHP extension exif is missing from your system.
- PHPで画像からEXIF情報を取得するためにEXIFモジュールが必要らしい
DockerFileに以下を追加し再度ビルドする
RUN docker-php-ext-install exif RUN docker-php-ext-configure exif \ --enable-exifもう一度インストールすると無事に成功した!
composer require unisharp/laravel-filemanager
- 投稿日:2021-01-01T00:37:35+09:00
【Laravel】結局どう違うの?Eloquent, DBクラス, クエリビルダ 前編
困りごと
PHP歴3ヶ月、Laravel歴1ヶ月の初学者です。LaravelのDBの操作方法は
Eloquent ORM・DBクラス・クエリビルダ
に分類されます。表示されればなんでもOKというからレベルを一段階上げていきたい初学者がこれらの違いについてまとめました。前編:各記述法の違いについて。(今回)
後編:どのように記述法を選択していくのか(次回)開発環境
PHP 7.2.34 / Laravel 6.20.5
記述法を比較
①DBファザードは
Illuminate\Support\Facades\DB
クラスによる記述法。
②Eloquent ORMはIlluminate\Database\Eloquent\Model
クラスを継承する記述法。
それぞれ見ていきます。①DBクラスの記述 (DBファザード)
DBクラスによる記述のため
Illuminate\Support\Facades\DB
をuseする。Controller.phpuse Illuminate\Support\Facades\DB;⭐️ DBファザード パターン①
DB::SQL値(SQL文、パラメータ配列)
のように引数に直接SQL文を用いて記述する。
SQL値にはinsertやupdateなどの基本的なSQLのメソッドは揃っている。記述例
controller.phppublic function query(Request $request) { //SELECT文 $items = DB::select('select * form users where id = ?',[1]); //INSERT文 DB::insert('insert into users (id, name) values (?,?)',[1,'たかし']); //UPDATE文 DB::update('update users set age = 100 where id = ?, [2]'); //DELETE文 DB::delete('delete from users'); }Laravel公式リファレンス(DBファザード)
https://readouble.com/laravel/5.dev/ja/database.html⭐️ DBファザード パターン②
SQL文を生成するためのメソッドをメソッドチェーンで記述することによりデータベースを操作する。
DB::table('テーブル名')->メソッド()
のように記述する。記述例
・usersテーブルから、フィールド名(id)とパラメータ(requestされたid)が同じレコードを取得Controller.phppublic function select(Request $request) { $items = DB::table('users')->where('id',$request->id)->first(); return view('index',['items' => $items]); } //DB::table('テーブル名')->where('フィールド名',パラメータ)->first()・usersテーブルの内容をリクエストされた値へ変更(フィールド名とパラメータが同じレコードに対しての処理)
Controller.phppublic function update(request $request) { $param = [ 'id' => $request->id, 'name' => $request->name, 'comment' => $request->commment, ]; DB::table('users')->where('id',$request->id)->update($param); } //DB::table('テーブル名')->where('フィール名',パラメータ)->update(パラメータ);Laravel公式リファレンス(クエリビルダ)
https://readouble.com/laravel/5.dev/ja/queries.htmlまた、クエリの中で直接SQLを使用したい場合は
DB::raw
メソッドを使用する。Countroller.php$users = DB::table('users') ->select(DB::raw('count(*) as count, status')) ->where('status','<>',1) ->groupBy('status') ->get();参考:https://readouble.com/laravel/5.7/ja/queries.html
余談ですが、
DBファサードでの insert もしくは update では created_at や updated_at は更新されません。
Eloquent を利用したときのみです。とのことです。私はこれが原因で値が保存されずにハマったことがあります。
参考:https://laraweb.net/knowledge/2347/②Modelクラスの記述 (Eloquent ORM)
※Eloquent ORMの基本の考え方 例:usersテーブル
①1つのクラスがDBの1テーブルに対応
$users = User::all()
②クラスの1インスタンス(オブジェクト)は、DBの1レコードに対応$user = new User()
③クラスの属性は、テーブルの各カラムに対応{{$user->comment}}
⭐️ Eloquent ORM
モデルクラスによる記述のため
App\Model名
をuseする。Controller.phpuse App\Models\User; //Modelsディレクトリの配下にUserモデルを生成。記述例
・usersテーブルの全ての値を、Collection型として取得してview(index)へ渡すController.phppublic function select(Request $request) { $item = User::all(); return view('index',['items' => $items]); }・usersテーブル内でリクエストされたnameフィールドと同じ値のレコードを、Collection型として取得しview(index)へ渡す。
Controller.phppublic function search($Request $request) { $item = User::where($request->name)->get(); //クラス名::where(検索する値')->取得方法 return view('index',['items' => $items]); }参考:
https://blog.ytake.jp.net/entry/2015/12/16/011812
https://qiita.com/gone0021/items/f1e8223c94dbaab22fca最後に
書き方の違いについてざっくりまとめました。書き方が多くあるが故に、僕のような初学者は選択に困ってしまう部分だと思います。理解がより深まるようにメリデメについてまとめたかったのですが、長くなってきたので後編に書きます。
この内容は奥が深いようなので、実務経験を元にさらにブラッシュアップしていきます。
(本内容に誤りがありましたらご指摘いただけると幸いです。)