Ошибка маршрутизации домена Отсутствуют обязательные параметры в Laravel - PullRequest
0 голосов
/ 07 декабря 2018

У меня возникла проблема в моем проекте.Я создаю доменную маршрутизацию в laravel.Но когда я вхожу на страницу входа в маршрут, на экране отображается ошибка

Missing required parameters for [Route: admin.login.submit] [URI: login]. 

Вот мой маршрут

Route::domain(env('APP_DOMAIN_URL'))->group(function () {
    Route::any('/', function() {
        return 'Site is under development';
    });
});

Route::domain('{subdomain}.' . env('APP_DOMAIN_URL'))->group(function () {

    Route::group(['namespace' => 'backend'], function() {
        Route::get('login', 'AdminLoginController@showLogin')->name('admin.login');
        Route::post('login', 'AdminLoginController@login')->name('admin.login.submit');
        Route::get('/', 'AdminController@dashboard')->name('admin.dashboard');
        Route::get('logout', 'AdminLoginController@logout')->name('admin.logout');

    });
});

Мой код метода входа в контроллер -

    <?php

namespace App\Http\Controllers\backend;

use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class AdminLoginController extends Controller {

    public function __construct() {
        $this->middleware('guest:admin', ['except' => ['logout']]);
    }

    public function showLogin() {
        return view('backend.login');
    }

    public function login(Request $request) {
        // Validate the form data
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required'
        ]);

        // Attempt to log the user in
        if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password, 'status' => 1], $request->remember)) {
            // if successful, then redirect to their intended location
            return redirect()->intended(route('admin.dashboard'));
        }

        // if unsuccessful, then redirect back to the login with the form data
        $errors = ['email' => trans('auth.failed')];
        return redirect()->back()->withInput($request->only('email', 'remember'))->withErrors($errors);
    }

    public function logout() {        
        return redirect()->route('admin.dashboard');
    }

}

ИМой блейд-файл

<div class="login-box-body">
    <p class="login-box-msg">Sign in to start your session</p>
    @include('backend.include.login_error')
    @include('backend.include.flashMessage')
    <form action="{{ route('admin.login.submit') }}" method="post">
        {{ csrf_field() }}
        <div class="form-group has-feedback">
            <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required autofocus placeholder="Email">
            <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
        </div>
        <div class="form-group has-feedback">
            <input id="password" type="password" class="form-control" name="password" required placeholder="Password">
            <span class="glyphicon glyphicon-lock form-control-feedback"></span>
        </div>
        <div class="row">
            <div class="col-xs-8">
                <div class="checkbox icheck">
                    <label>
                        <input type="checkbox" name="remember" {{ old('remember') ? 'checked' : ''}}> Remember Me
                    </label>
                </div>
            </div>
            <!-- /.col -->
            <div class="col-xs-4">
                <button type="submit" class="btn btn-success btn-block btn-flat">Sign In</button>
            </div>
            <!-- /.col -->
        </div>
    </form>

</div>

Также есть способ перенаправления, если пользователь не авторизован на странице входа для субдомена.

Я использую Laravel 5.7

Мое сообщение об ошибке

enter image description here

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Попробуйте добавить поддомен в качестве параметра к вспомогательному методу маршрута, например:

<form 
    action="{{ route('admin.login.submit', ['subdomain' => 'admin']) }}" 
    method="post">
0 голосов
/ 07 декабря 2018

Для последнего вопроса, который у вас есть, to redirect users when logged or not, you can make use of the Auth middleware`:

Route::group(['middleware' => ['auth']], function() {
    //Only Auth routes that you wish to allow, if user is authenticated
});

Если вы хотите быть принудительным, вы можете также выполнить проверку в верхней части ваших маршрутов:

if (Auth::guest()) {
   return redirect('login');
}

Что касается вашего маршрута входа , это то, что я хотел бы сделать, чтобы уменьшить код и отделить логику в вашем method:

В корневой папке вашегоlaravel project, запустите следующую команду в вашем CMD:

php artisan make:request LoginRequest

Это создаст новый Class в app/Http/Requests

В этом классе добавьте свою проверку, поэтому, когда маршрут иPOST использует ваш метод, проверка уже запущена:

Класс LoginRequest

public function autorize()
{
    if (Auth::check()) {
        return false; //User already logged in, no point in going through this again
    }
    return true; //It is a guest so lets approve it
}

public function rules()
{
    return [
        'email'    => 'required|email|users:unique',
        'password' => 'required'
    ];
}

public function messages()
{
    return [
        'email.required' => 'You need to add an email to login.',
        'email.email'    => 'The information provided does not seem to be an email.',
        ...
    ];
}

Ваш метод входа в систему на вашем контроллере

public function login(LoginRequest $request)
{
    // You can remove the first lines that do the validation as this is triggered before arriving to the method now!
    ....
}

Если вы работаете с несколькими доменами

Перейдите на config/app.php и добавьте другие нужные вам домены под ключом base_domain:

return [

   'base_domain' => env('APP_BASE_DOMAIN'),
    ...
];

Отсюда вам придется сообщить Ларавелу о ваших намерениях.Есть несколько шагов, которые нужно выполнить, и несколько способов лучше организовать код.Я рекомендую этот урок , чтобы помочь вам настроить субдомены в вашем приложении laravel!

...