yuuki0205nano
@yuuki0205nano (よしおか)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

admin/createに移動したいけど、うまくできない

解決したいこと

'/admin'から'/admin/create'に飛びたいのに/adminに戻ってしまうのを正常に動かしたい

例)
新規作成ボタンを押したらadmin/createに飛ぶようにしたい

発生している問題・エラー

エラーは発生してないけど、画面が思うようなページに飛ばない

スクリーンショット (177).png

該当するソースコード

Controllerのコード

Admin.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use \App\Memo;
use \App\User;


class AdminController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('auth:admin');

    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */

     public function create(){
         return view('admin\create');
     }

}

web.php
<?php

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/', 'HomeController@index')->name('home');
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/create', 'HomeController@create')->name('create');
Route::get('/memo', 'HomeController@memo')->name('memo');
Route::post('/store', 'HomeController@store')->name('store');
Route::get('/edit/{id}', 'HomeController@edit')->name('edit');
Route::post('/update/{id}', 'HomeController@update')->name('update');
Route::get('/content/{id}', 'HomeController@content')->name('content');
Route::post('/delete/{id}', 'HomeController@delete')->name('delete');


Route::get('/login/admin', 'Auth\LoginController@showAdminLoginForm');
Route::get('/register/admin', 'Auth\RegisterController@showAdminRegisterForm');
Route::post('/login/admin', 'Auth\LoginController@adminLogin');
Route::post('/register/admin', 'Auth\RegisterController@createAdmin');

Route::view('/home', 'home')->middleware('auth');
Route::view('/admin', 'admin');


Route::get('/admin/create', 'AdminController@create')->name('adcreate');

Viewのコード

create.php
@extends('layouts.auth')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
            <p>Hello Create!!</p>

        </div>
        </div>
    </div>
</div>
@endsection

admin.php
@extends('layouts.auth')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Adminのページにログインしています</div>

                <div class="card-body">
                    Hi boss!
                </div>

                <a href = "/admin/create" class="btn btn-primary">新規作成 </a>

            </div>
        </div>
    </div>
</div>
@endsection
0

1Answer

  1. URLは/admin/createだけど、画面が/adminのもの
  2. URLも画面も/admin

このどちらでしょうか?

0Like

Comments

  1. @yuuki0205nano

    Questioner

    aタグで新規作成ボタンを押すと/admin/createに行くようにしているんですが、/adminに飛んでしまうので
    [URLは/admin/createだけど、画面が/adminのもの]
    になります
  2. 念の為再度確認させてください。

    この場合の「URL」はリンク(aタグ)ではなく、画面が表示された時アドレスバーに表示されているものを意図しています。
    aタグで新規作成ボタンを押して/adminの画面が表示されている時、ブラウザのアドレスバーは/admin/createになっていますか?

    その場合はコマンドでroute設定を確認してください。
    php artisan route:list
  3. @yuuki0205nano

    Questioner

    ブラウザのアドレスバーはaタグの新規作成ボタンを押すとアドレスバーは/adminになります
    ブラウザ上で新規作成ボタンを右クリックしてリンクをコピーすると/admin/createになります

    php artisan route:list
    | GET|HEAD | admin/create| adcreate| App\Http\Controllers\AdminController@create
  4. ログインしていますか?
    AdminControllerはauthミドルウェアによって保護されているようです。

    1. ログインしていない状態で/admin/createに遷移する
    2. /admin/createは認証済みユーザーしかアクセスできないので、/adminにリダイレクトされる
    3. /adminが表示される

    という状態ではないでしょうか?
  5. @yuuki0205nano

    Questioner

    ログインをしてからの状態なのでログインはできていると思います

    ユーザー(info@gmail.com)と管理者(admin@gmail.com)が存在する状態で
    管理者としてログインすると/adminが最初に出力されます
    しかしユーザーとしてログインしてホーム画面からURLバーに/adminと直接入力すると認証されて/adminの画面ができてしまいます

    1.admin@gmail.com→ログイン→/home→/admin(直打ち)→認証される→新規作成ボタン、または/admin/createを入力→/adminへ


    2.info@gmail.com→ログイン→/home→/admin(直打ち)→認証される→新規作成ボタン、または/admin/createを入力→home.blade.phpが呼び出される



    今回のエラーと関係あるかと思ったのですが、どうでしょう?

  6. /adminは保護されていないようなので、ログイン状態に関係なく表示されると思います。
    Route::view('/admin', 'admin');

    /admin/createはadminガードが指定されていますが、ガードは設定されていますか?
    例えばAdminControllerこの行を削除して、/admin/createに遷移できるでしょうか?
    $this->middleware('auth:admin');
  7. @yuuki0205nano

    Questioner

    $this->middleware('auth:admin');削除しても移動できませんでした
    $this->middleware('auth');を削除するとできるようになりました


Your answer might help someone💌