Symfony2 KendoUI实现

时间:2013-10-05 00:16:18

标签: php symfony kendo-ui command-line-interface

这是一个如何最好地导入/集成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应用程序方面更为通用。

2 个答案:

答案 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的类,而不是作曲家。