这是一个如何最好地导入/集成JS库以在Symfony2应用程序中使用的问题......我恰好使用KendoUI作为测试库。
我已经生成了一个转换和映射我的数据库的包 - 包括所有关联。
$ php app/console generate:bundle namespace=DB/DBImportBundle
这包括所有映射和转换(带注释)的一些其他cli语句......我们可以假设这一切都正常。我为所有需要的表生成了CRUD。
我现在想让所有控制器都能使用KendoUI库......我的第一个倾向是...
$ php app/console generate:bundle namespace=Kendo/KendoBundle
下一步是将Kendo的css / js文件移动到KendoBundle / Resources / public文件夹中...然后在我打算使用它的所有控制器中声明命名空间......
use Kendo\KendoBundle;
这仍然存在应该放置库附带的php包装器的问题。 Kendo文档中的教程仅指导您完成库的简单静态实现。
我的问题在正确如何将不同的库集成到Symfony2应用程序方面更为通用。
答案 0 :(得分:1)
我将它们放在主项目路径的lib文件夹中。在这个lib文件夹中,我放了一个名为Kendoui的文件夹,其中包含了kendo文件(如DataSourceResult.php,FileBrowser.php,ImageBrowser.php,Kendo(文件夹)和SchedulerDataSourceResult.php。
然后在您的composer.json文件中,将autoload更改为如下所示。注意lib的classmap引用,这将告诉它查看库。
"autoload": {
"psr-4": {
"": "src/"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php",
"lib"
]
},
接下来运行composer update
和/或composer dump-autoload
,以便重新制作自动加载文件。现在你可以像这样的日期选择器控件引用KendoUI。
/**
* @Route("/homepage", name="home")
*/
public function home(Request $request)
{
$datePicker = new \Kendo\UI\DatePicker('datepicker');
return new Response($datePicker->render());
}
谨慎之处,我注意到作曲家给了我一个警告说......
Warning: Ambiguous class resolution, "Kendo\Dataviz\UI\DiagramConnectionDefaultsEndCap" was found in both "/home/distribution/public_html/distribution.tech/lib/Kendoui/Kendo/Dataviz/UI/DiagramConnectionDefaultsEndCap.stroke.php" and "/home/distribution/public_html/distribution.tech/lib/Kendoui/Kendo/Dataviz/UI/DiagramConnectionDefaultsEndCap.php", the first will be used.
然而,一切似乎仍然正常,但如果有人知道如何解决此警告让我知道,我会修改我的答案。
答案 1 :(得分:0)
我注意到有另一种方法可以做到这一点,可能比我以前的答案更好。
在app文件夹中,应该有一个名为autoload.php的文件
把剑道' lib'供应商文件夹中应该有的文件夹。
然后让你的autoload.php如下所示。
<?php
use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;
/**
* @var ClassLoader $loader
*/
$loader = require __DIR__.'/../vendor/autoload.php';
$loader->add(
'Kend_', __DIR__.'/../vendor/lib'
);
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
return $loader;
这将以更好,更简单的方式加载构成Kendo的类,而不是作曲家。