当前位置: 首页 > 知识库问答 >
问题:

Laravel删除不工作

权浩邈
2023-03-14

正如标题所示,我无法使用delete()选项。我在网上发了很多帖子,但都找不到正确的答案。我正在Homestead上使用Laravel5.5(一周前安装,最新版本左右)。

让我给你一些代码,我真的希望有人能帮助我。

这让我头痛,奥氮平快用完了。请告诉我我做错了什么,如果遗漏了什么,请告诉我!

    protected function methodNotAllowed(array $others)
{
    throw new MethodNotAllowedHttpException($others);
}

这是我的控制器:

    <?php

namespace App\Http\Controllers\Admin;

use Auth;
use App\Page;
use App\Http\Requests\WorkWithPage;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PagesController extends Controller
{
    public function __construct() {
        $this->middleware('admin');
        $this->middleware('can:manageUsers,App\User');
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if (Auth::user()->isAdmin()) {
            $pages = Page::paginate(20);
        } else {
            $page = Auth::user()->pages()->paginate(5);
        }
        return view('admin.pages.index', ['pages' => $pages]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.pages.create')->with(['model' => new Page()]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(WorkWithPage $request)
    {
        Auth::user()->pages()->save(new Page($request->only([
            'title','url','content'])));

            return redirect()->route('pages.index')->with('status', 'Pagina succesvol aangemaakt');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function edit(Page $page)
    {
        if(Auth::user()->cant('update', $page)){
            return redirect()->route('pages.index')->with('status', 'Pagina succesvol aangepast');
        } 

        return view('admin.pages.edit', ['model' => $page]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function update(WorkWithPage $request, Page $page)
    {
        if(Auth::user()->cant('update', $page)){
            return redirect()->route('pages.index')->with('status', 'Dat mag jij niet');
        } 

        $page->fill($request->only([
            'title','url','content'
        ]));

        $page->save();

        return redirect()->route('pages.index')->with('status', 'Pagina succesvol aangepast');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function destroy(Page $page)
    {
        if(Auth::user()->cant('delete', $page)){
            return redirect()->route('pages.index')->with('status', 'Hey knul! Pssst! Wegwezen!');
        }

        $page->id->delete();

        return redirect()->route('pages.index')->with('status', 'Page has been deleted.');
    }
}

这是我的索引页(索引与后端的管理索引相同:

 @extends('layouts.app') @section('content')
<div class="container">
    @if (session('status'))
    <div class="alert alert-info">
        {{ session('status') }}
    </div>
    @endif
    <a href="{{ route('pages.create')}}" class="btn btn-primary">Nieuwe pagina</a>
    <br>
    <br>
    <table class="table">
        <thead>
            <tr>
                <th>Naam</th>
                <th>URL</th>
                <th>Opties</th>
            </tr>
        </thead>

        @foreach($pages as $page)
        <tr>
            <td>
                <a href="{{ route('pages.edit', ['page' => $page->id]) }}">{{ $page->title }}</a>
            </td>
            <td>{{ $page->url }}</td>
            <td class="text-right">
                <a href="{{ route('pages.destroy', ['page' => $page->id])}}" class="btn btn-danger delete-link" data-message="Are you sure you want to delete this page?"
                    data-form="delete-form">
                    Delete
                </a>
            </td>
        </tr>
        @endforeach
    </table>
    {{$pages->links()}}
</div>
<form id="delete-form" action="" methode="POST">
        {{method_field('DELETE')}} 
        {!! csrf_field() !!}
    </form>
@endsection

然后是路线:

   <?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/admin', function() {
    return view('admin.index');
})->middleware('admin');

Route::resource('/admin/pages', 'Admin\PagesController', ['except' => ['show']]);

Route::resource('/admin/blog', 'Admin\BlogController', ['except' => ['show']]);

Route::resource('/admin/users', 'Admin\UsersController', ['except' => ['create', 'store', '']]);

Route::get('/home', 'HomeController@index')->name('home');

然后政策:

    <?php

namespace App\Policies;

use App\User;
use App\Page;
use Illuminate\Auth\Access\HandlesAuthorization;

class PagePolicy
{
    use HandlesAuthorization;

    public function before($user, $ability) {
        if ($user->isAdmin()) {
            return true;
        }
    }
    /**
     * Determine whether the user can update the page.
     *
     * @param  \App\User  $user
     * @param  \App\Page  $page
     * @return mixed
     */
    public function update(User $user, Page $page)
    {
        return $user->id = $page->user_id;
    }

     /**
     * Determine whether the user can delete the page.
     *
     * @param  \App\User  $user
     * @param  \App\Page  $page
     * @return mixed
     */
    public function delete(User $user, Page $page)
    {
        return $user->id = $page->user_id;
    }
}

最后是中间件:

    <?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class AccessAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check() && Auth::user()->hasAnyRole(['Super Admin','Admin'])) {
            return $next($request);
        }

        return redirect('login');
    }
}

在我改变的观点中:

            @foreach($model as $post)
        <tr>
            <td>
                <a href="{{ route('blog.edit', ['post' => $post->id]) }}">{{ $post->title }}</a>
            </td>
            <td>{{ $post->user()->first()->name }}</td>
            <td>{{ $post->slug }}</td>
            <td class="text-right">
                <a href="{{ route('blog.destroy', ['blog' => $post->id])}}" class="btn btn-danger delete-link" data-message="Are you sure you want to delete this page?"
                    data-form="delete-form">
                    Delete
                </a>
            </td>
        </tr>
        @endforeach
    </table>
    {{$model->links()}}
</div>
<form id="delete-form" action="#" methode="POST">
        {{ method_field('DELETE') }}
        {!! csrf_field() !!}
</form>

致:

        @foreach($pages as $page)
    <tr>
        <td>
            <a href="{{ route('pages.edit', ['page' => $page->id]) }}">{{ $page->title }}</a>
        </td>
        <td>{{ $page->url }}</td>
        <td class="text-right">
            <form action="{{ route('pages.destroy', ['page' => $page->id]) }}" method="POST" class="btn btn-danger delete-link" >
                <input type="submit" value="delete"/>
                {{method_field('DELETE')}} 
                {!! csrf_field() !!}
            </form>
        </td>
    </tr>
    @endforeach
</table>
{{$pages->links()}}

共有1个答案

鄢博简
2023-03-14

不知道从哪里开始。。。首先,您收到的异常是因为您向url发送了错误的方法。(我从来没有这样做过)但可能你在等待帖子的时候发送GET(使用删除覆盖)。你把“methode”命名错了,应该是“method”。下一个不确定这是否已消失工作$page-

 类似资料:
  • 我有一个Laravel项目,我试图用Storage::delete删除图像,但它似乎不起作用。我的图像位于storage\app\public\uploads文件夹中。我可以上传和编辑图像,但删除不起作用。我使用的是Laravel 8。 产品控制器。PHP PHP 网状物PHP 配置/文件系统。PHP

  • 许多人认为,下面的htaccess可以从url中删除“public”。但我正在研究WAMP,但这不起作用: 重新启动发动机 这显示了来自Laravel框架的以下错误消息: 很抱歉,找不到您要查找的页面。1/1在RouteCollection中找不到HttpException。php第161行: 还有其他方法可以从url中删除“public”,但我想了解为什么这种方法在我这方面不起作用,因为人们在他

  • 我正在使用 netbeans 并从数据库生成实体类。我所有插入和更新实体的合并调用都运行良好,但是当我尝试删除实体时,它不会将其从数据库中删除,也不会引发异常。有人可以帮我解决。我的代码如下: AbstractFacade.java AccountEntity.java DealerEntity.java

  • 我正在使用DocuSign REST API来自动化文档签名。我使用sender视图允许我的客户在他们的文档上放置签名选项卡并最终发送它们。 然而,我遇到了一个问题,客户机,无论出于什么原因,需要在我们的工作流中重新开始,因此放弃了嵌入,没有保存它,也没有联系我们重新启动进程。 通常,我们会调用Update将信封标记为voided并创建一个新的信封,但由于客户端没有正确退出嵌入,因此信封仍然标记为

  • 我正在使用Laravel8开发我的项目,现在我想从DB中删除一个数据,所以我添加了这个表单: 下面是实现这一目标的途径: 这是控制器方法: 现在的问题是,它没有工作,我的意思是它抓取正确,但它显示404未找到页面不知怎么的! 而且我也测试了这个: 但仍然显示404 NOT FOUND页面,这意味着进程没有到达控制器方法! 那么我该如何解决这个问题呢? 我非常感谢你们的任何想法或建议... 多谢了。

  • 我正在使用Laravel 5.2(用于后端)和AngularJS用于字体端构建一个REST完整的Web应用程序。我通过使用API连接到Laravel后端。现在我偶然发现了以下问题:我可以正确上传图像,但再次删除它是不工作的。 这些文件将上载到Larvel public/images/upload/文件夹中。这是我的Angular服务(单击“删除”按钮时触发的http请求),其中变量imageToD