In the previous article, we briefly discussed the laravel template theme function. In this article, we continue to discuss the implementation of the laravel template theme function. In this article The first implementation is relatively heavy, so take a look at it if you are interested.
In a previous article, I introduced how to dynamically change the template file path to implement the theme function by defining the Response macro: laravel implements the template theme function, but later I discovered that this method has a drawback, in the template When using @extends, you must explicitly specify the template path, which may cause confusion. I decided to change my mind. The theme should be completely isolated. If it does not exist, it does not exist. Do not automatically go to another theme to find an alternative template.
The original way of defining the response macro can be implemented, but I decided to use a more standardized method.
There is a method View::addNamespace in laravel's View class. This method is mentioned in the "Developing Extension Packages" section of the manual. I have to say that the layout logic of the Laravel manual is confusing. The description of this method should be placed in "View" Chapters are, so I won’t go into the digression. Let’s talk about this method first.
There is a way to write laravel rendering view:
Copy the code The code is as follows:
How to define namespace is through this method:
The code is as follows:
Smart friends may have noticed that this function can help us theme the template, such as:
The code is as follows:
Call after
:
The code is as follows:
However, we need to register the path mapping of these themes through the View::addNamespace method in advance, and we need to explicitly specify the namespace when rendering.
I don’t think it’s very convenient. Can’t View set a default namespace? In this way we only need to set it once, for example:
The code is as follows:
After
:
The code is as follows:
Furthermore, we can set the theme through the background, write the theme name into the database, and the front-end reads and sets the theme:
The code is as follows: