- 投稿日:2020-07-15T23:13:42+09:00
Laravel 6.x→7.xバージョンアップ
Laravel 6.x→7.xバージョンアップ方法
概要
Laravelのバージョンを6.x→7.xにアップする方法をご紹介します。
基本的には公式ドキュメント様の言う通りです。
なお、今回ご紹介するのはバージョンアップ対応で必要な最低限の項目になります。
詳細は 公式ドキュメント を参照ください。手順
1. 現在のバージョン確認
% php artisan --version Laravel Framework 6.18.25
2. composer.jsonの編集
composer.jsonを直接触るのは嫌なのですが、、、公式がそう記載しているので仕方ないですね。
前提
- Symfony 5以上
- PHP 7.2.5以上
編集要点
- laravel/framework: "^7.0"
- nunomaduro/collision: "^4.1"
- phpunit/phpunit: "^8.5"
- laravel/tinker: "^2.0"
- facade/ignition: "^2.0"
Before
composer.json{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": [ "framework", "laravel" ], "license": "MIT", "require": { "php": "^7.2", "ext-fileinfo": "*", "barryvdh/laravel-dompdf": "^0.8.5", "bensampo/laravel-enum": "^1.28", "fideloper/proxy": "^4.0", "laravel/framework": "^6.2", "laravel/tinker": "^1.0", "laravel/ui": "^1.2", "nesbot/carbon": "^2.27" }, "require-dev": { "barryvdh/laravel-ide-helper": "^2.6", "facade/ignition": "^1.4", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0", "phpunit/phpunit": "^8.0" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true }, "extra": { "laravel": { "dont-discover": [] } }, "autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "minimum-stability": "dev", "prefer-stable": true, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" ] } }After
composer.json{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": [ "framework", "laravel" ], "license": "MIT", "require": { "php": "^7.2", "ext-fileinfo": "*", "barryvdh/laravel-dompdf": "^0.8.5", "bensampo/laravel-enum": "^1.28", "fideloper/proxy": "^4.0", "laravel/framework": "^7.0", "laravel/tinker": "^2.0", "laravel/ui": "^1.2", "nesbot/carbon": "^2.27" }, "require-dev": { "barryvdh/laravel-ide-helper": "^2.6", "facade/ignition": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^4.1", "phpunit/phpunit": "^8.5" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true }, "extra": { "laravel": { "dont-discover": [] } }, "autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "minimum-stability": "dev", "prefer-stable": true, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" ] } }3. App\Exceptions\Handlerの編集
app/Exceptions/Handler.php
を編集します。編集要点
Exception
からThrowable
に変更します。
注: ちゃんとparentを継承するようにしないと後々エラーになってしまいます。
詳しくはAfter
を参照してください。use Throwable; public function report(Throwable $exception); public function shouldReport(Throwable $exception); public function render($request, Throwable $exception); public function renderForConsole($output, Throwable $exception);Before
<?php namespace App\Exceptions; use Exception; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * A list of the inputs that are never flashed for validation exceptions. * * @var array */ protected $dontFlash = [ 'password', 'password_confirmation', ]; /** * Report or log an exception. * * @param \Exception $exception * @return void */ public function report(Exception $exception) { parent::report($exception); } /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $exception * @return \Illuminate\Http\Response */ public function render($request, Exception $exception) { return parent::render($request, $exception); } }After
<?php namespace App\Exceptions; use Throwable; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * A list of the inputs that are never flashed for validation exceptions. * * @var array */ protected $dontFlash = [ 'password', 'password_confirmation', ]; /** * Report or log an exception. * * @param Throwable $exception * @return void */ public function report(Throwable $exception) { parent::report($exception); } public function shouldReport(Throwable $exception) { parent::shouldntReport($exception); } /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param Throwable $exception * @return \Illuminate\Http\Response */ public function render($request, Throwable $exception) { return parent::render($request, $exception); } public function renderForConsole($output, Throwable $exception) { parent::renderForConsole($output, $exception); } }4. sessionファイル編集
app/config/session.php
を編集します。Before
'secure' => env('SESSION_SECURE_COOKIE', false),After
'secure' => env('SESSION_SECURE_COOKIE', null),5. Composer update
% composer update6. Laravel/uiの設定
composerの
require
セクションにて"2.0"以上が必要なようです。% composer require laravel/ui "^2.0"
7. 確認
% php artisan --version Laravel Framework 7.19.1
参考
- 投稿日:2020-07-15T23:10:15+09:00
【Laravel】諸々復習
書籍のアウトプットとして
ルーティング
ルート情報の基本(GET)
Route::get(アドレス,関数等)第2引数はクロージャ。
function (){ return 値; }returnで返される値が表示内容。
view
view(テンプレ名)テンプレファイルをトードしてレンダリングして返す。
テンプレはresources/views
フォルダの中に作るコントローラの利用
シングルアクションコントローラの利用
1つのコントローラに1つのアクションだけしか用意しないという設計のこと
要するに
コントローラ:アクション=1:1
シングルアクションメソッドの基本形class クラス名 extends Controller { public function __invoke() { //アクション処理 } }これ以外にアクションメソッドは用意しない。
ルート情報の記述も変わってくる。ルート情報Router::get('アドレス','コントローラ名');invokeはPHPの基本機能
__invokeはPHPのマジックメソッド
__invokeはそのクラスのインスタンスを関数的に実行する。
インスタンスに()をつけて関数として呼び出せる。
したがってコントローラに限らず一般的なクラスも「インスタンスをそのまま関数として実行させたい」という場合に利用される。リクエストとレスポンス
ResponseとRequestをアクションメソッドで利用するにはこうする
public function index(Request $request,Response $response){...引数に追加するだけで使えるようになる。
なぜ追加するだけで使えるのか
理解のためには「サービス」と「サービスコンテナ」の機能を知る必要がある。
アクションメソッドに引数を追加することで、サービスコンテナによって対応するクラスのインスタンスがその引数に渡されていた。
この機能はメソッドインジェクションというPHPテンプレートの利用
ビューについて
テンプレはLaravelのビューを担当する。
ルート情報でテンプレを表示する
viewメソッド
view('フォルダ名.テンプレ名')テンプレはviewsフォルダから検索される。
例えば、view('hello.index')
なら
views/hello
フォルダの
index.php
ファイルが読み込まれる。単に
view('hello')
だけならhello
という名前のファイルを探してしまう。サービスとビューコンポーザ
ビューコンポーザ
コントローラとは別にビジネスロジックを使って必要な情報などを処理しビューにデータを結合する機能。
ビューのビジネスロジック
ビューコンポーザを作ってアプリに登録することでビューをレンダリングする際に処理を自動実行できる。
- 投稿日:2020-07-15T22:15:45+09:00
【Laravel5.5】 tinkerコマンドで管理者ユーザー登録
やりたいこと
今回はタイトルにもある通り、tinkerコマンドを使い管理者(Admin側)でのユーザー登録の流れを解説しようと思います。
なぜコマンドで登録するのか
Laravelでは標準で用意されている会員登録機能が認証(Auth側)のみ用意されており、管理者ユーザーのテーブルで直接パスワードを入力してインサートしてもハッシュ化されていないためログインが出来ません。
そのためtinkerコマンドでハッシュ化したパスワードをインサートする必要が出てくる場合があります。コマンド操作流れ
tinkerphp artisan tinker Psy Shell v0.9.12 (PHP 7.1.29 — cli) by Justin Hileman >>> use App\Admin; >>> $admin = new Admin(); => App\Admin {#2914} >>> $admin->name = 'ユーザー名'; => "ユーザー名" >>> $admin->email = 'hoge@hoge.co.jp'; => "hoge@hoge.co.jp" //bcrypt関数でハッシュ化 >>> $admin->password = bcrypt('パスワード'); =>"ハッシュ化されたパスワード" >>> $admin->save(); => true //quitまたはexitでtinkerの終了 >>> quitこちらがtinkerコマンドでの管理者ユーザー登録の一連になります。
tinkerはメソッド等実行出来るのでデバッグや実際の動きを確認したり、
テーブルに登録されているユーザーの一覧を取得出来たり便利なので積極的に使いたいですね!以上になります!LGTMを押していただけると励みになります。
お疲れ様でした!
- 投稿日:2020-07-15T15:58:33+09:00
Laravel バージョン確認コマンド
- 投稿日:2020-07-15T15:39:02+09:00
The GET method is not supported for this route. Supported methods: POST.のエラー
- 投稿日:2020-07-15T15:19:11+09:00
[データ配布] Laravel + Reactのアーキテクチャ設計
Laravel + React シンプルなTodoアプリ(アーキテクチャ設計)
構成
- Laravel: CRUD API(updateは未実装)
- React: フォーム送信機能
Laravel環境構築
- Laravel 5.8
- React
- VirtialBox
- Vagrant
- Macの場合、Xcode、Homeblue必須
Laravel環境構築 チートシート
この記事内のvagrant@homestead:~$ cd code
までおこなってください。
Laravelデータは作成した方を入れるのでデフォルトデータはクローンしなくて大丈夫です。GitHubデータをクローン
どこでもいいのでデータクローン。
使うのは中身のファイルです。# 別ウィンドウでターミナルを立ち上げて(コマンド+T) $ cd Desktop $ git clone https://github.com/dai-570415/laravel-react-example.gitクローンできたら
中身のファイル一式を「/Laravelファイル名/code/」ディレクトリに直接移動# Laravelプロジェクト側 # 依存関係インストール vagrant@homestead:~$ npm install # テーブル生成 vagrant@homestead:~$ php artisan migrate # React監視 vagrant@homestead:~$ npm run watch-pollこちらで無事表示できたかと思います。
中身の説明はGit Hubにまとめましたので、そちらからみてください。
Git Hub
- 投稿日:2020-07-15T14:55:14+09:00
Laravel npm installを実行しようとしたらエラーが出た話 超簡易版
目的
- Laravelアプリに必要なJSパッケージをインストールするためにnpm installを実行したがエラーが出た話をまとめる
問題までの経緯
Laravelアプリ名ディレクトリの一つ上の階層で下記コマンドを実行した。
$ npm install問題
下記エラーが発生しコマンドが正常実行されない。
npm WARN saveError ENOENT: no such file or directory, open '/usr/share/nginx/html/package.json' npm WARN enoent ENOENT: no such file or directory, open '/usr/share/nginx/html/package.json' npm WARN html No description npm WARN html No repository field. npm WARN html No README data npm WARN html No license field. audited 15 packages in 0.511s 3 packages are looking for funding run `npm fund` for details found 0 vulnerabilities問題解決までの経緯
$ npm install
を実行するディレクトリを間違えていた。- Laravelアプリ名ディレクトリに移動して
$ npm install
を実行したところ正常に実行された。
- 投稿日:2020-07-15T14:24:56+09:00
Laravelの最短ページ作成流れ
- 投稿日:2020-07-15T13:55:00+09:00
【Laravel】バリデータ オリジナルバリデータの作成から
書籍アウトプットとして
オリジナルバリデータの作成
Illuminate\Validation\Validatorクラスを継承したクラスを新しく作成する。
基本形がこれ。
use Illuminate\validation\Validator; class クラス名 extends Validator { public function validate〇〇($attribute, $balue, $parameters) { //バリデーションの処理 return 真偽値; } }validate〇〇という名前のメソッドを用意する.
例えば、validateAbcという名前で用意すれば'abc'というルールとして扱われる。
またバリデーションの処理をして真偽値を返す。
真偽値 説明 true 問題なし false バリデーションエラー HelloValidatorを作成する
バリデータクラスは手作業で作成していく。
Http/Validators/HelloValidator.php
というファイルを作ってそこに書いていくHelloValidator.php<?php namespace App\Http\Validator; use Illuminate\Validation\Validator; class HelloValidator extends Validator { public function validateHello($attribute, $value, $parameters) { return $value%2==0; } }ここで
return $value%2==0;
を返して、偶数なら許可としている。HelloValidatorを組み込む
組み込みにはサービスプロバイダを利用する。
public function boot() { $validator=$this->app['Validator']; $validator->resolver(function ($translator, $data, $rules, $message) { return new HelloValidator($translator, $data, $rules, $message); }); }バリデータは
$this->app['validator']
に保管されている。
このresolver
というメソッドでリゾルブ(バリデーションの処理を行う)の処理を設定できる。
引数は以下のようなクロージャfunction ($translator, $data, $rules, $message) { return 《Validator》; }ここではバリデータのインスタンスをreturnすることで、このクラスをバリデーションの処理として設定している。
HelloValidatorのルールを使用する
class HelloRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { if ($this->path()=='hello') { return true; } else { return false; } } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name'=>'required', 'mail'=>'email', 'age'=>'numeric|hello', ]; } public function messages() { return [ 'name.required'=>'名前は必須項目', 'mail.email'=>'メアドは必要', 'age.numeric'=>'整数で記入', 'age.hello'=>'Hello 入力は偶数のみ受付', ]; } }HelloRequestクラスを修正する。
age
にnumeric|hello
という形で検証ルールを設定
エラーメッセージはage.hello
を指定して設定。
次はコントローラの修正class HelloController extends Controller { public function index(Request $request) { return view('hello.index',['msg'=>'フォームを入力']); } public function post(Request $request) { return view('hello.index',['msg'=>'正しく入力された']); } }これで/helloにアクセスする
Validator::extendを利用する
独自のバリデータクラスの作成をしないほどのカスタマイズしたい場合にはValidatorクラスのextendメソッドを使う
Validator::extends(名前,クロージャ);これで第1引数に指定した名前で第2引数のクロージャをルールとして追加する。
第2引数のクロージャfunction($arrtivute,$value,$parameters,$validator){ //バリデーションの処理 return 真偽値; }
$arrtivute,$value,$parameters
の引数に加えてバリデータのインスタンスを渡す。これを使って先の独自バリデータクラスを同じことをしてみる。
HelloServiceProvierクラスを修正する。public function boot() { Validator::extend('hello', function ($arrtivute, $value, $parameters, $validator) { return $value%2==0; }); }Validator::extendは手軽だが汎用性がない。
1つのコントローラでしか使わないルールはこれで作り
いくつものコントローラで利用する場合はバリデーションクラスを作るという使い分けが良い。
- 投稿日:2020-07-15T13:09:34+09:00
Githubのプルリク時に発生するエラー「You can't perform that action at this time.」の解決法
起きた問題
laravelで掲示板らしきものをgithubで管理しながら、制作していた時に急にプルリクができなくなってしまった。
環境
dockerとlaravelとgithub
発生したエラー
dockerコンテナの外から
git add . git commit -m "コミット名" git push origin "ブランチ名"をし、github上でプルリクをしようとしたが、
上記の赤枠内の部分が表示されない。仕方なく、
黒枠からプルリクを選択→create pull requestを選択Pull request creation failed. Validation failed You can't perform that action at this time.というエラーがgithub上に出力された。
原因
制作した掲示板はgithubログインできる使用だったのだが、その掲示板に今ログインしているuserとプルリクしたgithubのアカウントが異なっていたためと思われる。
解決策
掲示板をプルリクしたいgithubアカウントでログインし直すと解決できた。
- 投稿日:2020-07-15T08:23:13+09:00
【Laravel】プロフィール画像アップロード
実装したいこと
- usersテーブルにプロフィール画像を追加
- デフォルト画像を用意
- プロフィール画像変更
- 変更時、選択した画像を表示
- アップロード時、画像をリサイズ
前提
- Laravel7
- マイグレーション済み
- routes/web.phpにRoute::resource('user', 'UserController');を記述済み
実装
データベースに画像のファイル名を保存しておいて、そのファイル名をもとに画像の読み出しを行う、という戦略をとることとします。
画像の保存場所はpublic/storage/profiles/とします。このディレクトリにあらかじめデフォルトの画像を配置しておいてください。profile_imageカラムの追加
マイグレーションファイルを作成します。
% php artisan make:migration add_column_to_users_table --table=usersカラムを追加する処理を書きます。
database/migrations/20XX_00_00_000000_add_column_to_users_table.phpclass AddColumnToUsersTable extends Migration { public function up() { Schema::table('users', function (Blueprint $table) { $table->string('profile_image')->default('default.png'); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('profile_image'); }); } }マイグレーション
% php artisan migrateUser.phpの$fillableにカラムを追加
app/User.phpprotected $fillable = [ 'name', 'email', 'password', 'profile_image' ];画像の表示
画像の表示の一例を以下に示します
コントローラー
app/Http/Controllers/ProfileController.phppublic function profile() { $user = Auth::user(); return view('profile', ['user' => $user]); }ビュー
resources/views/profile.blade.php<img src="{{ asset('storage/profiles/'.$user->profile_image) }}" alt="プロフィール画像">プロフィール画像編集(アップロード)
ここで、Intervention Imageを用います。
Intervention Imageを使用するには、以下のコマンドを実行するだけでいいです。% composer require intervention/imageIntervention Imageの使い方は以下のブログを参考にしました。
「完全網羅!Intervention Image(PHP)で画像を編集する全実例」
公式はこちら。コントローラー
Intervention Imageでの処理は、saveProfileImage()内で行っています。
バリデーションはフォームリクエストUserRequestで行います。(省略)app/Http/Controllers/UserController.phppublic function edit($id) { $user = Auth::user(); return view('user.edit', ['user' => $user]); } public function update($id, UserRequest $request) { $user = Auth::user(); $form = $request->all(); $profileImage = $request->file('profile_image'); if ($profileImage != null) { $form['profile_image'] = $this->saveProfileImage($profileImage, $id); // return file name } unset($form['_token']); unset($form['_method']); $user->fill($form)->save(); return redirect('/home'); } private function saveProfileImage($image, $id) { // get instance $img = \Image::make($image); // resize $img->fit(100, 100, function($constraint){ $constraint->upsize(); }); // save $file_name = 'profile_'.$id.'.'.$image->getClientOriginalExtension(); $save_path = 'storage/profiles/'.$file_name; $img->save($save_path); // return file name return $file_name; }ビュー
- 現在のプロフィール画像を最初に表示
- プロフィール画像をクリックしたら、画像ファイルを選択できる
- 選択した画像ファイルが表示される
以上を満たすように実装します。
「選択画像が変化したらアップロードしようとしている画像を表示する」といった処理をJavaScriptで実装しています。ファイルをアップロードするためには、enctype="multipart/form-data"をformタグに追加する必要があります。
resources/views/user/edit.blade.php<form method="post" action="{{ route('user.update', ['user' => $user->id]) }}" enctype="multipart/form-data"> @csrf @method('PATCH') <label for="profile_image">プロフィール画像</label> <label for="profile_image" class="btn"> <img src="{{ asset('storage/profiles/'.$user->profile_image) }}" id="img"> <input id="profile_image" type="file" name="profile_image" onchange="previewImage(this);"> </label> <button type="submit" class="btn btn-primary"> 変更 </button> </form> <script> function previewImage(obj) { var fileReader = new FileReader(); fileReader.onload = (function() { document.getElementById('img').src = fileReader.result; }); fileReader.readAsDataURL(obj.files[0]); } </script>SASS(CSS)
input#profile_image { display: none; }おわり
画像のリサイズやJavaScriptの部分は一例に過ぎないので、他のサイトで別の方法をとてもいいかも
Intervention Imageは便利なので上で紹介したサイトで勉強してみては?
- 投稿日:2020-07-15T02:36:07+09:00
Laravelで同じURLにルーティングをする方法
概要
Laravelでルーティングをしようと思った際に困ったことがあり、ネットにあまり情報がなかったので備忘録として投稿しました。
初めてQiitaに投稿するので至らないところがあると思いますがご了承下さい。
また、PHPに触れるのも2,3週間ほどしか経っていないです。困ったこと
/routes/web.phpにルーティングについての記述をしていました。
/routes/web.phpRoute::get('/sql/hogehoge', function () { return view('sql/hogehoge'); }); Route::get('/sql/hogehoge/', 'SQLController@search'); Route::post('/sql/hogehoge/', 'SQLController@searchResults'); Route::get('/sql/hogehoge/', 'SQLController@index1_search'); Route::post('/sql/hogehoge/', 'SQLController@index1_searchResults');SQLController.phppublic function search(){ $sql = "SELECT name FROM tables"; $stmt = $pdo->prepare($sql); $stmt->execute(); return view('sql/hogehoge', [ 'names' => $stmt ]); } public function searchResults(){ $name_id = request('name'); return $name_id; } public function index1_search(){ $sql = "SELECT date FROM tables"; $stmt = $pdo->prepare($sql); $stmt->execute(); return view('sql/hogehoge', [ 'dates' => $stmt ]); } public function index1_searchResults(){ $date_id = request('date'); return $date_id; }Route::get()の第1引数にはURLを書きます。第2引数にはどこのメソッドで処理をするのか書きます。
上記の例ですとhttp://localhost/sql/hogehoge と検索したときにSQLController.phpにあるsearchメソッドが呼び出されて処理が行われるという意味になります。また、SQLController.phpで処理したデータを表示させるために以下のresult.php(仮称)を作成しました。
result.php<form action ="./SQLController" method="POST"> <label for="Hogehoge">Hogehoge</label> <select class="form-control" id="name" name="name"> <option value="" selected></option> <?php if(isset($names)) foreach ($names as $v) { ?> <option value=<?php echo $v["first"]; ?>><?php echo $v["last"]; ?></option> <?php } ?> </select> </form> <form action ="./SQLController" method="POST"> <label for="Tournament">Tournament</label> <select class="form-control" id="date" name="date"> <option value="" selected></option> <?php if(isset($dates)) foreach ($dates as $v) { ?> <option value=<?php echo $v["month"]; ?>><?php echo $v["year"]; ?></option> <?php } ?> </select> </form>だいぶ省略していますがこれを実行しようとするとプルダウンメニューがname用とdate用で2つでてくるのですが、なんとdate用のプルダウンメニューしかsqlの処理がなされませんでした。name用のプルダウンメニューには何も表示されませんでした。
原因
原因はweb.phpにありました。
/routes/web.phpRoute::get('/sql/hogehoge/', 'SQLController@search'); Route::post('/sql/hogehoge/', 'SQLController@searchResults'); Route::get('/sql/hogehoge/', 'SQLController@index1_search'); Route::post('/sql/hogehoge/', 'SQLController@index1_searchResults');上記ではRoute::getの第1引数が同じものを使っていることがわかると思います。
同じものを記述するとあとに記述したもの(ここではSQLController@index1_searchResults)が優先されて実行されるようです。
実際そのような結果が筆者は確認できました。解決方法
同じ第1引数を記述したことに原因があるのでそれについて変更を加えました。
web.phpは処理をするメソッドを一つにまとめました。/routes/web.phpRoute::get('/sql/hogehoge/', 'SQLController@search'); Route::post('/sql/hogehoge/', 'SQLController@searchResults');それにともないSQLController.phpのほうのメソッドも一つにまとめました。
SQLController.phppublic function search(){ $name_sql = "SELECT name FROM tables"; $name_stmt = $pdo->prepare($name_sql); $name_stmt->execute(); $date_sql = "SELECT date FROM tables"; $date_stmt = $pdo->prepare($date_sql); $date_stmt->execute(); return view('sql/hogehoge', [ 'names' => $name_stmt, 'dates' => $date_stmt ]); } public function searchResults(){ $name_id = request('name'); return [$name_id, $date_id]; }メソッドで複数の値を返したいときはreturn [];の形で書きます。
以上のようにしてみたら上手く複数のプルダウンメニューが表示できるようになりました。
おわりに
コードは適当に変数や値をつけてしまった部分があるので間違いがあると思います。
ほかにもいい方法があるのかもしれませんが、3,4時間ほど悩んでようやく解決できた苦痛を他の方々にも味わってほしくないと思い、ここに書き記しました。なにか間違い等ありましたら教えて下さい。また、ほかにもなにかいい方法がありましたら教えて下さい。