{"id":1099,"date":"2025-06-12T12:55:12","date_gmt":"2025-06-12T04:55:12","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1099.html"},"modified":"2025-06-12T12:55:12","modified_gmt":"2025-06-12T04:55:12","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8symfony%e5%92%8cdoctrine%e4%b8%ad%e5%ae%9e%e7%8e%b0%e5%88%86%e9%a1%b5","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1099.html","title":{"rendered":"\u5982\u4f55\u5728Symfony\u548cDoctrine\u4e2d\u5b9e\u73b0\u5206\u9875"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;Symfony&#21644;Doctrine&#20013;&#23454;&#29616;&#20998;&#39029;&#65292;&#21487;&#20197;&#25353;&#29031;&#20197;&#19979;&#27493;&#39588;&#36827;&#34892;&#65306;<\/p>\n<ol>\n<li><strong>&#37197;&#32622;&#36335;&#30001;<\/strong>&#65306;&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#22312;<code>routing.yml<\/code>&#25991;&#20214;&#20013;&#37197;&#32622;&#20998;&#39029;&#30340;&#36335;&#30001;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-yaml\"># routing.yml\npage:\n    path: \/page\/{page}\n    defaults:\n        _controller: AppControllerPageController::indexAction<\/code><\/pre>\n<ol start=\"2\">\n<li><strong>&#21019;&#24314;&#25511;&#21046;&#22120;&#26041;&#27861;<\/strong>&#65306;&#22312;<code>PageController.php<\/code>&#20013;&#21019;&#24314;&#19968;&#20010;&#26041;&#27861;&#26469;&#22788;&#29702;&#20998;&#39029;&#36923;&#36753;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/PageController.php\nnamespace AppController;\n\nuse DoctrineORMEntityManagerInterface;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass PageController extends AbstractController\n{\n    private $entityManager;\n\n    public function __construct(EntityManagerInterface $entityManager)\n    {\n        $this-&gt;entityManager = $entityManager;\n    }\n\n    \/**\n     * @Route(\"\/page\/{page}\", name=\"app_page_index\")\n     *\/\n    public function indexAction(Request $request, int $page): Response\n    {\n        \/\/ &#27599;&#39029;&#26174;&#31034;&#22810;&#23569;&#26465;&#35760;&#24405;\n        $limit = 10;\n        \/\/ &#35745;&#31639;&#24635;&#35760;&#24405;&#25968;\n        $totalRecords = $this-&gt;entityManager-&gt;getRepository('AppEntityYourEntity')-&gt;count();\n        \/\/ &#35745;&#31639;&#24635;&#39029;&#25968;\n        $ totalPages = ceil($totalRecords \/ $limit);\n\n        \/\/ &#30830;&#20445;&#24403;&#21069;&#39029;&#30721;&#22312;&#26377;&#25928;&#33539;&#22260;&#20869;\n        if ($page &lt; 1 || $page &gt; $totalPages) {\n            throw new OutOfBoundsException(\"Invalid page number\");\n        }\n\n        \/\/ &#33719;&#21462;&#24403;&#21069;&#39029;&#30340;&#25968;&#25454;\n        $offset = ($page - 1) * $limit;\n        $entities = $this-&gt;entityManager-&gt;getRepository('AppEntityYourEntity')\n            -&gt;findBy([], ['id' =&gt; 'DESC'], $limit, $offset);\n\n        return $this-&gt;render('page\/index.html.twig', [\n            'entities' =&gt; $entities,\n            'currentPage' =&gt; $page,\n            'totalPages' =&gt; $totalPages,\n        ]);\n    }\n}<\/code><\/pre>\n<ol start=\"3\">\n<li><strong>&#21019;&#24314;&#27169;&#26495;<\/strong>&#65306;&#22312;<code>templates\/page\/index.html.twig<\/code>&#20013;&#21019;&#24314;&#20998;&#39029;&#30340;HTML&#27169;&#26495;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-twig\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;Page&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Page {{ currentPage }}&lt;\/h1&gt;\n    &lt;ul&gt;\n        {% for entity in entities %}\n            &lt;li&gt;{{ entity.name }}&lt;\/li&gt;\n        {% endfor %}\n    &lt;\/ul&gt;\n\n    &lt;!-- &#20998;&#39029;&#23548;&#33322; --&gt;\n    &lt;nav&gt;\n        {% if currentPage &gt; 1 %}\n            &lt;a href=\"{{ path('app_page_index', {page: currentPage - 1}) }}\"&gt;Previous&lt;\/a&gt;\n        {% endif %}\n\n        {% for i in range(1, totalPages + 1) %}\n            &lt;a href=\"{{ path('app_page_index', {page: i}) }}\"&gt;{{ i }}&lt;\/a&gt;\n        {% endfor %}\n\n        {% if currentPage &lt; totalPages %}\n            &lt;a href=\"{{ path('app_page_index', {page: currentPage + 1}) }}\"&gt;Next&lt;\/a&gt;\n        {% endif %}\n    &lt;\/nav&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312;Symfony&#21644;Doctrine&#20013;&#25104;&#21151;&#23454;&#29616;&#20998;&#39029;&#21151;&#33021;&#12290;&#20320;&#21487;&#20197;&#26681;&#25454;&#38656;&#35201;&#35843;&#25972;&#27599;&#39029;&#26174;&#31034;&#30340;&#35760;&#24405;&#25968;&#12289;&#25490;&#24207;&#26465;&#20214;&#31561;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#27010;&#36848;<\/h2><p>&#20998;&#39029;&#26159;&#35768;&#22810;&#22788;&#29702;&#22823;&#25968;&#25454;&#38598;&#30340;Web&#24212;&#29992;&#31243;&#24207;&#30340;&#20851;&#38190;&#21151;&#33021;&#12290;&#22312;Symfony&#20013;&#65292;&#36890;&#36807;&#20351;&#29992;Doctrine ORM&#21487;&#20197;&#31616;&#21270;&#23454;&#29616;&#20998;&#39029;&#30340;&#36807;&#31243;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#36880;&#27493;&#20171;&#32461;&#22914;&#20309;&#20026;&#24744;&#30340;Symfony&#39033;&#30446;&#28155;&#21152;&#39640;&#25928;&#20998;&#39029;&#30340;&#21151;&#33021;&#12290;<\/p><h3>&#29702;&#35299;&#20998;&#39029;<\/h3><p>&#20998;&#39029;&#28041;&#21450;&#23558;&#25968;&#25454;&#20998;&#25104;&#31163;&#25955;&#30340;&#39029;&#38754;&#65292;&#20351;&#29992;&#25143;&#33021;&#22815;&#36731;&#26494;&#22320;&#27983;&#35272;&#22823;&#22411;&#25968;&#25454;&#38598;&#32780;&#26080;&#38656;&#23545;&#26381;&#21153;&#22120;&#25110;&#23458;&#25143;&#31471;&#27983;&#35272;&#22120;&#36896;&#25104;&#36807;&#22823;&#21387;&#21147;&#12290;&#20026;&#20102;&#23454;&#29616;&#26368;&#20339;&#29992;&#25143;&#20307;&#39564;&#65292;&#38656;&#35201;&#24179;&#34913;&#21152;&#36733;&#26102;&#38388;&#21644;&#23631;&#24149;&#19978;&#30340;&#26174;&#31034;&#25968;&#25454;&#37327;&#12290;<\/p><h3>&#21069;&#32622;&#26465;&#20214;<\/h3><p>&#19968;&#20010;&#21253;&#21547;&#34920;&#21644;&#25968;&#25454;&#30340;&#25968;&#25454;&#24211;&#65292;&#29992;&#20110;&#20998;&#39029;&#26174;&#31034;&#12290;<\/p><p>Doctrine ORM &#24050;&#23433;&#35013;&#24182;&#37197;&#32622;&#23436;&#25104;&#12290;<\/p><p>&#19968;&#20010;&#24037;&#20316;&#20013;&#30340;Symfony&#39033;&#30446;&#12290;<\/p><h2>&#27493;&#39588;1&#65306;&#21019;&#24314;&#19968;&#20010;&#20179;&#24211;&#20989;&#25968;<\/h2><p>&#31532;&#19968;&#27493;&#26159;&#22312;&#20320;&#30340;&#20179;&#24211;&#31867;&#20013;&#32534;&#20889;&#19968;&#20010;&#20989;&#25968;&#26469;&#33719;&#21462;&#20998;&#39029;&#25968;&#25454;&#12290;&#20363;&#22914;&#65306;<\/p><pre><code>&lt;?php\n\nnamespace AppRepository;\n\nuse DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;\nuse DoctrinePersistenceManagerRegistry;\nuse DoctrineORMToolsPaginationPaginator;\nuse YourNamespaceEntityYourEntity; \/\/ Replace with the actual namespace for YourEntity\n\nclass YourEntityRepository extends ServiceEntityRepository\n{\n    public function __construct(ManagerRegistry $registry)\n    {\n        parent::__construct($registry, YourEntity::class);\n    }\n\n    public function findPaginated(int $currentPage = 1, int $limit = 10)\n    {\n        $query = $this-&gt;createQueryBuilder('e')\n            -&gt;orderBy('e.id', 'ASC')\n            -&gt;getQuery()\n            -&gt;setFirstResult(($currentPage - 1) * $limit)\n            -&gt;setMaxResults($limit);\n\n        return new Paginator($query, true);\n    }\n}<\/code><\/pre><p>&#35813;&#21151;&#33021;&#20351;&#29992;Doctrine&#30340;QueryBuilder&#21019;&#24314;&#26597;&#35810;&#65292;&#24182;&#35774;&#32622;&#20998;&#39029;&#21442;&#25968;&#65292;&#28982;&#21518;&#20351;&#29992;Paginator&#23545;&#35937;&#33719;&#21462;&#25152;&#38656;&#25968;&#25454;&#30340;&#23376;&#38598;&#12290;<\/p><h2>&#27493;&#39588;2&#65306;&#22312;&#25511;&#21046;&#22120;&#20013;&#28155;&#21152;&#20998;&#39029;&#21151;&#33021;<\/h2><p>&#29616;&#22312;&#65292;&#35753;&#25105;&#20204;&#22312;&#36127;&#36131;&#26174;&#31034;&#20998;&#39029;&#32467;&#26524;&#30340;&#25511;&#21046;&#22120;&#20013;&#22788;&#29702;&#20998;&#39029;&#36923;&#36753;&#12290;&#36825;&#37324;&#26159;&#19968;&#20010;&#31034;&#20363;&#25511;&#21046;&#22120;&#26041;&#27861;&#65306;<\/p><pre><code>&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse AppRepositoryYourEntityRepository;\n\nclass YourEntityController extends AbstractController\n{\n    public function index(YourEntityRepository $repository, Request $request)\n    {\n        $currentPage = $request-&gt;query-&gt;getInt('page', 1);\n        $limit = 10; \/\/ Number of items per page\n\n        $paginator = $repository-&gt;findPaginated($currentPage, $limit);\n\n        return $this-&gt;render('your_template.html.twig', [\n            'paginator' =&gt; $paginator,\n            'currentPage' =&gt; $currentPage,\n            'limit' =&gt; $limit,\n        ]);\n    }\n}\n<\/code><\/pre><p>&#25511;&#21046;&#22120;&#20351;&#29992;&#20102;Repository&#30340;&#20998;&#39029;&#26597;&#35810;&#26041;&#27861;&#65292;&#26681;&#25454;&#24403;&#21069;&#39029;&#25968;&#65292;&#24182;&#23558;Paginator&#23545;&#35937;&#20256;&#36882;&#32473;&#35270;&#22270;&#12290;<\/p><h2>&#27493;&#39588; 3&#65306;&#22312;Twig&#27169;&#26495;&#20013;&#28210;&#26579;&#20998;&#39029;&#12290;<\/h2><p>&#22312;&#20320;&#30340;Twig&#27169;&#26495;&#25991;&#20214;&#20013;&#65292;&#20320;&#38656;&#35201;&#26174;&#31034;&#24744;&#30340;&#39033;&#30446;&#20197;&#21450;&#20998;&#39029;&#30028;&#38754;&#12290;&#20320;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;<\/p><pre><code>{# your_template.html.twig #}\n\n{% for item in paginator %}\n    &lt;!-- Render your item here --&gt;\n{% endfor %}\n\n&lt;!-- Pagination links --&gt;\n&lt;div&gt;\n    {% if paginator.hasPreviousPage() %}\n        &lt;a href=\"?page={{ paginator.previousPage }}\"&gt;&lt;&lt; Prev&lt;\/a&gt;\n    {% endif %}\n\n    Page {{ currentPage }} of {{ paginator|length }}\n\n    {% if paginator.hasNextPage() %}\n        &lt;a href=\"?page={{ paginator.nextPage }}\"&gt;Next &gt;&gt;&lt;\/a&gt;\n    {% endif %}\n&lt;\/div&gt;<\/code><\/pre><p>&#36825;&#20010;&#27169;&#26495;&#29255;&#27573;&#20250;&#36941;&#21382;&#30001;&#20998;&#39029;&#22120;&#36820;&#22238;&#30340;&#39033;&#30446;&#65292;&#28982;&#21518;&#26681;&#25454;&#20998;&#39029;&#22120;&#24403;&#21069;&#30340;&#29366;&#24577;&#28210;&#26579;&#21069;&#19968;&#39029;&#21644;&#21518;&#19968;&#39029;&#30340;&#23548;&#33322;&#38142;&#25509;&#12290;<\/p><h2>&#20998;&#39029;&#30340;&#22909;&#22788;&#21450;&#26377;&#25928;&#20998;&#39029;&#30340;&#25216;&#24039;<\/h2><p>&#23454;&#29616;&#20998;&#39029;&#21487;&#20197;&#26174;&#33879;&#25552;&#39640;Symfony&#24212;&#29992;&#30340;&#24615;&#33021;&#65292;&#20943;&#23569;&#20869;&#23384;&#20351;&#29992;&#21644;&#21152;&#36733;&#26102;&#38388;&#12290;&#23613;&#21487;&#33021;&#36873;&#25321;&#26381;&#21153;&#22120;&#31471;&#20998;&#39029;&#26469;&#20943;&#36731;&#23458;&#25143;&#31471;&#30340;&#35745;&#31639;&#36127;&#25285;&#12290;&#27492;&#22806;&#65292;&#30830;&#20445;&#23548;&#33322;&#30452;&#35266;&#19988;&#25552;&#20379;&#38271;&#21015;&#34920;&#19978;&#30340;&#39318;&#23614;&#39029;&#35775;&#38382;&#38142;&#25509;&#33267;&#20851;&#37325;&#35201;&#12290;<\/p><p>&#36991;&#20813;OFFSET&#22312;&#22823;&#25968;&#25454;&#38598;&#20013;&#30340;&#20351;&#29992;&#65306;&#23545;&#20110;&#38750;&#24120;&#22823;&#30340;&#25968;&#25454;&#38598;&#65292;&#20351;&#29992;OFFSET&#65288;&#36825;&#26412;&#36523;&#23601;&#26159;&#20998;&#39029;&#36923;&#36753;&#30340;&#19968;&#37096;&#20998;&#65289;&#21487;&#33021;&#20250;&#21464;&#24471;&#25928;&#29575;&#20302;&#19979;&#12290;&#24314;&#35758;&#32771;&#34385;&#23454;&#26045;&#28216;&#26631;&#20998;&#39029;&#25110;&#20854;&#20182;&#31574;&#30053;&#20197;&#25552;&#39640;&#24615;&#33021;&#65292;&#22312;&#24744;&#25193;&#23637;&#26102;&#12290;<\/p><p>&#23450;&#21046;&#21270;&#65306;&#36825;&#37324;&#27010;&#36848;&#30340;&#27493;&#39588;&#26159;Symfony&#19982;Doctrine&#20013;&#30340;&#20998;&#39029;&#22522;&#30784;&#12290;&#24744;&#21487;&#20197;&#26681;&#25454;&#24744;&#30340;&#38656;&#27714;&#36827;&#19968;&#27493;&#33258;&#23450;&#20041;&#20998;&#39029;&#65292;&#20363;&#22914;&#28155;&#21152;&#36807;&#28388;&#21644;&#25490;&#24207;&#21151;&#33021;&#12290;<\/p><p>&#24076;&#26395;&#26412;&#25945;&#31243;&#33021;&#20026;&#24744;&#30340;Symfony&#24212;&#29992;&#20351;&#29992;Doctrine&#23454;&#29616;&#20998;&#39029;&#25552;&#20379;&#19968;&#20010;&#33391;&#22909;&#30340;&#36215;&#28857;&#12290;&#36890;&#36807;&#36825;&#20123;&#31616;&#21333;&#30340;&#27493;&#39588;&#65292;&#24744;&#21487;&#20197;&#20026;&#29992;&#25143;&#25552;&#20379;&#26356;&#22909;&#30340;&#29992;&#25143;&#20307;&#39564;&#65292;&#24182;&#36731;&#26494;&#22788;&#29702;&#22823;&#37327;&#25968;&#25454;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;&#20351;&#29992; Symfony &#21644; Doctrine &#23454;&#29616;&#20998;&#39029;&#26102;&#65292;&#20320;&#21487;&#20197;&#36981;&#24490;&#20197;&#19979;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p>&#21019;&#24314; Doctrine &#25968;&#25454;&#24211;&#31649;&#29702;&#22120;&#65306;&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340; Doctrine &#25968;&#25454;&#24211;&#31649;&#29702;&#22120;&#12290;&#36825;&#21487;&#20197;&#36890;&#36807;&#25191;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#23436;&#25104;&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console doctrine:manager-generator --type=orm --name=MyORMManager<\/code><\/pre>\n<p>&#36825;&#37324; <code>--type<\/code> &#21442;&#25968;&#29992;&#20110;&#25351;&#23450;&#25968;&#25454;&#24211;&#31649;&#29702;&#31995;&#32479;&#31867;&#22411;&#65288;&#20363;&#22914;&#65292;MySQL, PostgreSQL, SQLite &#31561;&#65289;&#65292;&#32780; <code>--name<\/code> &#21442;&#25968;&#29992;&#20110;&#25351;&#23450;&#25968;&#25454;&#24211;&#31649;&#29702;&#22120;&#30340;&#21517;&#31216;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#35774;&#32622;&#20998;&#39029;&#21442;&#25968;&#65306;&#22312;&#21019;&#24314;&#22909;&#30340;&#25968;&#25454;&#24211;&#31649;&#29702;&#22120;&#20043;&#21518;&#65292;&#20320;&#21487;&#20197;&#35774;&#32622;&#20998;&#39029;&#21442;&#25968;&#12290;&#20026;&#27492;&#65292;&#38656;&#35201;&#23450;&#20041;&#19968;&#20010;&#25511;&#21046;&#22120;&#31867;&#65292;&#24182;&#28155;&#21152;&#19968;&#20010;&#21517;&#20026; <code>PageController<\/code> &#30340;&#26041;&#27861;&#12290;&#36825;&#20010;&#26041;&#27861;&#23558;&#25509;&#21463;&#19968;&#20010;&#25968;&#32452;&#20316;&#20026;&#21442;&#25968;&#65292;&#20854;&#20013;&#21253;&#21547;&#20998;&#39029;&#25152;&#38656;&#30340;&#23646;&#24615;&#12290;<\/p>\n<pre><code class=\"language-php\">\n&lt;?php<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>namespace AppController;<\/p>\n<p>use AppEntityArticle;\nuse AppRepositoryArticleRepository;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse DoctrineORMEntityManagerInterface;<\/p>\n<p>class PageController extends AbstractController\n{\n\/**<\/p>\n<ul>\n<li>\n<p>@Route(&#8220;\/articles&#8221;, name=&#8221;articles&#8221;)\n*\/\npublic function index(ArticleRepository $repository): Response\n{\n\/\/ &#33719;&#21462;&#20998;&#39029;&#21442;&#25968;\n$params = $this-&gt;get(&#8216;request&#8217;)-&gt;query-&gt;all();<\/p>\n<pre><code>\/\/ &#35774;&#32622;&#20998;&#39029;&#21442;&#25968;&#21040;ORM&#31649;&#29702;&#22120;\n$entityManager = $this-&gt;getDoctrine()-&gt;getManager();\n$entityManager-&gt;getConnection()-&gt;setFetchMode(PDO::FETCH_CLASS, 'AppEntityArticle');\n\n$page = 1; \/\/ &#40664;&#35748;&#20998;&#39029;&#39029;&#30721;&#20026;1\nif (isset($params['page'])) {\n    $page = $params['page'];\n}\n\n$limit = 5; \/\/ &#27599;&#39029;&#26174;&#31034;&#30340;&#25991;&#31456;&#25968;\n$offset = ($page - 1) * $limit; \/\/ &#35745;&#31639;&#20559;&#31227;&#37327;\n\n$articles = $repository-&gt;findArticlesByTitleLike('%' . $this-&gt;getUser()-&gt;getName() . '%', $offset, $limit);\n\nreturn $this-&gt;render('index.html.twig', [\n    'articles' =&gt; $articles,\n]);<\/code><\/pre>\n<p>}\n}<\/p>\n<pre><code><\/code><\/pre>\n<\/li>\n<\/ul>\n<ol start=\"3\">\n<li>&#20351;&#29992;&#20998;&#39029;&#25511;&#21046;&#22120;&#65306;&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#35843;&#29992; <code>index<\/code> &#26041;&#27861;&#24182;&#20256;&#36882;&#19968;&#20010;&#35831;&#27714;&#23545;&#35937;&#26469;&#33719;&#21462;&#20998;&#39029;&#25968;&#25454;&#12290;&#28982;&#21518;&#65292;&#20320;&#21487;&#20197;&#26681;&#25454;&#36820;&#22238;&#30340;&#25968;&#25454;&#28210;&#26579; HTML &#39029;&#38754;&#12290;\n<pre><code class=\"language-php\">\n$articleService = $this-&gt;get('app.article_service');\n$controller = new PageController($entityManager);\n$response = $controller-&gt;index(new Request());<\/code><\/pre><\/li>\n<\/ol>\n<p>\/\/ &#22312;&#27492;&#22788;&#28210;&#26579;HTML&#39029;&#38754;&#24182;&#36755;&#20986;&#21709;&#24212;<\/p>\n<pre><code>\n4. &#37197;&#32622;&#35270;&#22270;&#35299;&#26512;&#22120;&#65306;&#26368;&#21518;&#19968;&#27493;&#26159;&#37197;&#32622;&#35270;&#22270;&#35299;&#26512;&#22120;&#12290;&#20026;&#20102;&#20351;&#27169;&#26495;&#25991;&#20214;&#33021;&#22815;&#27491;&#30830;&#21152;&#36733;&#65292;&#20320;&#38656;&#35201;&#30830;&#20445;&#23427;&#20204;&#20301;&#20110;&#27491;&#30830;&#30340;&#30446;&#24405;&#19979;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#20551;&#35774;&#27169;&#26495;&#25991;&#20214;&#20301;&#20110; `\/src\/View` &#30446;&#24405;&#19979;&#12290;\n```bash\nphp bin\/console doctrine:schema:update --force<\/code><\/pre>\n<p>&#36825;&#26679;&#65292;&#20320;&#23601;&#23454;&#29616;&#20102;&#20351;&#29992; Symfony &#21644; Doctrine &#23454;&#29616;&#20998;&#39029;&#30340;&#21151;&#33021;&#12290;&#20320;&#21487;&#20197;&#26681;&#25454;&#23454;&#38469;&#38656;&#27714;&#35843;&#25972;&#19978;&#36848;&#20195;&#30721;&#20013;&#30340;&#21464;&#37327;&#20540;&#65292;&#20197;&#20415;&#28385;&#36275;&#29305;&#23450;&#22330;&#26223;&#30340;&#38656;&#27714;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312;Symfony&#21644;Doctrine&#20013;&#23454;&#29616;&#20998;&#39029;&#65292;&#21487;&#20197;&#25353;&#29031;&#20197;&#19979;&#038;#274..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1099","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1099"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1099"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1099"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}