wake-up-neo.com

Laravel 5 MethodNotAllowedHttpException in RouteCollection.php Zeile 201:

Ich habe eine Reihe von PHP-Dateien in meinem Projekt:

admin.blade.php: Diese Datei enthält das Admin-Formular.

Wenn es aufgerufen wird, wird der folgende Fehler angezeigt:

MethodNotAllowedHttpException in der RouteCollection.php-Zeile 201

<h2>Please Log In To Manage</h2>
<form id="form1" name="form1" method="post" action="<?=URL::to('/admin')?>">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
   User Name:<br />
   <input name="username" type="text" id="username" size="40" />
   <br /><br />
   Password:<br />
   <input name="password" type="password" id="password" size="40" />
   <br />
   <br />
   <br />
   <input type="submit" name="button" id="button" value="Log In" />
</form>

Im route.php, dieser Aufruf erfolgt:

Route::get('/admin',array('uses'=>'[email protected]'));

Dies ist die Funktion in student.php

public function admin()
{
    return View::make('student.admin');
    $validator = Validator::make($data = Input::all() , User::rules());
    if ($validator->fails())
    {
        return Redirect::back()->withErrors($validator)->withInput();
    }
    else
    {
        $check = 0;
        $check = DB::table('admin')->get();
        $username = Input::get('username');
        $password = Input::get('password');
        if (Auth::attempt(['username' => $username, 'password' => $password]))
        {
            return Redirect::intended('/');
        }
        return Redirect::back()->withInput()->withErrors('That username/password combo does not exist.');
    }
}

Ich weiß nicht viel über das Erstellen eines Administrationsbereichs, ich versuche nur, ihn zu erstellen.

10
deep singh

So mache ich es.

Routes.php

Route::get('/admin', '[email protected]');
Route::get('/admin/dashboard', '[email protected]');
Route::post('/admin', '[email protected]');

admin_login.blade.php

{!! Form::open(['url' => '/admin']) !!}
    <div class="form-group">
        {!! Form::label('email', 'Email Id:') !!}
        {!! Form::text('email', null, ['class' => 'form-control input-sm']) !!}
    </div>
    <div class="form-group">
        {!! Form::label('password', 'Password') !!}
        {!! Form::password('password', ['class' => 'form-control input-sm']) !!}
    </div>
    <div class="form-group">
        {!! Form::submit('Login', ['class' => 'btn btn-primary btn-block']) !!}
    </div>
{!! Form::close() !!}

dashboard.blade.php

<h4 class="text-center">
    Welcome {{ Auth::user()->full_name }}
</h4>

UsersController.php

/**
 * Display the admin login form if not logged in,
 * else redirect him/her to the admin dashboard.
 *
 */
public function getAdminLogin()
{
    if(Auth::check() && Auth::user()->role === 'admin')
    {
        return redirect('/admin/dashboard');
    }
    return view('admin_login');
}

/**
 * Process the login form submitted, check for the
 * admin credentials in the users table. If match found,
 * redirect him/her to the admin dashboard, else, display
 * the error message.
 *
 */
public function postAdminLogin(Request $request)
{
    $this->validate($request, [
        'email'    => 'required|email|exists:users,email,role,admin',
        'password' => 'required'
    ]);

    $credentials = $request->only( 'email', 'password' );

    if(Auth::attempt($credentials))
    {
        return redirect('/admin/dashboard');
    }
    else
    {
        // Your logic of invalid credentials.
        return 'Invalid Credentials';
    }
}

/**
 * Display the dashboard to the admin if logged in, else,
 * redirect him/her to the admin login form.
 *
 */
public function dashboard()
{
    if(Auth::check() && Auth::user()->role === 'admin')
    {
        return view('admin.dashboard');
    }
    return redirect('/admin');
}

Ihr Code:

Im routes.php, Sie haben nur eine Route, d. h.

Route::get('/admin',array('uses'=>'[email protected]'));

Und es gibt keine Deklaration der post -Methode, daher die MethodNotAllowedHttpException

Außerdem geben Sie in Ihrem Controller zuerst die Ansicht zurück und verarbeiten dann das Formular, das überhaupt nicht funktionieren wird. Sie müssen zuerst das Formular verarbeiten und dann die Ansicht zurückgeben.

public function admin(){
    // Won't work as you are already returning the view
    // before processing the admin form.
    return \View::make(students.admin);
    // ...
}

Wie @ Sulthan vorgeschlagen hat, sollten Sie Form Facade. Sie können dieses Video auf Laracasts darüber, was Form Facade ist und wie du es benutzen solltest.

7
Saiyan Prince

Sie verwenden die Methode post im Formular, haben jedoch die Methode get in den Routen.

Ändern Sie die Methode in Ihren Routen in post

Hinweis:

Ich empfehle Ihnen, die Standard-Formularöffnung von Laravel wie unten angegeben zu verwenden, was immer die beste Vorgehensweise ist

{!! Form::open(array('url' => 'foo/bar')) !!}

{!! Form::close() !!}

Tipps:

Lesen Sie hier mehr daz und versuchen Sie, solche Dinge zu debuggen, indem Sie die Methoden und Routen vergleichen.

Form Fassade ist standardmäßig nicht in laravel 5 enthalten. Sie müssen es bis zum installieren

composer require "illuminate/html":"5.0.*"

und Aktualisierung in der app.php.

Ich habe ein Blog geschrieben, das einen kurzen Überblick über diese Installation gibt.

5

In Routes web.php ist Ihr Code

Route::get('/admin',array('uses'=>'[email protected]')); 

was falsch ist. Das tatsächliche Senden von Daten in POST Methode sein Array von Daten, so dass Sie durch Post routen müssen, anstatt zu erhalten. So ist der richtige Code

Route::post('/admin',array('uses'=>'[email protected]'));

Folgen Sie diesem Tutorial von Laracast, es könnte hilfreich sein,
https://laracasts.com/series/laravel-from-scratch-2017/episodes/16

2
Vrushal Raut

Ersetzen Sie in routes.phpRoute::get Durch Route::post.

1
daidongsheng

Sie haben keine Post-Route für Ihre Formulardaten-Buchung. Verwenden Sie die Routen-Match-Funktion für beide http-Verbs (get & post). benutze das

Route :: match (['get', 'post'], '/ admin', 'student @ admin');

Auch müssen Sie Ihre Admin-Methode ändern,

public function admin(Request $request){
    if($request->isMethod('get')){
        return \View::make('student.admin');
    } else {
    // your validation logic
    }
}
0
Nehal Hasnayeen