3

这更多是关于如何最好地导入/集成 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 应用程序中,我的问题更为笼统。

4

2 回答 2

1

我将它们放在主项目路径的 lib 文件夹中。在该 lib 文件夹中,我放置了一个名为 Kendoui 的文件夹,其中包含 kendo 文件(如 DataSourceResult.php、FileBrowser.php、ImageBrowser.php、Kendo(文件夹)和 SchedulerDataSourceResult.php。

然后在您的 composer.json 文件中,将自动加载更改为如下所示。注意 lib 的类映射参考,这将告诉它在那里寻找库。

"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.

然而,一切似乎仍然正常,但如果有人知道如何解决这个警告,请告诉我,我会修改我的答案。

于 2016-01-27T03:46:25.227 回答
0

我注意到有另一种方法可以做到这一点,它可能比我之前的答案更好。

在 app 文件夹中,应该有一个名为 autoload.php 的文件

将 kendo 'lib' 文件夹放在应放在的 vendor 文件夹中。

然后让您的 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 的类,而无需作曲家。

于 2016-01-28T19:36:54.353 回答