Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.4方法不允许HttpException_Php_Laravel_Laravel 5 - Fatal编程技术网

Php Laravel 5.4方法不允许HttpException

Php Laravel 5.4方法不允许HttpException,php,laravel,laravel-5,Php,Laravel,Laravel 5,有两个变量的路由问题。 我有一张表格要删除一个项目 <form action="/admin/room/{{$room->id}}/image/{{$img->id}}/"> {{method_field('DELETE')}} {{csrf_field()}} <input class="btn btn-danger" type="submit" value="Delet

有两个变量的路由问题。 我有一张表格要删除一个项目

<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/">
    {{method_field('DELETE')}}
    {{csrf_field()}}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>
还有我的RoomImagesController课

class RoomImagesController extends Controller
{
    /*Other Methods*/
    public function destroy(Room $room, RoomImage $image)
    {
        dd($room, $image);
    }
}
我发送到的URL是:

http://domain.name/admin/room/1/image/1?_method=DELETE&_token=/*令牌值*/

不知道为什么我在这里有问题!如果有人能透露一些情况,我会很感激的。如果你需要更多的信息,请告诉我


编辑 我在表单中添加了method=“post”,但出现了相同的错误。这是网页上的原始粘贴

<form method="post" action="/admin/room/1/image/4/">
    <input name="_method" value="DELETE" type="hidden">
    <input name="_token" value="lFrYPuzz8pY4EEJZEKCtZgjGM4dkk6uTD3p0jhpK" type="hidden">
    <input class="btn btn-danger" value="Delete" type="submit">
</form>


编辑2 命名路由似乎是一个解决方案

//web.php
Route::post('room/{room}/image/{image}','RoomImagesContoller@delete')
    ->name('admin.deleteRoomImages');

//x.blade.php
<form action="{{ route('admin.deleteRoomImages', [ 
                        'room'  => $room->id, 
                        'image' => $img->id ]) }}/"
      method="POST">
    {{ method_field('DELETE') }}
    {{ csrf_field() }}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>
//web.php
路由::post('room/{room}/image/{image}','RoomImagesContoller@delete')
->名称('admin.deleteRoomImages');
//x、 blade.php
{{method_field('DELETE')}
{{csrf_field()}}
但我仍然得到了方法不允许的错误

当我运行
php artisan route:list
时,我发现我得到了一个ReflectionError“RoomImagesController不存在” 我会进一步调查的

method=“post”
作为属性添加到表单中。像这样:

<form action="/admin/room/{{$room->id}}/image/{{$img->id}}" method="post">


如果未提供
方法
属性,则默认情况下通过
GET
提交表单
DELETE
方法要求通过
POST

提交数据。请在表单上设置要发布的方法属性 你有吗

<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/" method="POST">
    {{method_field('DELETE')}}
    {{csrf_field()}}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>

{{method_field('DELETE')}
{{csrf_field()}}

您可以通过传递
method=“POST”
并在表单标记内添加delete-method-hidden字段,通过
POST
方法执行此操作

<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/" method="post">
    {{method_field('DELETE')}}
    {{csrf_field()}}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>

{{method_field('DELETE')}
{{csrf_field()}}
您可以使用

并在表单中使用helper方法

<form action="{{ route('deleteRoomImages', [ 
                'room'  => $room->id, 
                'image' => $img->id ]) }}/" method="POST">
    {{ method_field('DELETE') }}
    {{ csrf_field() }}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>

{{method_field('DELETE')}
{{csrf_field()}}

运行
composer dump autoload
以清除ReflectionException。 如果复制并修改了类文件,请验证该类的名称是否为
RoomImagesController
,然后运行
composer dump autoload

祝你好运

发生这种情况是因为您向错误的url发出了请求

它必须是
action=“/admin/room/{{{$room->id}}}/image/{{{$img->id}}”
而不是
action=“/admin/room/{{$room->id}}}/image/{{$img->id}/”

为什么会发生这种情况您请求
action=“/admin/room/1/image/4/”
将显示的移动到
action=“/admin/room/1/image/4”
并且您丢失了方法字段,该字段是
删除
,这就是为什么您会遇到错误尝试使用下面的示例,它会正常工作

<form action="/admin/room/{{$room->id}}/image/{{$img->id}}" method="post">
    {{method_field('DELETE')}}
    {{csrf_field()}}
    <input class="btn btn-danger" type="submit" value="Delete">
</form> 

{{method_field('DELETE')}
{{csrf_field()}}

您确定您得到了
http://domain.name/admin/room/1/image/1?_method=DELETE&_token=/*tokenValue*/
url?这里有一个粘贴(不包括域)
/admin/room/1/image/4?\u method=DELETE&\u token=lfrypuzz8py4eejzekctzgjgm4dkkk6utd3p0jhpk
尝试将
{method_字段('DELETE')}
更改为
{method字段('DELETE'))}
Ashish,我这样做了
,没有任何更改。请尝试
action=“/admin/room/{{{$room->id}}}/image/{{{$img->id}”
remove last
slash
@不必要的金钱尝试使用
php-artisan-route:clear
清除缓存的路由。您可能也想使用
php-artisan-view:clear
清除缓存的视图。如果这不起作用,那么您可以创建一个简单的路由,只需返回一个字符串即可进行逐步调试。我认为添加正确的方法应该没有问题。我认为这可能是正确的,因为后面的slashAjay,谢谢。这就是原因。我想我已经这样做了,我遵循了答案,其中包含尾随的/。我最好注意我简历上的细节。如果请求被重定向到移动页面,我真的不明白该怎么办。你能进一步解释一下吗?我只想留个条子,我认为不加评论的投票应该修改。此外,@KunsalAjay您可以修改您的答案,以反映OP遇到的问题之一(即,您获得此类答案的原因),并且下次可能会对您给出答案的原因进行一点描述,以使其看起来完整,避免被否决。
<form action="{{ route('deleteRoomImages', [ 
                'room'  => $room->id, 
                'image' => $img->id ]) }}/" method="POST">
    {{ method_field('DELETE') }}
    {{ csrf_field() }}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}" method="post">
    {{method_field('DELETE')}}
    {{csrf_field()}}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>