docs updated
This commit is contained in:
parent
d162e456a6
commit
42a6e0734a
@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* [Install Composer](https://www.nickyeoman.com/page/install-composer-on-ubuntu) (sudo nala install php-curl php-xml php-mysql)
|
* ubuntu php-cli (sudo nala install php-curl php-xml php-mysql)
|
||||||
|
* [Install Composer](https://www.nickyeoman.com/page/install-composer-on-ubuntu)
|
||||||
* [Symfony cli](https://symfony.com/download)
|
* [Symfony cli](https://symfony.com/download)
|
||||||
* php-cli
|
|
||||||
|
|
||||||
## Create your Project
|
## Create your Project
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ echo "DBUSER=theuser${GEN}" >> .env
|
|||||||
GEN=`echo $RANDOM | md5sum | head -c 12`
|
GEN=`echo $RANDOM | md5sum | head -c 12`
|
||||||
echo "DBPASSWORD=${GEN}" >> .env
|
echo "DBPASSWORD=${GEN}" >> .env
|
||||||
echo '' >> .env
|
echo '' >> .env
|
||||||
echo '# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4"' >> .env
|
echo '# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=mariadb-10.4.11&charset=utf8mb4"' >> .env
|
||||||
|
|
||||||
|
|
||||||
# TODO: move these here after you have symfony production ready
|
# TODO: move these here after you have symfony production ready
|
||||||
|
120
docs/Bundles.md
120
docs/Bundles.md
@ -2,23 +2,123 @@
|
|||||||
|
|
||||||
## How to Create a bundle
|
## How to Create a bundle
|
||||||
|
|
||||||
[Official Symfony Docs - Create a bundle](https://symfony.com/doc/current/bundles.html#creating-a-bundle)
|
First we are going to get the bundle functioning in an existing project, then move it to composer/packigst.
|
||||||
|
|
||||||
mkdir -p lib/bundleName/src
|
### Create files and directories
|
||||||
touch lib/bundleName/src/bundleName.php
|
|
||||||
|
|
||||||
You have to add the namespace\bundle name to config/bundles.php
|
Example:
|
||||||
```vendorName\bundleName\bundleName::class => ['all' => true],```
|
```bash
|
||||||
|
newdirs='lib/ContactForm/src'
|
||||||
And you have to auto load the class by adding the next line in composer.json:
|
mkdir -p ${newdirs}/Controller ${newdirs}/Controller ${newdirs}/Entity ${newdirs}/Repoository ${newdirs}/DependencyInjection
|
||||||
|
touch ${newdirs}/Controller/ContactFormController.php
|
||||||
|
touch ${newdirs}/ContactForm.php
|
||||||
|
touch ${newdirs}/Controller/ContactForm.php
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The ContactFormController.php example:
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
namespace NickYeoman\ContactForm\Controller;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
|
|
||||||
|
class ContactForm extends AbstractController
|
||||||
|
{
|
||||||
|
|
||||||
|
#[Route('/contact-us', name: 'contactform_form')]
|
||||||
|
public function index() {
|
||||||
|
return $this->render('@SymfonyCMS/dashboard.html.twig', [
|
||||||
|
'controller_name' => 'ContactFormController',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
You will have to make changes to namespace, classname, route, render.
|
||||||
|
|
||||||
|
The ContactForm.php file example:
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace NickYeoman\ContactForm;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
|
class ContactForm extends Bundle
|
||||||
|
{
|
||||||
|
// empty is fine, it will still load
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Symfony Bundle Functioning
|
||||||
|
|
||||||
|
First you have to tell composer where to autoload from ``` "vendorName\\bundleName\\": "lib/bundleName/src/",```. In the file composer.json modify the autoload line, for example:
|
||||||
|
|
||||||
|
```json
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"vendorName\\bundleName\\": "lib/bundleName/src/",
|
"NickYeoman\\ContactForm\\": "lib/ContactForm/src/",
|
||||||
"App\\": "src/"
|
"App\\": "src/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
```
|
```
|
||||||
(replace vendorName\bundleName and make sure the directory is correct)
|
|
||||||
|
|
||||||
run ```composer dump-autoload``` after updating the composer.json
|
and then run ```composer dump-autoload```.
|
||||||
|
|
||||||
|
Next, you have to add the namespace\bundle name to config/bundles.php
|
||||||
|
```vendorName\bundleName\bundleName::class => ['all' => true],```
|
||||||
|
composer would do this automatically if it was grabbing from packigst, but we are just using a dev environment for now. Example:
|
||||||
|
```php
|
||||||
|
NickYeoman\ContactForm\ContactForm::class => ['all' => true],
|
||||||
|
```
|
||||||
|
|
||||||
|
### Symfony Bundle Config
|
||||||
|
|
||||||
|
Create a DependencyInjection file:
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
namespace NickYeoman\ContactForm\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\Config\FileLocator;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Extension\Extension;
|
||||||
|
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||||
|
|
||||||
|
class ContactFormExtension extends Extension
|
||||||
|
{
|
||||||
|
public function load(array $configs, ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
|
||||||
|
$loader = new YamlFileLoader(
|
||||||
|
$container,
|
||||||
|
new FileLocator(__DIR__.'/../../config')
|
||||||
|
);
|
||||||
|
$loader->load('services.yaml');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Next create a service in config/services.yaml:
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
NickYeoman\ContactForm\Controller\:
|
||||||
|
resource: '../src/Controller/'
|
||||||
|
tags: ['controller.service_arguments']
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, you can specify the route. Create a new route file config/routes.yaml
|
||||||
|
```yaml
|
||||||
|
ContactForm:
|
||||||
|
resource:
|
||||||
|
path: ../src/Controller/
|
||||||
|
namespace: NickYeoman\ContactForm\Controller
|
||||||
|
type: attribute
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
* [Official Symfony Docs - Create a bundle](https://symfony.com/doc/current/bundles.html#creating-a-bundle)
|
||||||
|
* [Symfony casts - Bootstrapping](https://symfonycasts.com/screencast/symfony-bundle/bundle-directory)
|
@ -2,4 +2,6 @@
|
|||||||
|
|
||||||
* [Symfony 6 full course](https://www.youtube.com/watch?v=QPky3r2prEI)
|
* [Symfony 6 full course](https://www.youtube.com/watch?v=QPky3r2prEI)
|
||||||
* [Symfony6 for beginners](https://www.youtube.com/watch?v=PMERdlfL6LE&list=PLFHz2csJcgk-t8ErN1BHUUxTNj45dkSqS)
|
* [Symfony6 for beginners](https://www.youtube.com/watch?v=PMERdlfL6LE&list=PLFHz2csJcgk-t8ErN1BHUUxTNj45dkSqS)
|
||||||
* [Symfonycasts](https://symfonycasts.com/tracks/symfony)
|
* [Symfonycasts](https://symfonycasts.com/tracks/symfony)
|
||||||
|
* https://github.com/msalsas/symfony-bundle-skeleton
|
||||||
|
* [bundle medium](https://macrini.medium.com/how-to-create-service-bundles-for-a-symfony-application-f266ecf01fca)
|
||||||
|
Reference in New Issue
Block a user