Log message #4263605

# At Username Text
# May 19th 2021, 13:55 neon1024 Now I’m wondering how I can either clear those instances after the Auth checks, so the AppController can pickup the Model.initialize
# May 19th 2021, 13:54 neon1024 You were right in the execution order, but I do not know how the TableRegistry is persisting instances
# May 19th 2021, 13:52 ndm Behaviors are not singleton-ish like tables, if that is what you are referring to, a new behavior instance is created for each table instance.
# May 19th 2021, 13:47 neon1024 `$table->behaviors()->get('FilterByOrganisation')->setConfig('organisation', $organisation->toArray());`
# May 19th 2021, 13:47 neon1024 I assumed i could update a behaviour on an instance in the registry, but doesn’t seem to work
# May 19th 2021, 13:46 neon1024 Is it more efficient to unload and reload a behaviour or flush the alias from the table registry?
# May 19th 2021, 13:32 me1367 Don't save it to a database like that. Instead, just grab the latest conversions and cache them for a while. Doing is while you save something (eg. a product) will likely cause inaccurate conversions in a market that always shifts. It could be that 1USD == 1EUR today. But maybe, tomorrow, 1USD == 1,05EUR (and that 5 cents does add up the higher the prices go).
# May 19th 2021, 13:24 khalil Yes i understand, but i need it in the table class at least, cause i need to modify the price before saving it, the main currency in the db is USD, everything else is basically converted
# May 19th 2021, 13:23 khalil :rolling_on_the_floor_laughing::rolling_on_the_floor_laughing::rolling_on_the_floor_laughing: it was a stupid question haha
# May 19th 2021, 13:12 me1367 Correct. You can just add a little method to the utility class that checks for a cached version and if not, pulls the latest one from online (just use the built-in cache expiry for checking when to update). Though, I'd use a cron + command for that instead... Doing it "on-demand" is gonna kill TTFB for the poor bloke that first hits the expired cache :anguished:
# May 19th 2021, 13:08 me1367 Yes, it's just basic OOP :P I wouldn't use it in table and entity classes though. Primarily controllers and such when it'll actually be needed. Don't bloat your tables and entities.
# May 19th 2021, 12:03 khalil Thanks
# May 19th 2021, 12:03 khalil I can!
# May 19th 2021, 12:00 khalil But can i access this in Table and Entity classes?
# May 19th 2021, 11:59 khalil Thank you so much!!
# May 19th 2021, 11:07 neon1024 Especially as currency conversion rates change regularly, the class would probably have some feature to keep those rates updated
# May 19th 2021, 10:59 slackebot hierarchy.
# May 19th 2021, 10:59 slackebot // ... Do your thing here } }``` Then just call it where needed like this: ```namespace MyApp\Controller; use MyApp\Controller\AppController; use MyApp\Utility\CurrencyConverter; class WhateverController extends AppController { public function myAction() { $converter = new CurrencyConverter(); $converted = $converter->convert(12.99); } }``` The class can be called basically anywhere outside the regular CakePHP
# May 19th 2021, 10:59 me1367 I wouldn't do that in the bootstrap.php because it indeed, can get messy real quick. Instead, I'd create a utility class for that and call that. Something like this: ```namespace MyApp\Utility; use Cake\Routing\Router; class CurrencyConverter { private $user = null; __construct() { // Get the authenticated user $this->user = Router::getRequest()->getSession()->read('Auth.User'); } convert(int $amount) {
# May 19th 2021, 10:55 ndm Instinctively I'd say no, as it sounds like you're introducing lots of global state and hard dependencies.
# May 19th 2021, 10:50 slackebot site to run (it handles currency conversion based on each logged in or not logged in user) - so I thought bootstrap can be a good place for that, but I'm not sure if it's ok in terms of best practices
# May 19th 2021, 10:50 khalil Hello support! A quick question related to best practices, is it ok to add a global function that needs to be accessed anywhere in the app (models, views and controllers) in config/bootstrap.php ? and is it ok if this function needs to access the authenticated user? I know I can create helpers and components for, but it gets easily messy since this needs to be accessed literally everywhere, and this function is required for the
# May 19th 2021, 10:45 neon1024 I put a debug backtrace into the table initialize, and there isn’t a single controller there
# May 19th 2021, 10:41 neon1024 Thanks for the lead there @ndm I think you’re right. As the Auth is kicking things off from the Middleware, no controllers are called!
# May 19th 2021, 10:41 kevin.pfeifer i see
# May 19th 2021, 10:41 steinkel yes
# May 19th 2021, 10:41 kevin.pfeifer and you load/require that events.php in the bootstrap.php or somewhere else?
# May 19th 2021, 10:40 steinkel ^ I usually define a specific config/events.php and add docblock per event with links to the dispatch line in the code, the reason of this event, any data in/out expected, exceptions raised etc
# May 19th 2021, 10:37 kevin.pfeifer Talking about Event Listeners: Wouldn’t it suffice to put all the Event Listeners in the `config/bootstrap.php` (or at least put some logic in there to load all of them in there)? In other words: Is there a distinct “recommended place” where to put Event Listeners in general? Or is the answer “it depends” ,:)
# May 19th 2021, 10:24 me1367 I'll have a look at it, thanks
# May 19th 2021, 10:24 ndm I think it was this plugin: https://github.com/liqueurdetoile/cakephp-orm-json
# May 19th 2021, 10:23 ndm Yeah, no, it's going to be a bit work :)
# May 19th 2021, 10:20 me1367 Yea, just wondered if the ORM was able to do this all for me or not. Would make it a lot easier since now I have a bunch of data in different tables to keep said tables smol (column wise).
# May 19th 2021, 10:19 ndm I remember seeing a plugin that supports generating all sorts of JSON Path syntax, but IIRC everything that the path syntax can do, can be done with the equivalent function calls too.
# May 19th 2021, 10:17 me1367 r.i.p
# May 19th 2021, 10:17 neon1024 Good point, my `auth` finder does use some of these
# May 19th 2021, 10:17 ndm @me1367 JSON functions can be generated like any other methods via the functions builder... aside from that, there's no specific JSON support.
# May 19th 2021, 10:13 ndm @neon1024 Maybe whatever models are involved, are being constructed earlier, maybe in your policies, and/or for resolving identities... Put a debug or a breakpoint in their `initialize()` method to figure whether initialization happens before the listener is registered.
# May 19th 2021, 10:11 me1367 Quick question... Does CakePHP's ORM have support for this feature in MariaDB? https://mariadb.com/database-topics/semi-structured-data/
# May 19th 2021, 10:11 neon1024 As we deployed the 4.0.10 upgrade to prod already and it’s fine
# May 19th 2021, 10:10 neon1024 It worked fine until I added the Authorization plugin