Log message #4265774

# At Username Text
# 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.
# Jun 17th 2021, 12:58 admad I was mistaken about not being able to use placeholder as scope :) There was probably some other reason why I didn't/couldn't use them for my i18n routes and misremembered.
# Jun 17th 2021, 12:53 alamnaryab @ndm it is all working fine as long the URL has language param but without language param is says missing param
# Jun 17th 2021, 12:22 ndm Then I misunderstood, I thought your problem was the other way around with 4.x, ie a string _not_ working. Converting the data to a string with `http_build_query()` should be fine, it's what happens internally too.