|  Download ChessBundleInstallationRun composer require p-chess/chess-bundle ConfigurationCreate a service that extends PChess\ChessBundle\HtmlOutputand
implements required methods.
You probably want to inject Symfony's router service here, and use it
to return required URLs.
Note that each route can be provided with an identifier for your game. Create a configuration file, and use a content like the following: # config/packages/chess.yaml
chess:
    output_service: App\YourOutputService
 This is an example of how routes can be defined (using an "id" parameter as identifier): # config/routes.yaml
move_start:
    path: /{id}/move/{from}
    methods: GET
    controller: ... # your controller action
move_cancel:
    path: /{id}
    methods: GET
    controller: ... # your controller action
move_promotion:
    path: /{id}/promote/{from}/{to}
    methods: GET
    controller: ... # your controller action
move_end:
    path: /{id}/move/{from}/{to}/{promotion}
    methods: GET
    controller: ... # your controller action
    defaults:
        promotion: ~
 UsageYou can inject a service implementing \PChess\ChessBundle\ChessProviderInterfacein your controller, then
implement different actions, using provided\PChess\Chess\Chessobject. In your template, you can use Twig function chess_render(chess)to render the board.
If you need to pass an identifier, usechess_render(chess, identifier)instead. The main service you can use is \PChess\ChessBundle\SessionChessProvider.
This service allows you to keep chess games in session, providing following methods: 
`getChess($identifier, $fen)` to get main `\PChess\Chess\Chess` instance (as provided by interface)
`restart($identifier)` to restart the game
`save($identifier)` to save the game in session
`reverse($identifier)` to switch sides
`getAllowedMoves($chess, $from)` to get a list of currently allowed moves (optionally limited to `$from` square)
 Using $identifieris not mandatory. StylingYou can use provided _board.scssfile to style the board: @import '~@p-chess/chess-bundle/scss/board';
 Don't forget to update your frontend files, using npm or yarn. The final result should be something like this: <img src="https://user-images.githubusercontent.com/179866/114995898-92cf1b80-9e9e-11eb-8e99-75a60bbba6bd.png" alt=""> Persisting a Chess objectYou can easily save a Chessobject into Doctrine (or other kind of mapping libraries), using two fields/properties:fen, andhistory.
The first one is a simple string. The second one can be asimple_array(for Doctrine), where you should put
the result ofMover::getHistoryStrings()method.
When retrieving an object, you should usefenand the result ofMover::getHistoryEntries()to build back yourChessobject. |