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
の入力欄までスクロールするようにしています。
理想動作は
- 各種編集を記入し、完了ボタン(更新ボタン)を押す
- DBへの保存が完了されsavedが呼び出されるが、textXにて問題があったとし、再度現在開いていた編集ページを呼び出す
- リダイレクトで呼び出す際に、#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ができているので何かしらが原因で書き換えられているんだと思うんですが、そこがわかりませんでした。
わかる方、どうかご教示いただけますと幸いです。
何卒よろしくお願い致します。
不足項目等ありましたら、追記いたしますのでお手数ですがコメントいただければと思います。
あなたの回答
tips
プレビュー