Исключения в PHP - Попытка/Выгода или set_exception_handler?

Это можно сделать, просто разделив эту функцию контроллера на две. Первая функция сохранит файл во временной папке и передаст имя файла функции jjery Ajax, а в разделе об успешном выполнении она будет перенаправлена ​​ко второй функции в Контроллер. Здесь мы загрузим файл

. Здесь находится Ajax

    function ExportErrorListToExcel() {
    debugger;
    $.ajax({
        url: "Import/ExportErrorToExcel",
        type: "POST",
        data: { dataExchangeSelectedColum: $('#hdnSelectedColumn').val(), entityvalue: $('#hdnEntity').val(), filename: $('#hdnFileName').val() },       
        success: function (responsetext, status, xhr) {
            debugger;
            window.location = 'Import/DownloadErrorData?fname=' + responsetext.FileName;
        }
    });
   // $('#ExcelExportForm').submit();
}

. Здесь находится функция контроллера, где файл сохраняется во временную папку

#region ExportErrorToExcel
    //This function will return the file name to script
    public ActionResult ExportErrorToExcel(string dataExchangeSelectedColum, string entityvalue, string filename)
    {

        UA patsUA = Session["PaTSUA"] as UA;
        DataTable dataTable = null;
        dataTable = _dataExchangeBusiness.DataValidation(dataExchangeSelectedColum, entityvalue, filename, patsUA.DBConnectionString);

        string tempPath = Server.MapPath("~/Temp/" + Guid.NewGuid().ToString()+ ".xlsx");            

        _dataExchangeBusiness.ExportErrorToExcel(dataTable,tempPath, entityvalue);
        string fname = Path.GetFileName(tempPath);

        return Json(new { Result = "true", Message = "Success", FileName = fname,Entity=entityvalue });
    }
    #endregion ExportErrorToExcel
[116 ] Вот вторая функция контроллера для загрузки файла из папки Temp

#region DownloadErrorData

    //In this function recieve the filename and will download it from the location
    public ActionResult DownloadErrorData(string fname)
    {
        string fileName ="ErrorList.xlsx";
        string filePath= Path.Combine(Server.MapPath("~/Temp/" + fname));
        try
        {
            string[] allFiles = Directory.GetFiles(Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar);
            foreach (string file in allFiles)
            {
                FileInfo fileinfo = new FileInfo(file);
                if (fileinfo.CreationTime < DateTime.Now.AddDays(-2))
                {
                    fileinfo.Delete();
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//web content type of .xlsx files
        return File(filePath, contentType, fileName);
    }
    #endregion DownloadErrorData

Надеюсь, это кому-нибудь поможет:)

17
задан Charles 23 December 2012 в 21:31
поделиться

3 ответа

  1. Выполнение Ваши веб-запросы через вызов сценария
  2. Фронтального контроллера set_exception_handler рано в выполнении (не забывают составлять error_reporting()). set_exception_handler берет в качестве его параметра, что php называет "обратный вызов" . Можно передать метод объекта как так:

    // $object->methodName() will be called on errors
    set_exception_handler(array($object, 'methodName'));
    
  3. Переносят Ваш код диспетчеризации с try/catch для ловли любого кода, который ДЕЙСТВИТЕЛЬНО выдает исключения. Часть выгоды Вашего кода поймает исключения всех Ваших собственных кодов, плюс [1 112] приблизительно [1 112] php ошибки, которые не генерировали исключение исходно (например, fopen или что-то) благодаря Вашему set_exception_handler вызов выше. php ручные состояния:

    следующие ошибочные типы не могут быть обработаны с определяемой пользователем функцией: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT повысили в файле, где set_error_handler () называют.

  4. ошибки Журнала по мере необходимости.

  5. Создают ошибочный шаблон страницы ("Представление"), который управляет на Объекте исключения ("Модель") и структурные распечатки программы целым отслеживанием стека для Вас в разработке. Создайте другой шаблон, который переходит к производству. Перейдите на своей среде, например:

    catch(Exception $e) {
        // log error as necessary here.
        if("in developement") {
            // $e would be available to your template at this point
            include "errortemplates/dev.php";
        } else {
            include "errortemplates/prod.php";
        }
    }
    
23
ответ дан 30 November 2019 в 11:38
поделиться

Существует более определенная информация об "обратных вызовах" PHP здесь . Для использования статического метода обратный вызов - что-то как

<?php
set_exception_handler(array('MyClass','staticMethod'));
?>

Для использования метода от инстанцированного объекта, это:

<?php
set_exception_handler(array($myObject, 'objectMethod'));
?>

И использовать глобальную функцию, это справедливо:

<?php
set_exception_handler('my_global_function');
?>
11
ответ дан 30 November 2019 в 11:38
поделиться

От пути это звучит, Вы будете использовать set_exception_handler. Это гарантирует, что все исключения обработаны тем же самым способом. Существуют места, чтобы использовать блоки попытки/выгоды в Вашем приложении, сказать, хотите ли Вы проверить на единственное исключение, которое должно не обязательно быть поймано таким же образом.

До установки set_exception_handler, я не уверен, можно ли установить функцию, чтобы быть методом объекта, если это не статический метод. Кажется, что это имеет место. Существует больше информации в http://us2.php.net/set_exception_handler

4
ответ дан 30 November 2019 в 11:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: