In Symfony I'm using TCPDF package for creating PDF documents and I have it installed via composer. I need to modify TCPDF
class a little before I use it in production, so I created MyPDF
class that extends TCPDF
class and that is stored in the same file as original class (Symfony-project/vendor/tecnick.com/tcpdf/tcpdf.php
).
Problem is, that every time I update composer and new version of TCPDF package is installed, file tcpdf.php
is being replaced, so class MyPDF
disappears. What is consider as best practice for creating and storing such classes?
You should not work in the vendor/
directory. It is preserved for external code only. Here is what you can do:
You could create a service that extends the TCPDF classes. Here is my service definition using this repository:
<service id="pdfgenerator" class="TCPDF">
<file>%kernel.root_dir%/../vendor/r1pp3rj4ck/tcpdf/tcpdf.php</file>
<argument key="orientation">P</argument>
<argument key="unit">mm</argument>
<argument key="format">A4</argument>
</service>
Your can extend this service as you like.
See the Github HowTo on how to fork a repository. After you have your own fork you can edit the code to your needs. After you are done and your repository is ready you just include your own repository instead of the current TCPDF repository. See the composer docs for more information. You should add something like this to your composer.json
:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/..."
}
],
"require": {
".../tcpdf": "dev-master"
}
}