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

Laminas View Laravel Package

laminas/laminas-view

Laminas View provides a flexible view layer for PHP applications, offering template rendering, view models, helpers, and multiple rendering strategies. Integrates with Laminas MVC and works standalone to manage layouts, partials, and output generation.

Deep Wiki
Context7

Getting Started

Start by installing via Composer: composer require laminas/laminas-view. In a Laminas MVC application, it's already wired in via the full skeleton, but for custom setups (e.g., Expressive/Mezzio or standalone), bind the renderer and view manager manually. Begin with the simplest use case: render a PHP template with a ViewModel:

// In a controller action
use Laminas\View\Model\ViewModel;

public function indexAction()
{
    $viewModel = new ViewModel(['title' => 'Hello World']);
    $viewModel->setTemplate('layout/main'); // optional
    return $viewModel;
}

Then create view/layout/main.phtml and view/application/index/index.phtml. The default renderer is Laminas\View\Renderer\PhpRenderer, and templates are resolved automatically using configured view paths. Check config/autoload/global.php for view_manager.template_path_stack.

Implementation Patterns

  • Hierarchical Layouts: Use ViewModel::setParent() or ViewModel::addChild() to nest view models for reusable page structures (e.g., main layout → sidebar → content block).
  • Strategy-Based Rendering: Switch renderers via ViewModel::setTerminal(true) + laminas/laminas-json-parser for JSON APIs, or use JsonModel (if laminas/laminas-mvc is present).
  • Helper Composition: Inject view helpers (e.g., baseUrl(), escapeHtml(), partial()) in templates. Register custom helpers via plugin manager in configuration:
    'view_helpers' => [
        'invokables' => [
            'myHelper' => My\Helper::class,
        ],
    ];
    
  • Escaping Contexts: Use escapeHtml(), escapeJs(), escapeCss(), escapeUrl() explicitly—don’t assume automatic escaping in templates.
  • Templating Engines: Integrate Twig orSmarty via laminas/laminas-view-strategy-twig or custom renderer, but prefer PhpRenderer for tight Laminas integration.

Gotchas and Tips

  • Cache Busting: Template changes won’t reflect if config/cache.php has view_manager.cache_dir enabled—clear cache manually or disable in dev.
  • Helper Injection Pitfalls: View helpers are not injected into controllers—use viewHelperManager or getServiceManager()->get('ViewHelperManager') only inside templates.
  • Renderer Selection: The renderer isn’t auto-switched per route/controller; explicitly set ViewModel::$template or use JsonModel/TerminalViewModel to avoid HTML rendering when JSON is intended.
  • Security: While escaping helpers exist, never rely on them alone—always validate/sanitize input before passing to view models.
  • Testing Tip: Render templates in isolation with Renderer\PhpRenderer and mocked view model—no HTTP stack needed:
    $renderer = new PhpRenderer();
    $renderer->setResolver(new Resolver\TemplateMapResolver(['test' => __DIR__ . '/test.phtml']));
    echo $renderer->render(new ViewModel(['var' => 'test']), 'test');
    
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.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport