# |
Jun 17th 2021, 13:59 |
slackebot |
$viewOptions = [] ) { parent::__construct($request, $response, $eventManager, $viewOptions); $this->setSubDir(I18n::getLocale()); } }``` Thanks. |
# |
Jun 17th 2021, 13:59 |
erwane |
Mailer ```public function viewBuilder(): ViewBuilder { $builder = parent::viewBuilder(); $builder->setClassName('Mailer'); return $builder; }``` And View ``` class MailerView extends View { /** * @inheritDoc */ public function __construct( ?ServerRequest $request = null, ?Response $response = null, ?EventManager $eventManager = null, array |
# |
Jun 17th 2021, 13:56 |
dantedantas |
Thank you very much Kevin. I will look and test everything that you sent to me. |
# |
Jun 17th 2021, 13:55 |
ndm |
@alamnaryab You can either create a custom class (https://book.cakephp.org/4/en/controllers/middleware.html#creating-middleware), or use a callable (it receives the same arguments as the `MiddlewareInterface::process()` method). |
# |
Jun 17th 2021, 13:54 |
erwane |
Thanks. yes, i can pass it in template path, but i'm looking for a more generic way, just pass the template, Locale is "another logic". I will create a "MailerView" |
# |
Jun 17th 2021, 13:52 |
ndm |
@erwane I don't think `setOptions()` will work, if it's not in `$_passedVars`, then you can't pass it via the view builder. However you should be able to achieve the same result by modifying the template path accordingly. |
# |
Jun 17th 2021, 13:49 |
alamnaryab |
@ndm I do not know how to add my custom code or logic like this in middleware currently I can see only chained add functions to middleware queue. |
# |
Jun 17th 2021, 13:47 |
slackebot |
`View::$subDir` through viewBuilder()->setOption() ? |
# |
Jun 17th 2021, 13:47 |
erwane |
Hi, I'm trying to create email with localized templates. The `View` has subDir option now, perfect, but this option is not in ``` /** * List of variables to collect from the associated controller. * * @var string[] */ protected $_passedVars = [ 'viewVars', 'autoLayout', 'helpers', 'template', 'layout', 'name', 'theme', 'layoutPath', 'templatePath', 'plugin', ];``` We can't define |
# |
Jun 17th 2021, 13:45 |
ndm |
Make sure that the middleware is added _after_ the routing middleware, otherwise the parameters will never be present. |
# |
Jun 17th 2021, 13:44 |
ndm |
@alamnaryab It should be _relatively_ straightforward, test if the language parameter is present (like the in the URL filter), and if it's not, return a response with a location header that holds the current URL with whatever language you want to redirect to prepended. |
# |
Jun 17th 2021, 13:41 |
kevin.pfeifer |
but I would guess if you prefer a more frontend AJAX UX you could look at this https://github.com/ishanvyas22/cakephpvue-spa |
# |
Jun 17th 2021, 13:34 |
kevin.pfeifer |
then you will need to render that element with the entity you already have and return that html via ajax |
# |
Jun 17th 2021, 13:33 |
kevin.pfeifer |
so you could create an element which represents one row of your table |
# |
Jun 17th 2021, 13:33 |
kevin.pfeifer |
I have loads of elements which are re-used over and over inside my template |
# |
Jun 17th 2021, 13:32 |
kevin.pfeifer |
elements are reusable parts you use in your template https://book.cakephp.org/4/en/views.html#elements |
# |
Jun 17th 2021, 13:32 |
dantedantas |
Elements? Sorry, I dont know what do you talk about. :( |
# |
Jun 17th 2021, 13:31 |
dantedantas |
Maybe I could run a query, collect the result and create the HTML code and send it back. |
# |
Jun 17th 2021, 13:31 |
kevin.pfeifer |
you know what “elements” are in cakephp? |
# |
Jun 17th 2021, 13:30 |
dantedantas |
Like this it works. |
# |
Jun 17th 2021, 13:30 |
dantedantas |
I am not sure how to do it, or what should be the best way. |
# |
Jun 17th 2021, 13:26 |
kevin.pfeifer |
but how should cakephp know that you now want to render your entity in your ajax function with that HTML? |
# |
Jun 17th 2021, 13:25 |
kevin.pfeifer |
yes that is present in your index.php |
# |
Jun 17th 2021, 13:25 |
kevin.pfeifer |
I never use AJAX functions like that because it is (in my opinion) too much data being sent via AJAX. I only send the data that is being “added/changed” and the HTML is being copied on the clientside inside the JS |
# |
Jun 17th 2021, 13:25 |
dantedantas |
This is how I show it now:' |
# |
Jun 17th 2021, 13:23 |
dantedantas |
Here is where I show the result. If I could send back a formated HTML code, could be better. |
# |
Jun 17th 2021, 13:23 |
kevin.pfeifer |
and where should cakephp get that html from? you only have an entity in that controller, not a rendered template |
# |
Jun 17th 2021, 13:21 |
dantedantas |
Could be better. A Html. |
# |
Jun 17th 2021, 13:21 |
kevin.pfeifer |
do you expect to get a formatted HTML back? |
# |
Jun 17th 2021, 13:20 |
dantedantas |
No. :) Maybe, could you have an example of how to format it? |
# |
Jun 17th 2021, 13:20 |
alamnaryab |
I am trying to see documentation how to capture request in middleware and append default language param if not available |
# |
Jun 17th 2021, 13:17 |
kevin.pfeifer |
yes, do you expect something different? |
# |
Jun 17th 2021, 13:16 |
dantedantas |
The result. |
# |
Jun 17th 2021, 13:16 |
dantedantas |
Is already. |
# |
Jun 17th 2021, 13:15 |
kevin.pfeifer |
|
# |
Jun 17th 2021, 13:14 |
kevin.pfeifer |
have you changed your AJAX request to GET? |
# |
Jun 17th 2021, 13:14 |
dantedantas |
Hi Kevin. Thank you for your feedback. It looks much better. :) The 'IF' condition still doesnt work. |
# |
Jun 17th 2021, 13:12 |
ndm |
I see, looks like they're supported in 4.next |
# |
Jun 17th 2021, 13:06 |
admad |
Maybe, a while back I updated the router classes to support brace style everywhere (and check for those first) |
# |
Jun 17th 2021, 13:05 |
ndm |
Maybe because brace style placeholders aren't supported, only the colon ones work. |
# |
Jun 17th 2021, 13:04 |
ndm |
@alamnaryab That is the expected behavior, the URL filter only persists the language parameter if there is one present in the request. You could add a default or inferred (from the request's `Accept-Language` header) language in the URL filter, or possibly the better solution, use a middleware to redirect to a URL with a language parameter being added to the path, so that you don't have one and the same URL serving different content. |