laravel 404错误页面,重定向

时间:2018-05-03 19:21:34

标签: laravel redirect http-status-code-404

寻找一些帮助,我从方法中选择一些调查和问题,从一条路线选择一个id的调查。但是当我删除一个调查时,以及在写{@ 3}}的网址时(27是调查标识,不再存在),我没有得到一些预期或重定向或页面未找到信息,但是在未定义的情况下得到错误变量$ dat。但我需要一些如何显示404页面未找到,或只是重定向到其他页面,如果id不存在。有人能帮我吗? 这是我的路线:

Route::get('survey_draft/{id}', 'SurveyController@editSurveyDraft');

这是我的控制器:

public function viewSurvey($id)
{

    $object = DB::table('question')
        ->where('survey_id', '=', $id)
        ->where('name', '!=', NULL)
        ->get();

    $teamName = DB::table('survey')->where('surveyId', '=', $id)
        ->join('team', 'survey.teamId', '=', 'team.teamId')
        ->join('company', 'company.id', '=', 'team.companyID')
        ->get();

    $company = Auth::user()->company;

    $data = Survey::where('surveyId', '=', $id)->get();
    $teams = Auth::user()->teams;

    $checkUserTeam = DB::table('teammembersall')
        ->where('UserId', '=', Auth::user()->id)
        ->get();

    $members = Survey::where('surveyId', '=', $id)
        ->join('team', 'team.teamId', '=', 'survey.teamId')
        ->join('teammembersall', 'teammembersall.TeamId', '=', 'team.TeamId')
        ->join('users', 'users.id', '=', 'teammembersall.UserId')
        ->select('users.*')
        ->whereNotExists(function ($query) use ($id) {
            $query->select(DB::raw(1))
                ->from('answer')
                ->whereRaw('answer.answerAboutUserId = users.id')
                ->where('answer.surveyId', '=', $id)
                ->where('answer.member_id', '=', Auth::user()->id);
        })
        ->get();

    $questions = DB::table('answer')->get();

    return view('survey_details', ['object' => $object, 'data' => $data, 'teams' => $teams, 'members' => $members, 'questions' => $questions, 'checkUserTeam' => $checkUserTeam, 'teamName' => $teamName, 'company' => $company]);
}

1 个答案:

答案 0 :(得分:1)

要解决您的问题,您可以在$ object ... get()之后添加其中一个,具体取决于您的结果。其中一个应该可以工作。

if(empty($object)){ abort(404); }

if(!$object->count()){ abort(404); }

但是,如果您使用了两种基本的laravel技术,那么您的代码会更简单。

  1. ORM而不是DB :: ...
  2. 路线模型绑定。 (这将为你处理你的404)
  3. https://laravel.com/docs/5.6/eloquent

    https://laravel.com/docs/5.6/routing#route-model-binding