Laravel Route [admin.delete-post] 未定义 - 我定义了这条路线

Posted

技术标签:

【中文标题】Laravel Route [admin.delete-post] 未定义 - 我定义了这条路线【英文标题】:Laravel Route [admin.delete-post] not defined - i defined this route 【发布时间】:2021-12-15 15:51:23 【问题描述】:

我在 Laravel 中使用我定义的路径。 但它给了我一个未定义的信息 我检查了所有的路线。 我什至清除了缓存。 这对我来说很不寻常,因为我的其他路径以相同的方式工作

这是我的身体

    @extends('layouts.master')
    @section('content')
        @if(Session::has('info'))
        <div class="bg-dark text-white">
            <p>box:Session::get('info')</p>
        </div>
        @endif
        <div>
            <a class="btn btn-dark" href="route('admin.new-post')">New Post</a>
            <br /><br />
            @foreach($posts as $post)
            <div class="text-center">
                <div>
                    <h1>$post->title</h1>
                    <p>
                        $post->content
                    </p>
                </div>
                <a class="btn btn-dark" href="route('admin.edit-post',['id' => $post->id])">Edit Post</a>
                <a class="btn btn-dark" href="route('admin.delete-post',['id' => $post->id])">Delete Post</a>
            </div>
        </div>
        @endforeach
    @endsection

这是我的路线

Route::group(['prefix'=>'admin'],function()

    Route::get('',[
        'uses' => 'App\Http\Controllers\PostController@getAdminIndex',
        'as' => 'admin'
    ]);

    Route::get('new-post',[
        'uses' => 'App\Http\Controllers\PostController@getAdminCreate',
        'as' => 'admin.new-post'
    ]);

    Route::post('create', [
        'uses' => 'App\Http\Controllers\PostController@postAdminCreate',
        'as' => 'admin.create-post'
    ]);

    Route::get('edit-post/id',[
        'uses' => 'App\Http\Controllers\PostController@getAdminEdit',
        'as' => 'admin.edit-post'
    ]);

    Route::post('edit',[
        'uses' => 'App\Http\Controllers\PostController@postAdminUpdate',
        'as' => 'admin.update'
    ]);

    Route::get('delete-post/id', 'App\Http\Controllers\PostController@postDelete')
        ->name('admin.delete-post');

);

这是我的控制,但我得到了找不到路径的错误。 所有代码中的一切都很简单。 代码中没有歧义。 谢谢你为我付出的努力

        <?php
        
        namespace App\Http\Controllers;
        
        use Illuminate\Http\Request;
        use App\Models\Post;
        use Illuminate\Session\Store;
        use Illuminate\Database\Eloquent\Model;
        
        class PostController extends Controller
        
            public function getIndex(Store $session)
                $posts = Post::all();
                return view("blog.home",['posts' => $posts]);
            
            public function getAdminIndex(Store $session)
                $posts = Post::all();
                return view("admin.index",['posts' => $posts]);
            
            public function getPost(Store $session, $id)
                $post = Post::find($id);
                return view("blog.post",['post' => $post]);
            
            public function getAdminCreate(Store $session)
                return view('admin.new-post');
            
            public function getAdminEdit(Store $session, $id)
                $post = Post::find($id);
                return view("admin.edit-post",['post' => $post , 'postId' => $id]);
            
            public function postAdminCreate(Store $session, Request $request)
                $this->validate($request,[
                    'title' => 'Required | min:5',
                    'content' => 'Required | min:10'
                ]);
                $post = new Post([
                    'title' => $request->input('title'),
                    'content' => $request->input('content')
                ]);
                $post->save();
                return redirect()->route('admin')->with('info','post created, title is :'.
                $request->input('title'));
            
            public function postAdminUpdate(Store $session, Request $request)
                $this->validate($request,[
                    'title' => 'Required | min:5',
                    'content' => 'Required | min:10'
                ]);
                $post = Post::find($request->input('id'));
                $post->title = $request->input('title');
                $post->content = $request->input('content');
                $post->save();
                return redirect()
                    ->route('admin')
                    ->with('info','post edited, title is :'. $request
                            ->input('title'));
            
            public function postDelete($id)
                $post = Post::find($id);
                $post->delete();
                return redirect()->route('admin.index')->with('info', 'Delete your post');
            
        
        
    ```
            this my Exception 
            
            > Symfony\Component\Routing\Exception\RouteNotFoundException
            Route [admin.delete-post] not defined. (View: C:\xampp\htdocs\my-laravel\resources\views\admin\index.blade.php)`

thank you of all

【问题讨论】:

这是什么版本的 laravel? 您是否尝试过使用as 关键字?就像你的其他路线一样? laravel-8 。我为所有路线使用路线名称 请添加有关您收到的错误消息的详细信息,an undefined message 不是很有帮助。另外,添加您的控制器,以便我们可以排除缺少的操作方法。 嗨。我还在上面的代码中添加了一个控制器。代码非常简单流畅 【参考方案1】:

我注意到了什么:

    Route::post('edit',[
        'uses' => 'App\Http\Controllers\PostController@postAdminUpdate',
        'as' => 'admin.update'
    ]);

    Route::get('delete-post/id', 'App\Http\Controllers\PostController@postDelete')
        ->name('admin.delete-post');

在 laravel 文档中,仅列出了 5.3 之前的命名路由的关键字。我不确定它在 laravel 8 中是否仍然有效!?也许您将所有路线命名为 name 而不是 as。

使用“name”代替“as”作为路由名称。这本身就是正确的。但是用“as”试试吧。

对于这种情况可能很重要:php artisan route:clear

还有:你确定你用get方法来删除吗?

【讨论】:

我用了“as”,又遇到同样的错误 @sinamohsenian 如果你只使用名字?重要的是:php artisan route:clear 谢谢。我真的很失望。谢谢你 。成功了 @sinamohsenian 酷!现在是什么。路由缓存或名称路由定义的名称? 路由缓存。谢谢

以上是关于Laravel Route [admin.delete-post] 未定义 - 我定义了这条路线的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4 - Route::resource 与 Route::controller。使用哪个?

Laravel 5 Route Group 和 Basic(/) GET Route 组内

Laravel route ---- resoure

[Route: ] - Laravel 7 缺少必需的参数

laravel 4:Route类中资源和控制器之间的区别

Laravel 5.0 的 Route::post 渲染一个空页面,为啥当 Route::get 工作正常时会这样