2015-07-05 6 views
8

Ho un certo numero di file php nel mio progetto:laravel 5 MethodNotAllowedHttpException in RouteCollection.php linea 201:

admin.blade.php: questo file contiene il modulo di amministrazione.

Quando definiva visualizza errore seguente:

MethodNotAllowedHttpException in RouteCollection.php line 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> 

In route.php, questa chiamata è costituito:

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

Questa è la funzione 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.'); 
    } 
} 

Non so molto sulla creazione di un'area di amministrazione, sto solo cercando di crearlo.

+4

Stai usando 'metodo posto d'sotto forma ma avendo' metodo GET' negli itinerari! –

+0

devo chnge ottenere nella mia forma ?? –

+0

Modificare i percorsi e vedere cosa succede;) –

risposta

5

Questo è come lo faccio.

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'); 
} 

Il tuo Codice:

In routes.php, hai solo 1 percorso, vale a dire,

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

e non v'è alcuna dichiarazione di post metodo, quindi, il MethodNotAllowedHttpException

Inoltre il controller, si restituisce la vista prima e quindi elaborando il modulo che non funzionerà affatto. È necessario prima elaborare il modulo e quindi restituire la vista.

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

Come @Sulthan ha suggerito, è necessario utilizzare Form Facade. Puoi controllare this video su Laracasts su cosa è Form Facade e come dovresti usarlo.

+0

ho visto questo esempio su internet .. grazie ancora –

+0

ok grazie amico per avermi chiarito sulla dichiarazione di ritorno –

4

Stai utilizzando il metodo post nel modulo ma hai il metodo get nei percorsi.

Quindi, cambiare il metodo per post nei vostri percorsi

Nota:

vi consiglio di fare uso del modulo predefinito apertura del laravel come di seguito indicato, che è sempre la migliore prassi

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

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

Punte:

Read more on here e provare a eseguire il debug di queste cose confrontando i metodi e le rotte.

La facciata modulo non è inclusa in laravel 5 per impostazione predefinita. Devi installarlo per

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

e aggiornare nell'app.php.

Ho scritto un blog che fornisce un breif su questa installazione.

+3

La facciata del modulo non è inclusa nel default di laravel 5, devi installare il pacchetto laravelcollective –

+0

@NehalHasnayeen Grazie per avermi ricordato lo aggiornerò nella risposta :) –

+0

ho la facciata della forma .. l'ho già aggiornato –

0

Non si dispone di un percorso postale per la registrazione dei dati del modulo, utilizzare la funzione di corrispondenza del percorso per entrambi i verbi http (ottenere il post &). usa questo

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

Inoltre è necessario modificare il metodo di amministrazione,

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

grazie .. utilizzando la corrispondenza .. errore andato .. ma sta tornando alla pagina di accesso amministratore dopo l'invio il pulsante invece di andare a visualizzare la pagina ... cosa dovrei fare di questo –

+0

perché stai restituendo la vista di accesso alla 1a riga nel metodo admin, dovresti usare 2 metodi diversi o usare la condizione per controllare il tipo di richiesta, e quindi elaborare it –

+0

voglio dire che deve andare alla home page ... bt non sta andando lì –

1

In routes.php, sostituire Route::get per Route::post.