Я голосую за IB (Интерактивные Брокеры). Я использовал их в прошлом, как было довольно счастливо. Рынки капитала вершины, торгующие также, имеют API (pcmtrading.com), но я не использовал их.
Интерактивные Брокеры:
https://www.interactivebrokers.com/en/? f = % 2Fen%2Fsoftware%2Fibapi.php
Рынки капитала Вершины:
Сначала поместите это в начало вашего скрипта:
error_reporting (E_ALL); // это должно показать все ошибки php
Я думаю, что сообщения об ошибках отсутствуют в форме, потому что вы повторно заполняете форму перед ее отображением. Я думаю, что это удаляет все сообщения об ошибках. Чтобы исправить это, удалите эту часть:
else
{
$f->populate($data);
}
Чтобы отобразить загруженное изображение в форме, просто добавьте div в свой шаблон представления, например:
<div style="float:right"><?=$this->image?></div>
Если изображение загружено нормально, заполните $ view-> image символом img tag.
Что касается автоматического переименования, нет, оно не встроено, но это очень просто. Я покажу вам, как это сделать, ниже. Вот как я обрабатываю загрузку изображений:
$form = new Zend_Form();
$form->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
$image = new Zend_Form_Element_File('image');
$image->setLabel('Upload an image:')
->setDestination($config->paths->upload)
->setRequired(true)
->setMaxFileSize(10240000) // limits the filesize on the client side
->setDescription('Click Browse and click on the image file you would like to upload');
$image->addValidator('Count', false, 1); // ensure only 1 file
$image->addValidator('Size', false, 10240000); // limit to 10 meg
$image->addValidator('Extension', false, 'jpg,jpeg,png,gif');// only JPEG, PNG, and GIFs
$form->addElement($image);
$this->view->form = $form;
if($this->getRequest()->isPost())
{
if(!$form->isValid($this->getRequest()->getParams()))
{
return $this->render('add');
}
if(!$form->image->receive())
{
$this->view->message = '<div class="popup-warning">Errors Receiving File.</div>';
return $this->render('add');
}
if($form->image->isUploaded())
{
$values = $form->getValues();
$source = $form->image->getFileName();
//to re-name the image, all you need to do is save it with a new name, instead of the name they uploaded it with. Normally, I use the primary key of the database row where I'm storing the name of the image. For example, if it's an image of Person 1, I call it 1.jpg. The important thing is that you make sure the image name will be unique in whatever directory you save it to.
$new_image_name = 'someNameYouInvent';
//save image to database and filesystem here
$image_saved = move_uploaded_file($source, '/www/yoursite/images/'.$new_image_name);
if($image_saved)
{
$this->view->image = '<img src="/images/'.$new_image_name.'" />';
$form->reset();//only do this if it saved ok and you want to re-display the fresh empty form
}
}
}
Убедитесь, что ваше представление также выводит все сообщения об ошибках, которые вы генерируете в контроллере: ошибки загрузки, проверка полей, проверка файлов. Переименование будет вашей работой, как и другая постобработка, такая как преобразование изображения в магию.
Во-первых, ознакомьтесь с руководством Быстрый старт . Обратите внимание на то, что в нем есть ErrorController.php, который будет отображать вам сообщения об ошибках. Также обратите внимание на то, как в application.ini есть эти строки, которые заставляют PHP выдавать сообщения об ошибках, но убедитесь, что вы находитесь в среде «разработки», чтобы увидеть их (что установлено в public / .htaccess).
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
Во-вторых, ZF имеет фильтр переименования для загрузки файлов:
$upload_elt = new Zend_Form_Element_File('upload');
$upload_elt
->setRequired(true)
->setLabel('Select the file to upload:')
->setDestination($uploadDir)
->addValidator('Count', false, 1) // ensure only 1 file
->addValidator('Size', false, 2097152) // limit to 2MB
->addValidator('Extension', false, 'doc,txt')
->addValidator('MimeType', false,
array('application/msword',
'text/plain'))
->addFilter('Rename', implode('_',
array($this->_user_id,
$this->_upload_category,
date('YmdHis'))))
->addValidator('NotExists', false, $uploadDir)
;
Некоторые из приведенных выше интересных вещей:
форма. В контроллере / действии, принимающем загрузку, вы можете сделать следующее:
$original_filename = $form->upload->getFileName(null, false);
if ($form->upload->receive()) {
$model->saveUpload(
$this->_identity, $form->upload->getFileName(null, false),
$original_filename
);
}
Обратите внимание, как мы фиксируем $ original_filename (если оно вам нужно) перед тем, как выполнять receive (). После получения () мы выполняем getFileName (), чтобы получить то, что фильтр переименования выбрал в качестве нового имени файла.
Наконец, в методе model-> saveUpload вы можете сохранить любые данные в своей базе данных.