लार्वा फेंकने का तरीकाNotAllowedHttpException


110

मैं कुछ बहुत ही मूल चलाने की कोशिश कर रहा हूं। मैं CI के लिए उपयोग किया जाता हूं और अब लारवेल 4 सीख रहा हूं, और उनके डॉक्स इसे आसान नहीं बना रहे हैं! वैसे भी, मैं एक लॉगिन फ़ॉर्म बनाने की कोशिश कर रहा हूं और यह सुनिश्चित करना चाहता हूं कि डेटा अगले रूप में मुद्रित करके सफलतापूर्वक पोस्ट किया गया हो। मुझे यह अपवाद मिल रहा है:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

और मेरा मेंबर कंट्रोलर: एफपी:

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

किसी भी प्रकार की सहायता सराहनीय होगी।


जिसमें urlआपको त्रुटि मिल रही है?
देवो

क्या आपने कोशिश की है php artisan dump-autoload?
आंद्रेइको

पुरानी पोस्ट लेकिन लोग अभी भी इस पर ठोकर खाते हैं - "संगीतकार डंप-ऑटोलॉड" की कोशिश करें। मेरे लिए काम किया।
किर्गी

@Andreyco इस आदेश को परिभाषित नहीं किया गया है।
मार्सेलो एविमोवेल

जवाबों:


198

आपको वह त्रुटि मिल रही है क्योंकि आप एक GETमार्ग पर पोस्ट कर रहे हैं ।

मैं आपकी रूटिंग validateको एक अलग GETऔर POSTमार्गों में विभाजित करूंगा ।

नए मार्ग:

Route::post('validate', 'MemberController@validateCredentials');

Route::get('validate', function () {
    return View::make('members/login');
});

तब आपका कंट्रोलर मेथड बस हो सकता है

public function validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}

25

मेरा संदेह यह है कि समस्या आपकी रूट परिभाषा में निहित है।

आपने मार्ग को GETअनुरोध के रूप में परिभाषित किया है, लेकिन फ़ॉर्म संभवतः POSTअनुरोध भेज रहा है । अपनी रूट परिभाषा बदलें।

Route::post('/validate', 'MemberController@validateCredentials');

नामित मार्गों का उपयोग करने के लिए आमतौर पर बेहतर अभ्यास होता है (यदि नियंत्रक विधि / वर्ग में परिवर्तन होता है तो पैमाने पर मदद करता है)।

Route::post('/validate', array(
    'as' => 'validate',
    'uses' => 'MemberController@validateCredentials'
));

प्रपत्र में निम्नलिखित का उपयोग करें

<?php echo Form::open(array('route' => 'validate')); ?>

23

समस्या यह है कि आप उपयोग कर रहे हैं, POSTलेकिन वास्तव में आपको PATCH इस ऐड को ठीक करने के लिए प्रदर्शन करना होगा

<input name="_method" type="hidden" value="PATCH">

Form::modelलाइन के ठीक बाद


1
Laravel में आप {{ method_field('PATCH') }}अपने टेम्पलेट में उपयोग कर सकते हैं ।
माइकल युसरी 18

13

ऐसा इसलिए है क्योंकि आप डेटा प्राप्त कर रहे हैं।

के बजाय

Route::get('/validate', 'MemberController@validateCredentials');

इसे इस्तेमाल करे

Route::post('/validate', 'MemberController@validateCredentials');

यह सही है, अगर कोई उपयोगकर्ता नहीं जा रहा है, तो क्या यह सही उत्तर दे सकता है? यह नीचे 3 जवाब है और यह केवल एक ही सही है।
लोगोस_164

12

मैं भी इस समस्या का सामना करना पड़ा और अन्य उत्तर यहाँ मददगार थे, लेकिन मैं एक का उपयोग कर रहा Route::resourceहै जो का ख्याल रखता है GET, POSTऔर अन्य अनुरोधों,।

मेरे मामले में मैंने अपना रास्ता छोड़ दिया है:

Route::resource('file', 'FilesController');

और मेरे में storeफ़ंक्शन को सबमिट करने के लिए बस मेरे फॉर्म को संशोधित कियाFilesController

{{ Form::open(array('route' => 'file.store')) }}

इस मुद्दे को तय किया, और मैंने सोचा कि यह एक अलग जवाब के रूप में इंगित करने के लायक था क्योंकि विभिन्न अन्य उत्तर एक नया POSTमार्ग जोड़ने का सुझाव देते हैं । यह एक विकल्प है, लेकिन यह आवश्यक नहीं है।


9

आमतौर पर MethodNotAllowedHttpExceptionजब होता है

मार्ग विधि मेल नहीं खाती।

मान लें कि आप POSTअनुरोध मार्ग फ़ाइल को परिभाषित करते हैं, लेकिन आप मार्ग को अनुरोध भेज रहे GETहैं।


7
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

डिफ़ॉल्ट रूप से, Form::open()एक POSTविधि मानता है ।

