Intento manejar HttpExceptions en Yii2 para mostrar mensajes de error para usuarios web. Configuré todo como aquí: http: //www.yiiframework .com / doc-2.0 / guide-runtime-handling-errors.html

Controlador

namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller
{
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }
}

public function actionError()
{
    $exception = Yii::$app->errorHandler->exception;
    if ($exception !== null) {
        return $this->render('error', ['exception' => $exception]);
    }
}

Cuando lanzo un error como este:

throw new HttpException(404,"This is an error. Maybe Page not found!");

Quiero mostrar el texto en mi archivo de vista o al menos los valores descritos en los documentos, pero todos están protegidos o son privados. ¿Alguna idea de como hacer esto?

Vista

$exception->statusCode // works
$exception->message    // proteced
0
kasoft 28 dic. 2016 a las 17:58

3 respuestas

La mejor respuesta

En primer lugar, está definiendo la acción error dos veces, una como método de su SiteController y, en segundo lugar, en el método actions. Su mensaje de error se puede recuperar usando la variable '$ mensaje' en su archivo de vista, usando $exception->message no es correcto. La documentación de Yii permite estas variables en su archivo de vista de error;

  • Nombre
  • mensaje
  • excepción
3
Joe Miller 28 dic. 2016 a las 15:23

Prueba éste

  $connection = \Yii::$app->db;
  $transaction = $connection->beginTransaction();

  try {
          $model->save()
          $transaction->commit();
          return $this->redirect(['user/view', 'id' => $model->id]);

      }catch (\Exception $e) {

          $transaction->rollBack();
          throw new \yii\web\HttpException(500,"YOUR MESSAGE", 405);


    }
1
Yasar Arafath 29 dic. 2016 a las 06:26

No estoy seguro si verificó ver el archivo en views\site\error.php me tomó tiempo darme cuenta de que esto se usa para mostrar páginas de error.

<?php

/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */

use yii\helpers\Html;

$this->title = $name;
?>
<div class="site-error">

    <h1><?= Html::encode($this->title) ?></h1>

    <div class="alert alert-danger">
        <?php /* this is message you set in `HttpException` */ ?>
        <?= nl2br(Html::encode($message)) ?>
    </div>

    <p>
        <?= Yii::t('app', 'Here is text that is displayed on all error pages') ?>
    </p>

</div>
1
Ripper 28 dic. 2016 a las 17:45