2017-07-14 4 views
1

J'ai un formulaire pour créer un utilisateur qui contient des entrées de courrier électronique, de nom et de mot de passe. Le formulaire a également 5 entrées (addr1-5) pour l'adresse des utilisateurs.Weird 405 Méthode non autorisée dans Laravel

La soumission du formulaire sans les champs d'adresse renseignés fonctionne correctement et crée l'utilisateur. Toutefois, si vous remplissez les champs d'adresse, il affiche une réponse 405 Method Not Allowed.

Route:

Route::group(['prefix' => '/users'], function() { 
    Route::post('/create', [ 
     'uses' => '[email protected]', 
     'as' => 'api_create_user', 
    ]); 
}); 

Forme:

<form action="{{ route('api_create_user') }}" method="POST"> 
    ... 
    <input type="text" name="addr1"> 
    <input type="text" name="addr2"> 
    <input type="text" name="addr3"> 
    <input type="text" name="addr4"> 
    <input type="text" name="addr5"> 
    ... 
</form> 

Controller:

class UserController extends Controller { 
    ... 
    public function create (RegisterRequest $request) { 
     ... 
     $address = [ 
      'addr1' => $request->input('addr1') ?? '', 
      'addr2' => $request->input('addr2') ?? '', 
      'addr3' => $request->input('addr3') ?? '', 
      'addr4' => $request->input('addr4') ?? '', 
      'addr5' => $request->input('addr5') ?? '', 
     ]; 

     $address = (object)array_filter($address); 

    $user->address = $address; 

     ... 
    } 
} 

RegisterRequest:

class RegisterRequest extends FormRequest { 
    ... 
    public function rules() : array { 
     return array(
     ... 
     'addr1' => 'nullable|string', 
     'addr2' => 'nullable|string', 
     'addr3' => 'nullable|string', 
     'addr4' => 'nullable|string', 
     'addr5' => 'nullable|string', 
     ... 
    ); 
    } 
    ... 
} 

Je ne peux vraiment pas comprendre quel est le problème. Ce n'est évidemment pas la syntaxe J'important définitivement les bonnes classes, etc.

Des idées?

Merci!

+1

Pouvez-vous poster la sortie de route artisan 'php: list'? – ceejayoz

+0

À l'aide de l'onglet 'Réseau' de votre navigateur, vérifiez sur quelle route il est POST; peut-être que c'est en train de faire quelque chose d'inattendu, ou d'effectuer une redirection quelque part qu'elle ne devrait pas l'être. –

+0

Juste un FYI, Vous pouvez spécifier la valeur par défaut en tant que 2nd param lors de l'utilisation de 'input()', donc '$ request-> input ('add1') ?? '' 'serait' $ request-> input ('add1', '') '. De plus, puisque vous allez simplement filtrer les résultats de toute façon, vous pouvez juste faire $ address = (object) array_filter ($ request-> seulement ('addr1', 'addr2', 'addr3', 'addr4', 'addr5 ')); ' –

Répondre