Better to pass Laravel Collection or array to Blade template? - laravel-blade

What are the pros and cons of passing a Laravel Collection versus a regular array into a Blade template?

Related

How would I go extending timber to be able to use handles as references in includes?

We use fractal.js with a twig engine to prototype websites. Fractal.js brings a handy functionality to be able to use handles in includes.
So instead of writing {% include 'templates/components/teaser/basicTeaser.twig' %}, you can just write {% include '#basicteaser' %}. See: https://fractal.build/guide/core-concepts/naming.html#referencing-other-items
Of course that relies on unique components names, which I am happy to have anyway.
Could anybody point me in the right direction on how to extend timber or twig to use such handles?
Many thanks!
Twig already offers the option to load templates from an array of directories rather than just one.
$loader = new \Twig\Loader\FilesystemLoader([$templateDir1, $templateDir2]);
Plus, before passing the loader to the environment object, you can add paths for custom namespaces, i.e.:
$loader->addPath($templateDir, 'admin');
Then you can use you namespace like this:
$twig->render('#admin/index.html', []);
https://twig.symfony.com/doc/3.x/api.html#built-in-loaders
I know this is an old question and this might not be relevant to the OP anymore, but we needed the same thing and developed a WordPress plugin to bridge Timber + Fractal. You can export your Fractal components to the components-map.json file, then the loader will read the map and convert those component names to file paths.

Handlebars instead of Sightly HTL

Can I use the handlebars to build my components for a website, if yes what are the limitations of using Handlebars over Sightly?
Is it advisable to create my own handlebar scripting engine or I can use the one being used for SCF? If I use AEM Communities Handlebars Scripting Engine is there any licensing complication that I need to be aware of?
You can use handlebars to build your component. One key difference between handlebars and HTl (Sightly) is that HTl is server-side templating while handlebars can be used on both serverside and clientside.

template twig not found

I have a problem with a render function in my controller.
I have:
a bundle, named CoreBundle
a controller named DefaultController
in which I have an action named loginAction
in which I am trying to render a template twig with this line
return $this->render('FooCoreBundle::Default:layout.html.twig', array());
I am always having the same not found error for the template. I have tried with an other template twig it is the same problem. In my views folder I have a Accueil folder in which i have put the login.html.twig template I want to render.
I tried to replace it directly in views folder but no changes. Sorry for my english hope you can help. Thank You.
A worth-while reading piece of info from the documentation:
Symfony uses a bundle:directory:filename string syntax for
templates that live inside a bundle. This allows for several types of
templates, each which lives in a specific location.
Supposing:
FooCoreBundle is your bundle -> src/Foo/CoreBundle
Default is the template directory -> src/Foo/CoreBundle/Resources/views/Default
layout.html.twig is your file -> src/Foo/CoreBundle/Resources/views/Default/layout.html.twig
Then the route you should use would be 'FooCoreBundle:Default:layout.html.twig' without the :: you're using in 'FooCoreBundle::Default:layout.html.twig'
The :: refers to a base template specific to the bundle. If you used FooCoreBundle::layout.html.twig then your template should live at Resources/views/layout.html.twig inside FooCoreBundle.
Hope this clarifies things.
You should use
return $this->render('NeobeCoreBundle:Default:Accueil:layout.html.twig', array());
No double colon, add the Accueil subfolder
It is not really an answer, but it could be handy for those who arrives here with symfony 4.
In documentation authors says do not organize your business logic into bundles.
In modern Symfony applications, it's no longer recommended to organize your business logic using bundles.
Of course you can, just not recommended. See here.

define custom filesystem path for twig templates

I've already read How does Symfony2 detect where to load templates from? and another ton of articles on the web
The question was quite similar to mine, but the answer wasn't comprehensive.
I need to override a bundle-defined template inside another custom bundle. In other words I want specify another path where symfony have to look before looking in app/Resources when loading templates.
Workflow should be something like this:
first: /src/My/Bundle/Resources/views/example.html.twig (or /src/My/Bundle/OriginalBundle/views/example.html.twig)
then: /app/Resources/OriginalBundle/views/example.html.twig
finally: /src/Original/Bundle/Resources/views/example.html.twig
The standard app/Resources -> src/Original/Bundle isn't enough.
sorry for my poor english and thank you
There's a native feature to do exactly what you want in a nice way. Escentially you can add a twig namespace to the twig configuration in app/config.yml like this:
twig:
# ...
paths:
"%kernel.root_dir%/../vendor/acme/foo-bar/templates": foo_bar
This creates an alias to the folder vendor/acme/foo-bar/templates and then you can use it to render your templates either from the controllers:
return $this->render(
'#foo_bar/template.html.twig',
$data
);
or from other twig templates
{% include '#foo_bar/template.html.twig' %}
Source: official cookbook http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html
To add a directory for twig templates I do this:
chdir(__DIR__);
$this->container->get('twig.loader')->addPath('../../../../web/templates/', $namespace = '__main__');
this allows me to put twig templates in a folder called 'templates' in the web folder and symfony 2.3 has no issues loading them.
The class responsible for loading twig templates is stored at the service id twig.loader, which by default is an instance of Symfony\Bundle\TwigBundle\Loader\FilesystemLoader, and the class for locating templates is stored at the service id templating.locator and by default is an instance of the class Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator (which itself is injected as the first parameter to twig.loader)
So, in theory, all you would need to do is write your own class that implements Symfony\Component\Config\FileLocatorInterface (or extends Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator) and then inform the configuration to use your class (which I was going to look up how to do this for you, but Symfony's websites are down right now)

Preprocessing ASP.NET MVC Razor views

I want to do some preprocessing on my views before they are parsed by the Razor template engine. The only way I found so far is by extending the RazorTemplateEngine class and overriding the CreateParser method, where I can return a custom parser that does the preprocessing before calling the base parser.
Now my problem is - how can I make Razor use my custom template engine?
I don't know if that will work for you but it should :)
try to add
#inherits YourRazorTemplateEngine
in the head of your views.
for more information look at this page

Resources