Προσπαθώ να βάλω σε λειτουργία κάτι πολύ βασικό. Είμαι συνηθισμένος στο CI και τώρα μαθαίνω το Laravel 4 και τα έγγραφά τους δεν το κάνουν εύκολο! Τέλος πάντων, προσπαθώ να δημιουργήσω μια φόρμα σύνδεσης και απλά να βεβαιωθώ ότι τα δεδομένα έχουν αναρτηθεί με επιτυχία, εκτυπώνοντάς τα στην επόμενη φόρμα. Λαμβάνω αυτή την εξαίρεση:
Symfony \ Component \ HttpKernel \ Exception \
MethodNotAllowedHttpException
και το MemberController.php μου:
public function index()
{
if (Session::has('userToken'))
{
/*Retrieve data of user from DB using token & Load view*/
return View::make('members/profile');
}else{
return View::make('members/login');
}
}
public function validateCredentials()
{
if(Input::post())
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}else{
return View::make('members/login');
}
}
και οι διαδρομές έχουν:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
και τέλος η προβολή μου login.php έχει αυτή την κατεύθυνση της φόρμας:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Οποιαδήποτε βοήθεια θα εκτιμηθεί ιδιαίτερα.
Λαμβάνετε αυτό το σφάλμα επειδή αποστέλλετε σε μια διαδρομή GET
.
Θα χώριζα τη δρομολόγησή σας για την validate
σε ξεχωριστές διαδρομές GET
και POST
.
Νέες διαδρομές: ``php Route::post('validate', 'MemberController@validateCredentials'),
Route::get('validate', function () { return View::make('members/login'), });
Τότε η μέθοδος του ελεγκτή σας θα μπορούσε απλά να είναι
``php
public function validateCredentials()
{
$email = Input::post('email'),
$password = Input::post('password'),
return "Email: " . $email . " and Password: " . $password,
}
Η υποψία μου είναι ότι το πρόβλημα έγκειται στον ορισμό της διαδρομής σας.
Ορίσατε τη διαδρομή ως αίτηση GET
, αλλά η φόρμα πιθανώς στέλνει αίτηση POST
. Αλλάξτε τον ορισμό της διαδρομής σας.
Route::post('/validate', 'MemberController@validateCredentials'),
Είναι'γενικά καλύτερη πρακτική να χρησιμοποιείτε ονομαστικές διαδρομές (βοηθά στην κλιμάκωση αν αλλάξει η μέθοδος/κλάση του ελεγκτή).
Route::post('/validate', array(
'as' => 'validate',
'uses' => 'MemberController@validateCredentials',
));
Στη φόρμα χρησιμοποιήστε τα εξής
<?php echo Form::open(array('route' => 'validate'))); ?>,
<?php echo Form::open(array('action' => 'MemberController@validateCredentials'))); ?>,
από προεπιλογή, η Form::open()
υποθέτει μια μέθοδο POST
.
έχετε GET
στις διαδρομές σας. αλλάξτε την σε POST
στην αντίστοιχη διαδρομή.
ή αν θέλετε να χρησιμοποιήσετε τη μέθοδο GET
, τότε προσθέστε την παράμετρο method
.
π.χ.
Form::open(array('url' => 'foo/bar', 'method' => 'get'))