如何在Route :: group中使用参数指定Route :: get?

时间:2017-08-23 12:09:43

标签: php laravel routing laravel-5.4 blade

出于某种原因,我无法让这个工作,我已经绞尽脑汁两天了,现在试图弄清楚它并没有发生。

这是我设置的路线组...

// Admin Panel Routes Group
Route::group(['prefix' => 'admin', 'middleware' => ['auth']], function() {
    Route::get('/', ['uses' => 'Admin\AdminController@index'])->name('admin');
    Route::get('posts', ['uses' => 'PostController@index'])->name('posts-list');
    Route::delete('post/delete/{id}', ['uses' => 'PostController@delete'])->name('post-delete');
    Route::get('posts/new', ['uses' => 'PostController@newPost'])->name('post-new');
    Route::post('posts/create', ['uses' => 'PostController@createPost'])->name('post-create');
    Route::post('posts/upload', ['uses' => 'PostController@fileUpload'])->name('post-upload');
    Route::get('post/{slug}/edit', ['uses' => 'PostController@editPost'])->name('post-edit');
});

正如您所看到的,我已经设法在DELETE请求中使用一个参数来完美地发布帖子。 PostController中DELETE请求的功能按预期工作,并从URL读取参数并从数据库中删除记录。

问题可能在于PostController的“editPost”函数,这是我打算用来通过slug从数据库中获取帖子的函数,用它来确定它是哪个帖子,然后用数据加载表单

public function editPost($slug) {
    $post = Post::whereSlug($slug)->firstOrFail();
    return view('posts.edit')->withPost($post);
}

我正在使用ID代替,尽管我认为这不是我的问题所在。删除函数和这个新编辑函数之间的唯一区别是它使用字符串来获取帖子而不是ID。

我遇到的问题是在尝试访问特定帖子的编辑表单时...

  

(1/2)UrlGenerationException   缺少[路线:编辑后] [URI:admin / post / {slug} / edit]所需的参数。

随意提供改善我的代码的方法的建议,我最近才开始使用Laravel,这是我的第一个项目。

万一有人请求它,这里是'edit.blade.php'我将$ post变量传递给...

@extends('layouts.panel')

@section('content')
    <form class="new-post" method="POST" action="">
        {{ csrf_field() }}
        <div class="new-post__seperator">
            <input type="text" class="new-post__input" id="title" name="title" value="{{ $post->title }}" placeholder="Post Title..." autofocus>
        </div>
        <div class="new-post__upload"></div>
        <div class="new-post__editor">
            <textarea id="wysiwyg" value="{{ $post->content }}"></textarea>
        </div>
        <div class="new-post__checkboxes">
            <input type="checkbox" id="publish-checkbox" name="publish-checkbox" class="publish-checkbox" checked>
            <label for="publish-checkbox">By checking this box, you will be publishing the post, making it viewable via the home page.</label>
        </div>
    </form>
@endsection

3 个答案:

答案 0 :(得分:0)

尝试输出slug变量并查看它返回的内容

答案 1 :(得分:0)

问题应该是您在代码或视图中的某处使用route('post-edit')而不是route('post-edit', $slug)。你能检查一下吗?

答案 2 :(得分:0)

我已经设法找到了答案,在我的'layouts / panel.blade.php'中,我有一个指向我的'posts-edit'路径的链接,它根本没有传递任何变量,因此遇到了错误。

感谢@aynber发表修复问题的评论..

  

访问链接应该没问题,是的。但是,从我所看到的,当使用route()在页面上生成链接时会出现该错误。链接第一个,链接第二个,链接第三个