如何从调用的函数重定向回编辑页面?

时间:2019-03-26 16:12:13

标签: php laravel redirect routes

edit.blade.page上有一个用于文件删除的按钮,该按钮导致控制器中的update方法。 update方法调用专用的deleteImage方法,我想从该方法将用户重定向回edit.blade.page,但它会将我重定向到其他地方。 我尝试了documentation

的所有方法

控制器

public function update(Request $request, $id){
        ($request['method']==true) ? $this->imageDelete($request, $id) : null;
    }

private function imageDelete (Request $request, $id){
        if($request['method']=='destroy'){
            $file = public_path().'/storage'.$request['old_image'];

            $validatedData = $request->validate(['images'=> 'string',]);

            $old_images = explode(',', $request['images']);
            $paths = array();
            foreach ($old_images as $old){
                ($old != $request['old_image']) ? $paths[] = $old : null ;
            }
            (File::exists($file)) ? File::delete($file) : null;

            Announcement::where('slug', $id)->update(array_merge($validatedData,array('images'=>implode(",",$paths),)));
            return redirect()->route('announcements.edit',[$id])->with('status',1);
        }
        return redirect()->route('announcements.edit',[$id])->with('status', 0);
    }

路线

Route::resource('announcements', 'AnnouncementController', ['names' => [
                                                                    'index' => 'announcements',
                                                                    'store' => 'announcements.store',
                                                                    'show'  => 'announcements.show',
                                                                    'destroy'=>'announcements.destroy',
                                                                    'update' => 'announcements.update',

                                                                ]])

3 个答案:

答案 0 :(得分:0)

只需将route帮助程序与redirect帮助程序一起使用,即可指定您要转到的路线名称:

return redirect()->route('your.route.name');

注意:这需要您命名路线,例如

Route::get('/test', 'SomeController@index')->name('test')

或者您可以将URL直接传递到redirect

我通常发现,在我想让我的代码执行的操作中明确表示可以避免错误/意外的副作用。

答案 1 :(得分:0)

您有2个不错的选择:

return redirect('/edit');

return view('your.view');

任何一个都应该能够完成您想做的事情。

答案 2 :(得分:0)

好的! laravel似乎看不到其他函数的返回结果,而不是自己预定义的结果。 因此,在这种情况下,解决方案是从update方法内返回

public function update(Request $request, $id){
  return ($request['method']==true) ? $this->imageDelete($request, $id) : null;
}