binsoul/symfony-bundle-website
## Getting Started
### Minimal Setup
1. **Installation**
```bash
composer require binsoul/symfony-bundle-website
Register the bundle in your config/bundles.php:
return [
// ...
Binsoul\WebsiteBundle\WebsiteBundle::class => ['all' => true],
];
First Use Case: Basic Page Rendering
The bundle likely provides a WebsiteController or similar. Check the src/Resources/config/routes.yaml (if included) for default routes. For a Laravel equivalent, assume it offers a templating system (e.g., Twig-like) for static pages.
Example (hypothetical):
// routes/web.php
use Binsoul\WebsiteBundle\Controller\WebsiteController;
Route::get('/about', [WebsiteController::class, 'show'])->name('website.about');
src/Controller/ for controllers.src/Resources/views/ for templates (if bundled).src/DependencyInjection/ for configuration.Configuration
Override default settings via config/packages/binsoul_website.yaml (Symfony-style). For Laravel, adapt to .env or config/website.php:
# Example (adapt to Laravel)
website:
default_template: 'base.html.twig'
cache_enabled: true
Assumed Pattern: The bundle likely integrates with Twig (Symfony) or provides a Blade-like wrapper. For Laravel:
render() helper (if available) to output pages:
return $this->render('pages/about', ['title' => 'About Us']);
resources/views/layouts/base.blade.php.Dynamic Content:
WebsiteService) or repositories:
$pages = app(\Binsoul\WebsiteBundle\Service\PageService::class)->getPublishedPages();
return view('website.page', compact('pages'));
path() with Laravel’s route():
// Symfony: $this->generateUrl('website.about')
// Laravel: route('website.about')
routes/web.php with namespaced controllers:
Route::prefix('website')->group(function () {
Route::get('/{page}', [WebsiteController::class, 'show'])->name('website.page');
});
public/bundles/website/ (Symfony convention). In Laravel:
mix or vite to compile assets to public/build/.<link href="{{ asset('build/css/website.css') }}" rel="stylesheet">
translations/ in the bundle. In Laravel:
php artisan vendor:publish --tag=website-translations
__() helper:
__('website.welcome_message')
config/website.php:
'cache' => [
'enabled' => env('WEBSITE_CACHE_ENABLED', true),
'driver' => 'file', // or 'redis'
],
php artisan cache:clear
Symfony vs. Laravel Abstraction Layer:
Container, Twig, and DependencyInjection. For Laravel:
symfony/dependency-injection bridge).class WebsiteService extends Service
{
public function __construct(private PageRepository $repository) {}
}
Missing Laravel-Specific Features:
Auth. Manually guard routes:
Route::get('/dashboard', [WebsiteController::class, 'dashboard'])->middleware('auth');
app/Http/Kernel.php:
protected $routeMiddleware = [
'website.cache' => \Binsoul\WebsiteBundle\Middleware\CacheMiddleware::class,
];
Template Inheritance:
@extends:
@extends('website::layouts.base')
@section('content')
{{ $slot }}
@endsection
Database Migrations:
pages table). Publish and adapt:
php artisan vendor:publish --tag=website-migrations
database/migrations/ to fit Laravel’s schema builder.Service Not Found:
config/bundles.php (Symfony) or AppServiceProvider (Laravel):
public function register()
{
$this->app->bind(\Binsoul\WebsiteBundle\Service\PageService::class, function ($app) {
return new \Binsoul\WebsiteBundle\Service\PageService($app['db']);
});
}
Route Conflicts:
Route::get('/pages/{page:slug}', [WebsiteController::class, 'show']);
Asset Loading Issues:
php artisan cache:clear
php artisan config:clear
Custom Controllers:
namespace App\Http\Controllers;
use Binsoul\WebsiteBundle\Controller\AbstractWebsiteController;
class CustomWebsiteController extends AbstractWebsiteController
{
public function customAction() { /* ... */ }
}
Event Listeners:
WebsitePagePublished):
use Binsoul\WebsiteBundle\Event\PagePublishedEvent;
public function handle(PagePublishedEvent $event)
{
Log::info("Page published: {$event->getPage()->getSlug()}");
}
EventServiceProvider:
protected $listen = [
PagePublishedEvent::class => [
\App\Listeners\LogPagePublish::class,
],
];
Custom Templates:
php artisan vendor:publish --tag=website-views
resources/views/vendor/website/.API Integration:
namespace App\Http\Resources;
use Binsoul\WebsiteBundle\Entity\Page;
use Illuminate\Http\Resources\Json\JsonResource;
class PageResource extends JsonResource
{
public function toArray($request)
{
return ['slug' => $this->slug, 'title' => $this->title];
}
}
---
How can I help you explore Laravel packages today?