vaj_bor
6 سال پیش توسط vaj_bor مطرح شد
11 پاسخ

خطای MethodNotAllowedHttpException

با سلام و احترام
من در قسمت comment ها قبلا به راحتی کامنت را ثبت می کردم ولی الان که سایت تمام شده و دارم تست می کنم متاسفانه با پیغام بالا روبرو می شم .خودم فکرمی کنم بعد از دوزبانه کردن سایت این مشکل ایجاد شده ولی نمی تونم رفعش کنم. همه جاهم نوشته مربوط به متد post است ولی من چون قبلا می تونستم به راحتی نظرات را ثبت کنم و تغییری در این قسمت ندادم ، نمی دونم به چی ربط داره. لطفا راهنمایی فرمایید.


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
2

سلام این ارور کاملا برای یک لاراول کار روشنه
این ارور به معنیه اینکه شما این روت رو دارید اما ممکنه به شکل post درخواست داده باشید زمانی که روت تعریف شده بشکل get هست
پس این مورد رو در پروژه چک کنید


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 6 سال پیش مطرح شد
2

سلام
@vajihebromand

کد مربوط به روت و مربوط به فرمتون رو قرار بدید تا راهنمایی بشه


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
2

به نوع Route هایی که تعریف کردید، دقت کنید. تداخل Route های GET و POST میتونه باعث این خطا بشه


vaj_bor
@vajihebromand 6 سال پیش مطرح شد
1

با سلام و احترام
من فقط یک روت از جنس post در route.php دارم به شرح زیر

Route::post('/comment' , 'HomeController@comment');

وفرم comment.blade.php به شرح زیر است

<!-- Comments Form -->
@if(auth()->check())
    <div class="well">
        <h4>ثبت نظر :</h4>
        @include('Home.layouts.errors')
        <form role="form" action="/comment" method="post">
            {{ csrf_field() }}
            <input type="hidden" name="parent_id" value="0">
            <input type="hidden" name="commentable_id" value="{{ $subject->id }}">
            <input type="hidden" name="commentable_type" value="{{ get_class($subject) }}">
            <div class="form-group">
                <textarea name="comment" class="form-control" rows="3"></textarea>
            </div>
            <button type="submit" class="btn btn-primary">ارسال</button>
        </form>
    </div>
@else
    <div class="alert alert-danger">شما برای ارسال نظر باید وارد سایت شوید</div>
@endif

<hr>

<!-- Posted Comments -->

@foreach($comments as $comment)
    <div class="media">
        <a class="pull-right" href="#">
            <img class="media-object" src="http://placehold.it/64x64" alt="">
        </a>
        <div class="media-body">
            <h4 class="media-heading">{{ $comment->user->name }}
                <small>{{ jdate($comment->created_at)->ago() }}</small>
                <button class="pull-left btn btn-xs btn-success" data-toggle="modal" data-target="#sendCommentModal" data-parent="{{ $comment->id }}">پاسخ</button>
            </h4>
            {!! $comment->comment !!}
            <!-- Nested Comment -->
            @if(count($comment->comments))
                @foreach($comment->comments as $childComment)
                    <div class="media">
                        <a class="pull-right" href="#">
                            <img class="media-object" src="http://placehold.it/64x64" alt="">
                        </a>
                        <div class="media-body">
                            <h4 class="media-heading">{{ $childComment->user->name }}
                                <small>{{ jdate($childComment->created_at)->ago() }}</small>
                            </h4>
                            {!! $childComment->comment !!}
                        </div>
                    </div>
                @endforeach
            @endif
            <!-- End Nested Comment -->
        </div>
    </div>
@endforeach
<!-- Comment -->

<div class="modal fade" id="sendCommentModal" tabindex="-1" role="dialog" aria-labelledby="sendCommentModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="exampleModalLabel">ارسال پاسخ</h4>
            </div>
            <div class="modal-body">
                <form action="/comment" method="post">
                    {{ csrf_field() }}

                    <input type="hidden" name="parent_id" value="0">
                    <input type="hidden" name="commentable_id" value="{{ $subject->id }}">
                    <input type="hidden" name="commentable_type" value="{{ get_class($subject) }}">

                    <div class="form-group">
                        <label for="message-text" class="control-label">متن پاسخ:</label>
                        <textarea class="form-control" id="message-text" name="comment"></textarea>
                    </div>
                    <div class="modal-footer">
                        <button type="submit" class="btn btn-primary">ارسال</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">انصراف</button>
                    </div>
                </form>
            </div>

        </div>
    </div>
</div>

وکد مربوط به کلید ثبت نظر در کنترلر home controller به شرح زیر است

        public function comment()
    {
        $this->validate(request(),[
            'comment' => 'required|min:5'
        ]);
    //    return dd('test');
//        Comment::create(array_merge([
//            'user_id' => auth()->user()->id
//        ], \request()->all()));

        auth()->user()->comments()->create(request()->all());
        //return redirect(route('articles.index'))
               return back();
    }

, و در مدل comment داریم

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    protected $fillable = [
        'user_id',
        'parent_id',
        'comment',
        'approved',
        'commentable_id',
        'commentable_type'
    ];
    /**
     * Get all of the owning commentable models.
     */
    public function commentable()
    {
        return $this->morphTo();
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function comments()
    {
        return $this->hasMany(Comment::class , 'parent_id' , 'id');
    }

    public function setCommentAttribute($value)
    {
        $this->attributes['comment'] = str_replace(PHP_EOL , "<br>" , $value);
    }
}

ممنون از پاسخ شما


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
0

از چه نسخه‌ی لاراول استفاده می‌کنید؟


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 6 سال پیش آپدیت شد
1

سلام
@vajihebromand

حس میکنم توی کنترلر یه ایرادی هست

public function comment(Request $request)
    {

        $this->validate($request, [
           'comment' => 'required|min:5'
        ], [
            'comment.required' => 'نظر را وارد نمایید'
        ]);
}

این مورد رو چک کنید
توی قسمت namespace ها هم چک کنید این مورد یوز شده باشه

use Illuminate\Http\Request;

اگر بازم ارور داشتید
خط به خط dd() بگیرید ، بالاخره معلوم میشه مشکل از کجاست .


vaj_bor
@vajihebromand 6 سال پیش مطرح شد
1

متاسفانه اصلا خروجی ddرا در کدها اصلا خروجی نشان نمی دهد


vaj_bor
@vajihebromand 6 سال پیش مطرح شد
1

Laravel Framework 5.4.23
با تشکر


vaj_bor
@vajihebromand 6 سال پیش مطرح شد
1

خودم فکر می کنم از وقتی دو زبانه کردم ارور می ده.کدcomment\ را به /{{app()->getLocale()}}/comment تغییر دادم ولی جواب نداد
.فکر کنم return back() را شاید باید redirect کنم ولی نمی دونم به چه صفحه ای rediect کنم


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 6 سال پیش مطرح شد
1

سلام
@vajihebromand

از کنترلر برید جلو
توی کنترلر خروجی هارو خط به خط دیباگ کنید
dd() بگیرید از اول
ببینید کجا ها بهتون خروجی نمیده و ارورش چی هست
از همونجا دیباگ کنید


vaj_bor
@vajihebromand 6 سال پیش مطرح شد
1

با سلام و احترام
با حذف قابلیت دو زبانه فعلا مشکلم حل شد.
ممنون از همراهیتون


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام