首页
/ SonataNewsBundle 技术文档

SonataNewsBundle 技术文档

2024-12-20 05:53:09作者:咎竹峻Karen

1. 安装指南

SonataNewsBundle 是一个基于 Symfony 的新闻管理bundle。在安装前,请确保您的环境满足以下要求:

  • PHP 版本 7.2 或更高
  • Symfony 版本 3.x 或 4.x

以下是安装 SonataNewsBundle 的步骤:

  1. 使用 Composer 安装:

    composer require sonata-project/news-bundle
    
  2. config/bundles.php 文件中注册 Bundle:

    return [
        // ...
        Sonata\NewsBundle\SonataNewsBundle::class => ['all' => true],
        // ...
    ];
    
  3. 配置数据库连接。编辑 config/packages/doctrine.yaml 文件,根据您的数据库类型设置相应的参数。

  4. 执行数据库迁移:

    php bin/console doctrine:schema:update --force
    
  5. 清理缓存:

    php bin/console cache:clear --env=prod --no-debug
    

2. 项目的使用说明

SonataNewsBundle 提供了新闻管理功能,包括新闻创建、编辑、删除和显示。以下是如何使用这个 Bundle:

  1. 创建新闻:

    使用 Sonata\AdminBundle\Admin\Admin 类来管理新闻实体。

    // src/Admin/PostAdmin.php
    namespace App\Admin;
    
    use Sonata\AdminBundle\Admin\AbstractAdmin;
    use Sonata\AdminBundle\Datagrid\ListMapper;
    use Sonata\AdminBundle\Form\FormMapper;
    use Sonata\AdminBundle\Show\ShowMapper;
    
    class PostAdmin extends AbstractAdmin
    {
        protected function configureFormFields(FormMapper $formMapper)
        {
            $formMapper
                ->add('title')
                ->add('body')
                ->add('author')
                // ...
            ;
        }
    
        protected function configureListFields(ListMapper $listMapper)
        {
            $listMapper
                ->addIdentifier('title')
                ->add('author')
                ->add('created_at')
                // ...
            ;
        }
    
        protected function configureShowFields(ShowMapper $showMapper)
        {
            $showMapper
                ->add('title')
                ->add('body')
                ->add('author')
                ->add('created_at')
                // ...
            ;
        }
    }
    
  2. 显示新闻列表:

    在控制器中,注入 Sonata\AdminBundle\Admin\AdminManager 服务,并使用它来获取新闻列表。

    // src/Controller/NewsController.php
    namespace App\Controller;
    
    use Sonata\AdminBundle\Admin\AdminManager;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Response;
    
    class NewsController extends AbstractController
    {
        private $adminManager;
    
        public function __construct(AdminManager $adminManager)
        {
            $this->adminManager = $adminManager;
        }
    
        public function index(): Response
        {
            $posts = $this->adminManager->getAdminByClass(PostAdmin::class)
                ->getDashboardHomepageBlocks();
    
            return $this->render('news/index.html.twig', compact('posts'));
        }
    }
    
  3. 创建新闻详情页:

    使用 SonataNewsBundle 提供的 Post 实体来显示新闻详情。

    {# templates/news/show.html.twig #}
    <h1>{{ post.title }}</h1>
    <p>{{ post.body }}</p>
    <p>作者:{{ post.author }}</p>
    <p>发布时间:{{ post.created_at }}</p>
    

3. 项目API使用文档

SonataNewsBundle 没有内置的 API 功能,但您可以使用 Symfony 的 API Platform 或其他 API 构建工具来创建一个基于 SonataNewsBundle 的 API。

以下是一个简单的例子,使用 API Platform 来创建一个新闻 API:

  1. 安装 API Platform:

    composer require api-platform/core
    
  2. config/packages/api_platform.yaml 中配置 API Platform:

    api_platform:
        title:  Sonata News API
        version:  v1
        endpoints:
            /news:
                name:  news_list
                methods:  [GET]
                normalization_context:  {'groups': ['news:read']}
            /news/{id}:
                name:  news_read
                methods:  [GET]
                normalization_context:  {'groups': ['news:read']}
    
  3. 创建一个实体表示新闻,并在 config/packages/api_platform.yaml 中声明:

    api_platform:
        # ...
        models:
            App\Entity\News:
                short_name:  News
                graphql:
                    type:  Mutation
                    query:  false
                    input:  App\Entity\News
                    payload:  App\Entity\NewsInput
    
  4. 创建一个控制器来处理 API 请求:

    // src/Controller/NewsController.php
    namespace App\Controller;
    
    use App\Entity\News;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Component\HttpFoundation\Request;
    
    class NewsController extends AbstractController
    {
        public function getNews(Request $request): JsonResponse
        {
            $id = $request->get('id');
            $news = $this->getDoctrine()->getRepository(News::class)->find($id);
    
            if (!$news) {
                return new JsonResponse(['message' => 'News not found'], 404);
            }
    
            return new JsonResponse($news);
        }
    
        public function getNewsList(Request $request): JsonResponse
        {
            $news = $this->getDoctrine()->getRepository(News::class)->findAll();
    
            return new JsonResponse($news);
        }
    }
    

4. 项目安装方式

SonataNewsBundle 可以通过以下方式安装:

使用 Composer

推荐使用 Composer 来安装 SonataNewsBundle。在命令行中执行以下命令:

composer require sonata-project/news-bundle

然后按照上文提到的步骤完成安装。

手动安装

  1. 下载 SonataNewsBundle 的最新稳定版本。
  2. 将下载的文件解压到项目的 bundles 目录下。
  3. config/bundles.php 文件中注册 Bundle。
  4. 执行数据库迁移和清理缓存操作。
登录后查看全文
热门项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
138
188
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
94
15
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
187
266
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
893
529
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.09 K
0
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
372
387
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
337
1.11 K
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
401
377