也许是个愚蠢的问题,我是 Symfony2 的新手,我正在将它用于我的一个项目。
我希望能够使用第三方库,即 SSRSReport (SSRS 报告的 API)。
我已将库放入Symfony/vendor/ssrs/lib/Ssrs/src
。
这里定义了很多类,我不需要自动加载它们。
我根本不知道如何从 Controller 请求和调用它们。
这肯定行不通
require_once '/vendor/ssrs/lib/Ssrs/src/SSRSReport.php';
class DefaultController extends Controller
{
public function viewAction()
{
define("UID", "xxxxxxxx");
define("PASWD", "xxxxxxxx");
define("SERVICE_URL", "http://xxx.xxx.xxx.xxx/ReportServer/");
$report = new SSRSReport(new Credentials(UID, PASWD), SERVICE_URL);
return $this->render('myBundle:Default:view.html.twig'
, array('report' => $report)
);
}
}
此处使用的 SSRSReport()
和 Credentials()
是 API 中包含的许多类中的两个。
最佳答案
首先,我不建议将非 symfony 管理的库放入 /vendors
。由于您正在管理此库,因此请将其放入 /src
。
其次,当使用不是命名空间的类时(即,在根命名空间中),请确保正确引用它们,否则 PHP 将查找当前命名空间(在本例中,是您的 Controller 命名空间)
第三,快速而肮脏的解决方案是正确地包含来自 Controller 的文件:
class DefaultController extends Controller
{
protected function includeSsrsSdk()
{
require_once(
$this->container->getParameter( 'kernel.root_dir' )
. '/../src/ssrs/lib/Ssrs/src/SSRSReport.php'
);
}
public function viewAction()
{
$this->includeSsrsSdk();
define("UID", "xxxxxxxx");
define("PASWD", "xxxxxxxx");
define("SERVICE_URL", "http://xxx.xxx.xxx.xxx/ReportServer/");
$report = new \SSRSReport(new \Credentials(UID, PASWD), SERVICE_URL);
return $this->render('myBundle:Default:view.html.twig'
, array('report' => $report)
);
}
}
但这会锁定您将库包含到这个 Controller 中的逻辑。您可以为执行此操作的 SDK 制作一个单独的包装器,甚至可以将其注册为服务。
关于php - Symfony2 - 使用第三方库 (SSRS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10883920/