jaxon-php / jaxon-symfony
Symfony 框架的 Jaxon 库集成
Requires
- jaxon-php/jaxon-core: ^4.0
- symfony/expression-language: *
- symfony/framework-bundle: 5.*|6.*
Provides
- dev-main
- v4.x-dev
- v4.0.0
- v4.0-rc.1
- v4.0-beta.1
- v3.4.x-dev
- v3.4.0
- v3.3.0
- v3.2.3
- v3.2.2
- v3.2.1
- v3.2.0
- v3.1.0
- v3.0.2
- v3.0.1
- v3.0.0
- v2.2.0
- v2.1.0
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v2.0-beta.6
- v2.0-beta.5
- v2.0-beta.4
- v2.0-beta.3
- v2.0-beta.2
- v2.0-beta.1
- v1.0.x-dev
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-analysis-8bR4x4
This package is auto-updated.
Last update: 2024-09-04 06:23:10 UTC
README
此包将 Jaxon 库 集成到 Symfony 框架中。
安装
在 composer.json
文件中添加以下行,并运行 composer update
命令。
"require": { "jaxon-php/jaxon-symfony": "^5.0" }
或者运行 composer require jaxon-php/jaxon-symfony ^5.0
命令。
在 config/bundle.php
文件中添加 Jaxon 包。
return [ ... Jaxon\Symfony\JaxonBundle::class => ['all' => true], ];
创建并编辑 packages/config/jaxon.yaml
文件以适应您的应用程序需求。一个示例配置文件可以在 此存储库 中找到。
在 config/services.yaml
文件中添加以下设置,以配置 Jaxon 库。
imports: ... - { resource: packages/jaxon.yaml }
默认情况下,此配置文件将 Jaxon 类注册在 jaxon/ajax
目录下,使用 \Jaxon\Ajax
命名空间。
必须在需要显示 Jaxon 相关内容的所有页面上设置 Jaxon 库,例如使用事件订阅者。
<?php // src/EventSubscriber/JaxonSubscriber.php namespace App\EventSubscriber; use App\Controller\DemoController; use App\Controller\JaxonController; use Jaxon\Symfony\App\Jaxon; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\ControllerEvent; use Symfony\Component\HttpKernel\KernelEvents; use function is_array; class JaxonSubscriber implements EventSubscriberInterface { public function __construct(private Jaxon $jaxon) {} public function onKernelController(ControllerEvent $event) { $controller = $event->getController(); // when a controller class defines multiple action methods, the controller // is returned as [$controllerInstance, 'methodName'] if (is_array($controller)) { $controller = $controller[0]; } // Select the controllers with Jaxon related content. if ($controller instanceof JaxonController || $controller instanceof DemoController) { $this->jaxon->setup(); } } public static function getSubscribedEvents() { return [ KernelEvents::CONTROLLER => 'onKernelController', ]; } }
定义一个控制器操作来处理 Jaxon AJAX 请求。
use Jaxon\Symfony\App\Jaxon; use Symfony\Component\Routing\Annotation\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class JaxonController extends AbstractController { #[Route('jaxon', name: 'jaxon.ajax', methods: ['POST'])] public function __invoke(Jaxon $jaxon) { if(!$jaxon->canProcessRequest()) { return; // Todo: return an error message } $jaxon->processRequest(); return $jaxon->httpResponse(); } }
使用 Jaxon 包提供的 Twig
函数,将 Jaxon js 和 css 代码插入需要显示 Jaxon 相关内容的页面。
use Symfony\Component\Routing\Annotation\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use function Jaxon\rq; class DemoController extends AbstractController { #[Route('/', name: 'demo.home')] public function __invoke() { // Print the page return $this->render('demo/index.html.twig', [ 'pageTitle' => "Symfony Framework", ]); } }
// templates/demo/index.html.twig <!-- In page header --> {{ jxnCss() }} </head> <body> <!-- Page content here --> </body> <!-- In page footer --> {{ jxnJs() }} {{ jxnScript() }}
配置
在 config/package/jaxon.yml
配置文件中的设置分为两个部分。在 lib
部分中的选项是 Jaxon 核心库的选项,而在 app
部分中的选项是 Symfony 应用程序的选项。
可以在配置文件的 app
部分中定义以下选项。
默认情况下,views
数组为空。视图从框架默认位置渲染。在 directories
数组中有一个条目,以下是其值。
用法
Jaxon 类
Jaxon 类可以继承自 \Jaxon\App\CallableClass
。默认情况下,它们位于 Symfony 应用程序的 jaxon/ajax
目录中,相关的命名空间是 \Jaxon\Ajax
。
以下是一个简单的 Jaxon 类示例,定义在 jaxon/Ajax/HelloWorld.php
文件中。
namespace Jaxon\Ajax; class HelloWorld extends \Jaxon\App\CallableClass { public function sayHello() { $this->response->assign('div2', 'innerHTML', 'Hello World!'); return $this->response; } }
依赖注入
Symfony 中的服务可以声明为公共或私有,并且可以 注入到 Jaxon 类中。
由于 Jaxon 使用容器来获取注入到其类中的 Symfony 服务,因此默认情况下它只能访问声明为公共的服务。
可以在 config/services.yaml
文件中为 Jaxon 定义服务定位器,以提供对私有服务的访问。
services: ... jaxon.service_locator: public: true class: Symfony\Component\DependencyInjection\ServiceLocator tags: ['container.service_locator'] arguments: - Twig\Environment: '@twig'
服务定位器必须声明为公共的,并接受所有可以传递给 Jaxon 类的参数。请参阅 Symfony 服务定位器文档。
贡献
- 问题跟踪器:github.com/jaxon-php/jaxon-symfony/issues
- 源代码:github.com/jaxon-php/jaxon-symfony
许可证
该包受 BSD 许可证许可。