Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Twig Laravel Package

pagerfanta/twig

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require pagerfanta/twig
    

    Ensure pagerfanta/pagerfanta is also installed (core library).

  2. Basic Twig Integration Add the extension to your Twig environment in app/Providers/AppServiceProvider.php:

    use Pagerfanta\Twig\PagerfantaExtension;
    
    public function register()
    {
        $this->app->make('twig')->addExtension(new PagerfantaExtension());
    }
    
  3. First Use Case In your controller, create a paginated result set:

    use Pagerfanta\Pagerfanta;
    use Pagerfanta\Adapter\ArrayAdapter;
    
    $adapter = new ArrayAdapter($yourDataArray);
    $pagerfanta = new Pagerfanta(new \Pagerfanta\Adapter\ArrayAdapter($adapter));
    $pagerfanta->setMaxPerPage(10);
    

    Pass to Twig:

    return view('your_view', ['pagerfanta' => $pagerfanta]);
    

    Render in Twig:

    {% pagerfanta pagerfanta %}
    

Implementation Patterns

Common Workflows

  1. Dynamic Pagination Use Twig’s pagerfanta tag with custom templates:

    {% pagerfanta pagerfanta with {
        'previous': 'Previous',
        'next': 'Next',
        'item': 'item.html.twig',
        'empty': 'empty.html.twig'
    } %}
    
  2. Integration with Eloquent Combine with Laravel’s Illuminate\Pagination\LengthAwarePaginator:

    $paginator = (new LengthAwarePaginator($items, $total, $perPage))->toArray();
    $adapter = new ArrayAdapter($paginator['data']);
    $pagerfanta = new Pagerfanta($adapter);
    
  3. Custom Sliding Windows Configure Pagerfanta before passing to Twig:

    $pagerfanta->setMaxPerPage(15);
    $pagerfanta->setCurrentPage($request->get('page', 1));
    
  4. AJAX Pagination Use Twig’s pagerfanta with data-* attributes for JS hooks:

    {% pagerfanta pagerfanta with {
        'item': 'ajax_item.html.twig',
        'previous': '<a data-page="{{ pagerfanta.previous }}">Prev</a>'
    } %}
    

Gotchas and Tips

Pitfalls

  1. Twig Extension Registration

    • Forgetting to register PagerfantaExtension in AppServiceProvider will break pagination tags.
    • Fix: Verify addExtension() is called in register().
  2. Adapter Mismatch

    • Using ArrayAdapter with non-array data (e.g., Eloquent collections) may cause errors.
    • Fix: Convert to array first:
      $adapter = new ArrayAdapter($items->toArray());
      
  3. Caching Issues

    • Pagerfanta’s state (current page, max per page) isn’t cached by default.
    • Tip: Store in session or request for multi-page consistency:
      $pagerfanta->setCurrentPage($request->session()->get('page', 1));
      
  4. Twig Template Overrides

    • Custom templates must exist in Twig’s load path (e.g., resources/views/).
    • Debug: Check Twig’s getLoader() for missing templates.

Pro Tips

  1. Laravel-Specific Shortcuts Use collect() for seamless pagination:

    $pagerfanta = (new Pagerfanta(new ArrayAdapter(
        $items->collect()->toArray()
    )))->setMaxPerPage(10);
    
  2. Dynamic Template Paths Override default template paths in config/twig.php:

    'paths' => [
        resource_path('views/pagerfanta'),
    ],
    
  3. Performance

    • For large datasets, use Pagerfanta\Adapter\DoctrineORMAdapter or Pagerfanta\Adapter\MongoDBAdapter instead of ArrayAdapter.
    • Tip: Lazy-load data with Pagerfanta\Adapter\CallbackAdapter.
  4. Testing Mock Pagerfanta in PHPUnit:

    $mockAdapter = $this->createMock(ArrayAdapter::class);
    $mockAdapter->method('getSlice')->willReturn([...]);
    $pagerfanta = new Pagerfanta($mockAdapter);
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor
spatie/laravel-javascript-views