Этот код был выполнен до [window makeKeyAndVisible];
, который находится внутри делегата приложения. Так что не удивительно, почему keyWindow
был nil
еще.
Пока похоже, что это возможно только с помощью взлома.
Я вставил return true
в строку 556 в system / libraries / Upload.php.
Ответ на ваш прямой вопрос: Нет, нет способа сделать это, не переопределив ядро
Хорошая новость в том, что вы можете избежать взлома ядра, согласно руководству
В качестве дополнительного бонуса CodeIgniter позволяет расширять ваши библиотеки собственные классы, если вам просто нужно добавить некоторые функции в существующая библиотека. Или вы даже можете заменить собственные библиотеки, просто поместив версии с одинаковыми именами в папку вашего приложения / библиотек.
Итак, чтобы получить замену вашей библиотеке, вы можете скопировать Upload.php в свою папку
application/libraries
, а затем добавить свою собственную логику в эту загрузку. php файл. Code Igniter будет включать этот файл каждый раз, когда вы загружаете библиотеку загрузки.
В качестве альтернативы, вы можете создать свой СОБСТВЕННЫЙ пользовательский класс загрузчика, который расширяет исходный и уточняет только функцию is_allowed_filetype.
application/libraries/MY_Upload.php
class MY_Upload Extends CI_Upload{
function is_allowed_filetype(){
//my custom code here
}
}
Вы захотите прочитать журнал изменений всякий раз, когда вы обновляете, но это позволит вам хранить ваш код и основной код в разных юниверсах.
Что я делаю:
$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;
Это автоматически разрешает все файлы в каждом вызове функции.
Вам просто нужно заменить это условие:
if (! $this->is_allowed_filetype())
{
$this->set_error('upload_invalid_filetype');
return false;
}
на:
if (count($this->allowed_types) && !$this->is_allowed_filetype())
{
$this->set_error('upload_invalid_filetype');
return false;
}