【问题标题】:Laravel 5.1 - Return to edit pageLaravel 5.1 - 返回编辑页面
【发布时间】:2016-06-17 13:51:36
【问题描述】:

我正在编写资源控制器,但编辑方法有问题。

我插入了一个验证器表单,如果有错误返回到带有消息的编辑页面,但 RETURN 不起作用!

public function update(Request $request, $id)
    {
       $rules = [
            'title' => 'required',
            'content' => 'required',
            'image' => 'required',    
        ];

        $messages = [        
            'title.required' => 'Campo titolo richiesto',
            'content.required' => 'Contenuto richiesto',
            'image.required' => 'Campo immagine richiesto',
        ];

        $validator = Validator::make($request->all(), $rules, $messages);

        if ($validator->fails()){

         return redirect('admin/article/edit' , $id)->withErrors($validator);   

        }else {


            $s = new Article;



                $visible = (isset($_POST['visible']) == '1' ? '1' : '0');

                $data = array(

                'title'          => $request->get('title'),
                'slug'          => $request->get('title'),
                'content'    => $request->get('content'),
                'image'            => $request->get('image'),
                'user_id'        => $request->get('user_id'),
                'category_id'    => $request->get('category_id'),
                'visible'        => $visible,
                );



             $s->where('id', '=', $id)->update($data);
             return redirect('admin/article')->with('message', 'Articolo aggiornato con successo!');


         }
    }

返回:

管理员/文章/编辑/5

不去

管理员/文章/5/编辑

我该如何解决这个问题?谢谢您的帮助!

PS:$id 工作正常,返回我编辑的 id

【问题讨论】:

    标签: php laravel laravel-5.1


    【解决方案1】:

    这里是重定向助手。正如您在下面看到的,它将状态作为它的第二个参数。

    function redirect($to = null, $status = 302, $headers = [], $secure = null)
    

    $id 作为第二个参数传递实际上是设置$status

    您需要将$to 参数作为完整路径传递,如下所示。

    return redirect('admin/article/' . $id . '/edit')->withErrors($validator);
    

    我猜你想生成带有路由的url,可以像下面这样实现。

    return redirect(route('admin.article.edit', compact($id)))->withErrors($validator);
    

    【讨论】:

      【解决方案2】:

      所以你是说失败时的redirect 没有重定向到正确的 URL?你试过return redirect('admin/article/' . $id . '/edit')->withErrors($validator);吗?

      我还没有测试过这种方法,但也许return redirect()->back()->withErrors($validator); 也可以工作。

      【讨论】:

        【解决方案3】:

        最简单的解决方案:

        Laravel 5.1 有一个 back() 帮助器,可以返回上一页:

        return back()->withErrors($validator);
        

        更详尽的解释:

        如果您想更详细一些,通常更可靠的重定向到路由的方法是首先在您的routes.php 中将其定义为命名路由:

        Route::get('admin/article/{article_id}/edit', ['as' => 'articles.edit', 'uses' => 'ArticlesController@edit']);
        Route::bind('article_id', function($id, $route) {
            return App\Article::whereId($id)->findOrFail();
        }
        

        如果您改用Route::resource,那么这已经自动为您完成了。要查找路线的名称,请运行命令行php artisan route:list。然后,在您的控制器方法中,您可以这样称呼它:

        return redirect()->route('articles.edit', ['article_id' => $id])->withErrors($validator);
        

        使用这种调用,Laravel 会自动为你构建正确的 URL。这更加健壮,因为如果您想将该 URL 更改为其他内容或更改它调用的控制器方法,您只需在一个地方更改它,routes.php,而不是代码中的任何地方(只要每个在您的代码中引用该路由就是按名称引用它)。

        【讨论】:

          【解决方案4】:

          给你

          return redirect('admin/article/edit' , $id)->withErrors($validator); 
          

          表示链接/路由是 admin/article/edit/$id(5 或 2 或 ...)

          更好的检查

          return redirect('admin/article/' . $id . '/edit')->withErrors($validator);
          

          【讨论】:

            【解决方案5】:

            正如其他人所建议的那样,一种方法如下:

            return redirect("admin/article/{$id}/edit")->withErrors($validator);
            

            或者,如果您定义了“路线名称”,就像这样......

            return redirect()->route('route.name',[$id])->withErrors($validator);
            

            这完全取决于您的喜好,我更喜欢后一种,对我来说看起来很干净。

            【讨论】:

              【解决方案6】:

              重定向到传递的url:

              return redirect('admin/article/' . $id . '/edit'); #admin/article/id/edit
              return redirect('admin/article/edit', $id); #admin/article/edit/5
              

              你可以使用方法来获取这个url:

              return redirect(action('Controller@update', compact($id)));
              

              【讨论】:

                猜你喜欢
                • 2012-08-01
                • 2021-05-28
                • 2017-06-28
                • 2016-04-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-03-31
                相关资源
                最近更新 更多