在控制器上检索并将数据保存到会话并在处理程序Laravel 5.5上检索并将数据保存到会话时,会话存储错误

时间:2019-06-06 19:22:32

标签: php laravel session report session-variables

我正在处理error: too few arguments to function ‘execve’ execve( "/usr/bin/sort", newARGV); 处的异常,但是当我故意引起某些异常时,报告方法不仅会写入该异常,还会至少写入24次相同的Handler.php,因为我正在使用会话检索自定义错误消息。我的报告方法只有默认的Session store error。日志记录了我故意造成的查询错误,但也记录了许多parent::report($exception);

Session store error

我认为所有检索到的//render method at Handler.php public function render($request, Exception $exception) { if($request->session()->has('errorOrigin')) { $errorOrigin = $request->session()->pull('errorOrigin'); } else{ $errorOrigin = ""; } //session()->forget('errorOrigin'); //return dd(session()); //return parent::render($request, $exception); //this return is just some trying //return parent::render($request, $exception); //return dd($exception); //return parent::render($request, $exception); //just in case someone throws it but don´t has the try catch at the code if($exception instanceof \App\Exceptions\CustomException) { //$request->session()->flash('message_type', 'negative'); \Session::flash('message_type', 'negative'); \Session::flash('message_icon', 'hide'); \Session::flash('message_header', 'Success'); \Session::flash('error', '¡Ha ocurrido un error ' . $errorOrigin . "!" .' Si este persiste contacte al administrador del sistema'); return redirect()->back(); }elseif($exception instanceof \Illuminate\Database\QueryException) { \Session::flash('message_type', 'negative'); \Session::flash('message_icon', 'hide'); \Session::flash('message_header', 'Success'); \Session::flash('error', '¡Ha ocurrido un error en la consulta ' . $errorOrigin);//this is he customized error message return back(); }else{/*Original error handling*/ return parent::render($request, $exception); } } //Method at my controller public function index(Request $request) { //custom message if this methods throw an exception \Session::put('errorOrigin', " mostrando los clientes"); //on purpose error, that table doesn´t exist, so it causes the QueryException error DB::table('shdhgjd')->get(); } \Session变量都会产生错误errorOrigin,但是我需要它们,是否存在逻辑/语法错误?我需要一些帮助,因为日志正变得越来越大,并且保存所有这些错误也没有意义,也不会不保存它们。

还发现此错误发生在每个页面上,即登录时发生的事件。我使用用户名而不是电子邮件登录(当然,登录名已经可以使用,并且可以使用用户名正确登录)。这有关系吗?我不执行任何操作来刷新登录页面,而不是尝试登录的事件,它还保存了我的日志中的错误,但我的应用程序继续运行。

这一次我是故意从不存在的数据库表中挑出错误,这是对错误的摘要,当我一次引发该错误时,该错误将保存到日志中。如您所见,会话存储错误或类似的重复,但是有些显示未捕获的Session store error。还添加了最后一个的堆栈跟踪。会话存储错误至少重复24次甚至更多。

RunTimeException

1 个答案:

答案 0 :(得分:0)

调用$request->session()引发错误,因为它doesn't have a session object

通过StartSession middleware向请求对象提供会话。该中间件包含在web中间件组中,该组中间件自动分配给routes/web.php内部的所有路由。

您使用的路由可能尚未建立任何会话用途,例如API路由,或者只是您忘记了Web中间件组的路由。

并且由于错误处理程序中发生了错误,因此它正在变成一个循环。错误>处理程序>错误>处理程序>等等...

通常,我建议在控制器中处理所有预期的方案-包括可能的异常。这样一来,您就无需调试错误处理程序,不知道为什么控制器给出了您可能不期望的重定向。

也就是说,只要您针对特定的异常并且不对所有异常使用重定向和会话,就可以在错误处理程序中处理特定于应用程序的异常并返回重定向或其他自定义响应。

如何处理的示例:

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $exception
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $exception)
{
    // Create a specific path for your custom exception.
    if ($exception instanceof MyCustomException) {
        // Want to use sessions? Check if they're available.
        if ($request->hasSession()) {
            // ...
            return \redirect()->back();
        }

        // Sessions weren't available on this request. Create a different response.
        return view('errors.no-session-view');
    }

    // Use the default render response for everything else.
    return parent::render($request, $exception);
}