লারাভেল নিক্ষেপ পদ্ধতি


110

আমি খুব বেসিক চলমান কিছু পেতে চেষ্টা করছি। আমি সিআইতে অভ্যস্ত এবং এখন লারাভেল 4 শিখছি, এবং তাদের ডক্সটি সহজ করে তুলছে না! যাইহোক, আমি একটি লগইন ফর্ম তৈরি করার চেষ্টা করছি এবং কেবলমাত্র পরবর্তী ফর্মটিতে মুদ্রণ করে ডেটা সফলভাবে পোস্ট করা হয়েছে তা নিশ্চিত করে নিচ্ছি। আমি এই ব্যতিক্রম পাচ্ছি:

সিমফনি \ উপাদান \ এইচটিটিপি কার্নেল \ ব্যতিক্রম \ মেথডনট অ্যালাউড এইচটিটিপি এক্সসেপশন

এবং আমার সদস্য নিয়ন্ত্রক। পিএফপি:

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

এবং অবশেষে আমার দর্শন লগইন.এফপি এই ফর্ম দিকনির্দেশনা আছে:

<?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
লারাভেলে আপনি {{ method_field('PATCH') }}আপনার টেম্পলেটটিতে ব্যবহার করতে পারেন ।
মাইকেল ইউসারি

13

কারণ আপনি একটি গেট পদ্ধতির মাধ্যমে ডেটা পোস্ট করছেন।

পরিবর্তে

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

এটা চেষ্টা কর

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

এটি সঠিক, ব্যবহারকারী যদি না চলে যাচ্ছেন তবে কোনও মডারেটর কী এটি সঠিক উত্তর দিতে পারে? এটি নিচে তৃতীয় উত্তর এবং এটি কেবলমাত্র সঠিক।
লোগো_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::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যথাক্রমে।


এটি আমারই সমস্যা ছিল এবং এই উত্তরটি সমাধান হিসাবে প্রমাণিত হয়েছিল। আপনাকে ধন্যবাদ
ওলুয়াটোবি স্যামুয়েল ওমিসাকিন


2

আমার সমস্যাটি ছিল না যে আমার রুটগুলি ভুলভাবে সেট আপ করা হয়েছিল, তবে আমি ভুল Formপদ্ধতিটি উল্লেখ করছি (যা আমি অন্য কোনও ফর্ম থেকে অনুলিপি করেছি)। আমি করছিলাম...

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

(কোনও মডেল নির্দিষ্ট করে নেই)। তবে আমার নিয়মিত openপদ্ধতিটি ব্যবহার করা উচিত ছিল ...

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

যেহেতু প্রথম প্যারামিটারটি modelআসল মডেলটি প্রত্যাশা করে, এটি আমার নির্দিষ্ট বিকল্পগুলির দ্বারা কোনওটি পাচ্ছে না। আশা করি এর সাহায্যে যারা জানেন যে তাদের রুটগুলি সঠিক, তবে অন্য কিছু ভুল am


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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.