質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

laravel-admin

laravel-adminは、Laravelに対して管理者用インタフェースを実装するために必要な部品を補うライブラリ。コントローラーでのCRUD処理が可能で、フォームやテーブルに使う値の整形およびテンプレートも提供されています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

2584閲覧

Laravelで、redirectを使用したときにパラメータが渡せない

nutti

総合スコア7

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

laravel-admin

laravel-adminは、Laravelに対して管理者用インタフェースを実装するために必要な部品を補うライブラリ。コントローラーでのCRUD処理が可能で、フォームやテーブルに使う値の整形およびテンプレートも提供されています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/02/23 06:33

編集2022/02/24 06:36

Laravel6で、routeを使用して作成したアンカーリンクつき(#XXX)URLへのredirectを行うと、#XXX以降が消えてしまう

質問を見てくださりありがとうございます。
現在起きている問題としては、
https://example.com//admin/hoge_page/ID/edit#textX
というアンカーリンク付きのURLを作成して、ここにredirect()->to()を使用してリダイレクトをする際に、表示されたページでは
https://example.com//admin/hoge_page/ID/edit
となって#textXが消えた状態のURLになってしまいアンカーリンクが消えてしまいます。

Laravel6とlaravel-adminを使用しているなかで、上記のようにアンカーリンク付きのリダイレクトが行えなく質問させていただきました。
とある編集ページで、編集を行った際に何かしらの問題があり、再度編集ページを開き、問題のある入力箇所までスクロールするという構造を作りたいのですがうまくいきません。
色々調べてやってみたのですが、URLは作れていると思うのですがリダイレクトしページがヒョ時されたときには#タグ以降が消えています。

各種ソース

まずはLaravelのルート設定です

Admin/routes.php:php

1Route::group([ 2 'prefix' => config('admin.route.prefix'), 3 'namespace' => config('admin.route.namespace'), 4 'middleware' => config('admin.route.middleware'), 5 'as' => config('admin.route.prefix') . '.', 6], function (Router $router) { 7 // 該当ページです 8 $router->resource('hoge_page', HogePageController::class); 9});

次にコントローラです。HogePageControllerのedit部分(Laravel-Adminのform部分)の切り抜きです。

Admin/Controller/HogePageController.php

1// route('admin.hoge_page.edit')になります。 2protected function form($id=null) 3{ 4 //Hogeデータベースを操作するHogeModelは宣言済みです 5 $form = new Form(new Hoge()); 6 $form->text('text1', __('入力欄1')); 7 $form->text('text2', __('入力欄2')); 8 $form->text('text3', __('入力欄3')); 9       ︙ 10 $form->text('textX', __('入力欄X')); // id='testX'があります。 11  12 //保存完了後に、なにかしらの問題が起こってしまったとしてリダイレクトを発動します。 13 $form->saved(function (Form $form) use ($order_id, $client_id) 14 { 15 // testXに問題があったと仮定して、testXが表示されているところまでスクロールしたい 16 return redirect()->to(route('admin.hoge_page.edit' . '$form->model()->id) . '#textX'); 17 } 18}

行っていること(理想の動作)

hoge_pageでは、text1~textXまでのテキストの編集ができる項目があります。
そのtextXにて問題があったとし、DBに保存が完了したのちに呼び出される関数$form->saved内にて、編集ページを再度表示アンカーリンクの#textが該当するtextXの入力欄までスクロールするようにしています。
理想動作は

  1. 各種編集を記入し、完了ボタン(更新ボタン)を押す
  2. DBへの保存が完了されsavedが呼び出されるが、textXにて問題があったとし、再度現在開いていた編集ページを呼び出す
  3. リダイレクトで呼び出す際に、#textXをURLに付与し、該当箇所までスクロールした状態で表示する

という感じになります。

起きている問題

完了後、正しい先に(hoge_pageのeditページ)リダイレクトは行われるのですが、
route('admin.hoge_page.edit' . '$form->model()->id) . '#textX');
で作成できた
https://example.com//admin/hoge_page/ID/edit#textX

https://example.com//admin/hoge_page/ID/edit
となって#textXが消えた状態のURLでページが表示されます。
試しに、

$form->saved(function (Form $form) use ($order_id, $client_id) { dd(route('admin.hoge_page.edit' . '$form->model()->id) . '#textX'); // この行できちんとできているか確認 // testXに問題があったと仮定して、testXが表示されているところまでスクロールしたい return redirect()->to(route('admin.hoge_page.edit' . '$form->model()->id) . '#textX'); }

というふうにして確認したところ、きちんとhttps://example.com/admin/hoge_page/ID/edit#textXができているのが確認できました。

また、

$form->saved(function (Form $form) use ($order_id, $client_id) { // testXに問題があったと仮定して、testXが表示されているところまでスクロールしたい return redirect()->to(route('admin.hoge_page.edit' . ['$form->model()->id, '#textX']); }

このようにしてみたところ、
https://example.com/admin/hoge_page/ID/edit?#textX
のように?が入り込んでしまいうまくいきませんでした。

試しに、アドレスバーに
https://example.com/admin/hoge_page/ID/edit#textX
と入力して検索すると問題なく動作いたしました。

$form->saved(function (Form $form) use ($order_id, $client_id) { // testXに問題があったと仮定して、testXが表示されているところまでスクロールしたい return redirect()->to('/admin/hoge_page/' . $form->model()->id . '/edit#textX'); }

としてみたのですが、こちらは結果が変わらずでした。

アドレスバーに直接入れると正常にできるので、何か原因があると思うのですが、うまく動作しません。
ddで見たときにきちんと遷移先のURLができているので何かしらが原因で書き換えられているんだと思うんですが、そこがわかりませんでした。

わかる方、どうかご教示いただけますと幸いです。
何卒よろしくお願い致します。

不足項目等ありましたら、追記いたしますのでお手数ですがコメントいただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問