dontdrinkandroot/app-integration-bundle
Installation
composer require dontdrinkandroot/app-integration-bundle
Add the bundle to config/bundles.php:
return [
// ...
DontDrinkAndRoot\AppIntegrationBundle\DontDrinkAndRootAppIntegrationBundle::class => ['all' => true],
];
Basic Configuration Publish the default config:
php bin/console dontdrink-and-root:install
This generates:
public/angular-pwa/.config/packages/dontdrink_and_root_app_integration.yaml file.First Use Case: Quick API + PWA Setup
api bundle).php bin/console doctrine:migrations:migrate).symfony serve
http://localhost:8000/angular-pwa/ to see the pre-built Angular PWA shell.README.md in the package repo for setup instructions and examples.config/packages/dontdrink_and_root_app_integration.yaml for API/PWA settings.config/packages/api_platform.yaml (auto-generated API Platform config).public/angular-pwa/ (Angular PWA skeleton).php bin/console list dontdrink-and-root
Key commands:
dontdrink-and-root:install: Sets up initial config.dontdrink-and-root:generate:angular: Regenerates Angular assets (if modified).Define API Resources
Create API Platform resources (e.g., src/Entity/Post.php with #[ApiResource]).
The bundle auto-detects these and updates API Platform config.
Generate Angular Services Use the bundle’s CLI to scaffold Angular services for your API:
php bin/console dontdrink-and-root:generate:angular:service --entity=Post
This creates:
public/angular-pwa/src/app/services/post.service.ts (API client).Integrate with Angular PWA
AppModule in public/angular-pwa/src/app/app.module.ts.this.postService.query().subscribe(posts => {
this.posts = posts;
});
Deploy Static Assets Build the Angular PWA:
cd public/angular-pwa && npm run build
Serve via Symfony’s assets component or a CDN.
API Platform Customization
Override the auto-generated api_platform.yaml by extending the bundle’s config:
# config/packages/api_platform.yaml
imports:
- { resource: "@DontDrinkAndRootAppIntegrationBundle/Resources/config/api_platform.yaml" }
api_platform:
formats:
jsonld: { mime_types: ['application/ld+json'] }
json: { mime_types: ['application/json'] }
Angular Customization The bundle provides a starter template. To customize:
public/angular-pwa/src/app/app.component.html for global layouts.public/angular-pwa/src/styles.scss for theming.ng generate inside the Angular project for new components.Authentication
The bundle supports API Platform’s api_token auth by default. For JWT:
# config/packages/dontdrink_and_root_app_integration.yaml
api_platform:
auth:
provider: jwt
Then generate Angular auth services:
php bin/console dontdrink-and-root:generate:angular:auth
Environment-Specific Config Use Symfony’s parameter bags to switch between dev/prod PWA assets:
# config/packages/dontdrink_and_root_app_integration.yaml
angular_pwa:
base_path: '%env(ANGULAR_PWA_BASE_PATH)%'
Set ANGULAR_PWA_BASE_PATH in .env.
Auto-Generated Config Overwrites
dontdrink-and-root:install command overwrites api_platform.yaml. Back up your config first or extend it as shown above.imports to merge configs instead of replacing.Angular Dependency Conflicts
npm install inside public/angular-pwa/ only after checking compatibility.CORS Issues
config/packages/nelmio_cors.yaml:
paths:
'^/api/':
allow_origin: ['*']
allow_methods: ['GET', 'POST', 'PUT', 'DELETE']
allow_headers: ['*']
max_age: 3600
Hot-Reloading Angular
cd public/angular-pwa && npm run start
public/angular-pwa/proxy.conf.json:
{
"/api": {
"target": "http://localhost:8000",
"secure": false
}
}
API Platform Issues
api_platform.yaml for typos or missing resources.bin/console debug:api to inspect resources.Angular Build Errors
npm run build -- --verbose for detailed errors.php bin/console cache:clear
Console Command Failures
api bundle is installed (composer require api).--verbose for debug output:
php bin/console dontdrink-and-root:install --verbose
Custom Angular Modules
Override the default Angular module by creating a custom one and updating public/angular-pwa/src/app/app.module.ts:
import { CustomModule } from './custom.module';
@NgModule({
imports: [
// Replace default imports with CustomModule
CustomModule,
],
})
export class AppModule {}
Dynamic API Resource Detection
Extend the bundle’s resource detector by implementing DontDrinkAndRoot\AppIntegrationBundle\Detector\ResourceDetectorInterface and tagging your service:
services:
App\Custom\ResourceDetector:
tags: [dontdrink_and_root.resource_detector]
Post-Install Hooks Add logic after installation by creating a subscriber:
use Symfony\Component\Console\Event\ConsoleEvents;
use Symfony\Component\Console\Event\ConsoleTerminateEvent;
class PostInstallSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [
ConsoleEvents::TERMINATE => 'onPostInstall',
];
}
public function onPostInstall(ConsoleTerminateEvent $event) {
if ($event->getCommand()->getName() === 'dontdrink-and-root:install') {
// Custom logic here
}
}
}
Asset Versioning Disable Angular’s default hashing for development:
cd public/angular-pwa && npm run build -- --configuration=development
Or configure in angular.json:
"configurations": {
"development": {
"fileReplacements": [...],
"outputHashing": "none"
}
}
How can I help you explore Laravel packages today?