आप GETअपने मार्गों में हैं। इसे POSTसंबंधित मार्ग में बदलें ।

या यदि आप GETविधि का उपयोग करना चाहते हैं , तो methodपरम जोड़ें ।

जैसे

Form::open(array('url' => 'foo/bar', 'method' => 'get'))

4

मुझे त्रुटि का सामना करना पड़ा,
समस्या FORM METHOD थी

{{ Form::open(array('url' => 'admin/doctor/edit/'.$doctor->doctor_id,'class'=>'form-horizontal form-bordered form-row-stripped','method' => 'PUT','files'=>true)) }}

यह इस तरह होना चाहिए

{{ Form::open(array('url' => 'admin/doctor/edit/'.$doctor->doctor_id,'class'=>'form-horizontal form-bordered form-row-stripped','method' => 'POST','files'=>true)) }}

4

मेरे मामले में, मैं एक सर्वर POSTपर एक अनुरोध भेज रहा था HTTPजहां मैंने Nginxपोर्ट के सभी अनुरोधों को पोर्ट 80करने के लिए सेट किया 443था जहां मैं ऐप पर काम कर रहा थाHTTPS

सही पोर्ट के लिए अनुरोध करना सीधे समस्या को तय करता है। मेरे मामले में, मुझे केवल इतना करना था कि मैं http://अनुरोध URL में प्रतिस्थापित कर दूं https://क्योंकि मैं डिफ़ॉल्ट पोर्ट 80और 443क्रमशः उपयोग कर रहा था ।


यही वह समस्या थी जिसका मुझे सामना करना पड़ा और यह जवाब समाधान साबित हुआ। धन्यवाद
Oluwatobi शमूएल Omisakin


2

मेरी समस्या यह नहीं थी कि मेरे मार्गों को गलत तरीके से स्थापित किया गया था, लेकिन यह कि मैं गलत Formतरीके का उल्लेख कर रहा था (जिसे मैंने एक अलग रूप से कॉपी किया था)। मैं कर रहा था...

{!! Form::model([ ... ]) !!}

(कोई मॉडल निर्दिष्ट नहीं है)। लेकिन मुझे नियमित openविधि का उपयोग करना चाहिए था ...

{!! Form::open([ ... ]) !!}

क्योंकि modelवास्तविक मॉडल की अपेक्षा करने के लिए पहला पैरामीटर , यह मेरे किसी भी विकल्प को नहीं मिल रहा था जिसे मैं निर्दिष्ट कर रहा था। आशा है कि यह किसी ऐसे व्यक्ति की मदद करता है जो जानता है कि उनके मार्ग सही हैं, लेकिन कुछ और है।


2

मेरे पास भी एक ही त्रुटि थी, लेकिन मेरे पास एक अलग फिक्स था, मेरे XYZ.blade.phpपास था:

{!! Form::open(array('ul' => 'services.store')) !!}

जिसने मुझे त्रुटि दी, - मुझे अभी भी नहीं पता कि क्यों- लेकिन जब मैंने इसे बदल दिया

{!! Form::open(array('route' => 'services.store')) !!}

इसने काम कर दिया!

मुझे लगा कि यह साझा करने लायक है :)


0

लारवेल कभी-कभी {!! Form::open(['url' => 'posts/store']) !!}सुरक्षा कारणों से समर्थन नहीं करता है। इसलिए त्रुटि हुई है। आप नीचे दिए गए कोड को बदलकर इस त्रुटि को हल कर सकते हैं

{!! Form::open(array('route' => 'posts.store')) !!}




त्रुटि कोड {!! Form::open(['url' => 'posts/store']) !!}

सही कोड{!! Form::open(array('route' => 'posts.store')) !!}


0

मेरे मामले में, यह इसलिए था क्योंकि मेरा फॉर्म एक अलग मिडलवेयर वाले रूट पर भेज रहा था। इसलिए इस विशिष्ट मार्ग पर सूचना भेजने से रोक दिया गया।


0

अच्छी तरह से जब मैं इन समस्या थी मैं 2 कोड त्रुटियों का सामना करना पड़ा

{!! Form::model(['method' => 'POST','route' => ['message.store']]) !!}

मैंने ऐसा करके इसे सही किया

{!! Form::open(['method' => 'POST','route' => 'message.store']) !!}

इसलिए बस को निकालने के लिए मैंने फॉर्म modelको बदल दिया openऔर उस मार्ग को भी जहां गलत तरीके से वर्ग ब्रेसिज़ में रखा गया था।


-1
// not done
Route::post('`/posts/{id}`', 'PostsController@store')->name('posts.store');

return redirect('`/posts'`)->with('status','Post was created !');

// done
Route::post('`/posts`', 'PostsController@store')->name('posts.store');

return redirect('`/posts'`)->with('status','Post was created !');

क्या आप इस कोड को क्या कर रहे हैं और यह समस्या को हल कैसे करता है, इसके बारे में थोड़ा बता सकते हैं?
newUserName02
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.