Php 域路由错误在Laravel中缺少必需的参数

Php 域路由错误在Laravel中缺少必需的参数,php,laravel,routing,routes,subdomain,Php,Laravel,Routing,Routes,Subdomain,我在我的项目中遇到了一些问题。我在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

我在我的项目中遇到了一些问题。我在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');
    }

}

对于您的最后一个问题,
要在登录或未登录时重定向用户,您可以使用
Auth中间件`:

Route::group(['middleware' => ['auth']], function() {
    //Only Auth routes that you wish to allow, if user is authenticated
});
如果您希望强制执行,还可以在路线顶部执行检查:

if (Auth::guest()) {
   return redirect('login');
}
对于您的登录路径,我将这样做,以帮助减少代码并分离
方法中的逻辑

在laravel项目的根文件夹中,在CMD中运行以下命令:

php artisan make:request LoginRequest
这将在
app/Http/Requests

在该类中添加验证,因此当route和POST hists创建方法时,验证已经触发:

登录请求类

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\u域
键下方添加所需的其他域:

return [

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

从这一点上,你必须让拉雷维尔知道你的意图。有几个步骤要遵循,还有一些方法可以更好地组织代码。我建议帮助您在laravel应用程序中设置子域

尝试将子域作为参数添加到route helper方法,例如:

<form 
    action="{{ route('admin.login.submit', ['subdomain' => 'admin']) }}" 
    method="post">


我得到了你其中一个问题的答案,但我需要你的方法控制器来处理你的帖子,因为你要解决的主要错误是由该方法触发的,而不是你添加到答案中的方法触发的。继续,您能否编辑答案并添加控制器的
登录
方法?@DiogoSanto我的问题已更新。请看一看代码。如果我不使用域路由,则此代码有效。但是,当我使用域路由时,thsi代码现在不起作用了!:)@HabibHassan尝试我的解决方案,并检查它是否仍然会引发问题。我是否需要在所有路由中添加子域。这很费时。除了{subdomain}作为参数之外,没有其他方法可以将它设置在其他地方,例如使用会话或配置变量,或者通过其他逻辑将它插入路由文件。我如何才能做到这一点?我的子域也不同。
Route::domain($subdomain..env('APP_domain_URL'))->group
其中的
$subdomain
可以根据会话变量或其他值进行设置,具体取决于您何时需要哪个子域。如果设置变量太复杂,我会使用paramater并在每个路由上手动设置它。
<form 
    action="{{ route('admin.login.submit', ['subdomain' => 'admin']) }}" 
    method="post">