В качестве первого вопроса здесь, я начну с чего-то сложного!
Я работаю над проектом Symfony, который может связываться с SAP для извлечения данных и создания отчетов. Я использовал расширение sapnwrfc от piersharding, так как оно одно из немногих, которое можно скомпилировать с помощью моего среда (Windows x86 и php 5.6.8).
Первые шаги работали не так уж плохо:
- добавить файлы dll в php/ext
- добавьте строку php-sapnwrfc-x86.dll в php.ini
- он появляется на phpinfo()
- заставьте его работать в образце файла вне symfony (автономный php-скрипт) с помощью такого кода:
/test.php
<? php
require_once 'sap_config.php';
require_once 'spyc.php';
extension_loaded("sapnwrfc");
global $SAP_CONFIG;
class _
{
public function setUp() {
global $SAP_CONFIG;
$this->config = Spyc::YAMLLoad($SAP_CONFIG);
}
public function sapConnect() {
try {
$this->conn = new sapnwrfc($this->config);
}
....
- Итак, я попробовал что-то подобное в проекте Symfony, но появляется эта ошибка:
#P5#
с этим кодом:
/src/myBundle/Extensions/SapConnection.php
<?php
namespace SE\InputBundle\Extensions;
use SE\InputBundle\Extensions\SapConfig;
use SE\InputBundle\Extensions\Spyc;
use SE\InputBundle\Entity\SAPRF;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
//the following doesn't seem to do much:
extension_loaded("sapnwrfc");
use sapnwrfc;
use sapnwrfcConnectionException;
use sapnwrfcCallException;
global $SAP_CONFIG;
class SapConnection
{
public function setUp() {
global $SAP_CONFIG;
$this->config = Spyc::YAMLLoad($SAP_CONFIG);
//the following displays "false"
$alertpop = (class_exists("sapnwrfc")) ? "true" : "false";
echo "<script type='text/javascript'>alert('$alertpop');</script>";
}
public function sapConnect() {
try {
// the error is triggered here
$this->conn = new sapnwrfc($this->config);
}
catch (sapnwrfcConnectionException $e) {
echo "Exception type: ".$e."<br />";
echo "Exception key: ".$e->key."<br />";
echo "Exception code: ".$e->code."<br />";
echo "Exception message: ".$e->getMessage();
}
catch (Exception $e) {
echo "Exception type: ".$e."\n";
echo "Exception key: ".$e->key."\n";
echo "Exception code: ".$e->code."\n";
echo "Exception message: ".$e->getMessage();
throw new Exception('Connection failed.');
}
}
.....
и, конечно же, это не сработает, если я удалю оператор использования ... Google не очень поможет, поскольку это кажется довольно специфичным. У вас есть идея? Будет ли это проблемой совместимости между symfony и php-расширением, или мне нужно уведомить Symfony, чтобы использовать этот класс в качестве php-расширения? Или это где-то в моей конфигурации проекта, что я сделал что-то не так?
Дайте мне знать, если вы хотите получить более подробную информацию!
Extensions
. - person web-nomad   schedule 16.06.2015