Log message #4265419

# At Username Text
# Jun 14th 2021, 19:26 greg138 It could cover every use case, but then it would still be on beta version 0.9.12796.
# Jun 14th 2021, 19:25 kevin.pfeifer but why though /s :,)
# Jun 14th 2021, 19:25 greg138 Cake can't possibly do *everything* out of the box, there's always going to be some custom coding required.
# Jun 14th 2021, 19:23 greg138 Before changing to this, you should very much be aware of exactly what `_ids` is doing, in terms of records being created in the database. It looks to me like what you get if you do that might not be at all what you want. In which case using your custom field name could be the right way to go, and all you need to do is manually specify the label for the input field.
# Jun 14th 2021, 19:22 kevin.pfeifer indeed
# Jun 14th 2021, 19:22 greg138 So, `$data['baselines._ids']` would indeed be blank, but `$data['baselines']['_ids']` would not be.
# Jun 14th 2021, 19:21 kevin.pfeifer I am on Cake 4.2.6
# Jun 14th 2021, 19:20 kevin.pfeifer @tomrwaller I just checked a basic beforeMarshal method inside one of my models where i use a `projects._ids` field and i do indeed have the data in there (had to `pr(); die();` it because for some reason xdebug doesn’t show it correctly :shrug:)
# Jun 14th 2021, 19:18 jh Yes I can read the migration guides, I am asking about experiences here
# Jun 14th 2021, 19:17 jh any rather big changes from say 3.8 to 4.2?
# Jun 14th 2021, 19:09 tomrwaller In my case, I'm not actually using customers, that was an example. With this, when I save an assessment, an answer gets created for each recommendation in the selected baselines. When I change the form control back to baselines._ids which is what it was when baked, and update the beforeMarshal to match, the if always fails because the data is empty.
# Jun 14th 2021, 19:07 slackebot ($query as $count => $recommendation) {`                 `$data['answers'][$count]['applicable'] = 1;`
# Jun 14th 2021, 19:07 slackebot `$recommendations = TableRegistry::getTableLocator()->get('Admin.Recommendations');`             `$query = $recommendations->find('all');`             `$query->matching('Baselines', function ($q) use ($data){`                 `return $q->where(['Baselines.id IN' => $data['baselines_ids']]);`             `});` `            `             `foreach
# Jun 14th 2021, 19:07 tomrwaller Possibly an issue in my beforeMarshal, but it seems to work. This is what I have that works: `echo $this->Form->control('baselines_ids', ['multiple' => 'checkbox', 'disabled' => false, 'options' => $baselines]` `public function beforeMarshal(\Cake\Event\Event $event, \ArrayObject $data, \ArrayObject $options)`     `{`         `if (!empty($data['baselines_ids'])) {`            
# Jun 14th 2021, 19:04 kevin.pfeifer there is some logic present int https://github.com/cakephp/cakephp/blob/76babd83538e3e247d1189c2289b2f7b31c2bc9a/src/View/Form/EntityContext.php#L260 and https://github.com/cakephp/cakephp/blob/fe6fd198e33f69c1d36d5df4ac2c92d26ffa4807/src/View/Helper/FormHelper.php which checks if the fieldname ends with `._ids` (one time actually checking for the ._ids and the other exploding the field by .)
# Jun 14th 2021, 19:03 greg138 Sounds like your beforeMarshal function has an issue.
# Jun 14th 2021, 19:03 greg138 Then the difference is that Cake has logic to handle a `_ids` as a special case, but nothing for `customers_ids`.
# Jun 14th 2021, 19:02 tomrwaller No. No field matching that.
# Jun 14th 2021, 19:02 greg138 Do you actually have a field in your database somewhere called `customers_ids`?
# Jun 14th 2021, 19:01 tomrwaller Yes - I'm just trying to understand what the difference is and why one works and one doesn't.
# Jun 14th 2021, 19:00 kevin.pfeifer you mean `customers._ids` right?
# Jun 14th 2021, 18:57 tomrwaller I also notice that if I change the control to control('customers_ids') I have to add a label manually, it doesn't automatically use the label as it does when using ._ids.
# Jun 14th 2021, 18:56 tomrwaller Guys - silly question - but what's the difference between customers_ids and customers_.ids? I'm calling a control in a form by control('customers._ids') and that works just fine. However, I'm using beforeMarshal to create some additional entities and I have a query there that looks for $data['customers_ids'). That works if I change the control to control('customers_ids') but it doesn't work if I leave the control as is.
# Jun 14th 2021, 17:37 kevin.pfeifer have you tried that? https://stackoverflow.com/questions/40609304/cakephp-3-x-optional-language-routing
# Jun 14th 2021, 17:33 alamnaryab `debug($this->request);` at localhost/project/en
# Jun 14th 2021, 17:32 alamnaryab I also debugged `$this->request` it is not showing language parameter while I have written code to get language parameter from `request->params` and switch accordingly
# Jun 14th 2021, 17:28 alamnaryab as now `language` is no more any parameter
# Jun 14th 2021, 17:27 alamnaryab @admad I added separate route scopes for both languages but before when I was switching language I used below line but now it is not working asdsa
# Jun 14th 2021, 17:03 alamnaryab better if it can force default language = ar if no lange parameter forun in url
# Jun 14th 2021, 17:02 slackebot $builder->fallbacks(); }); $routes->prefix('Admin', function (RouteBuilder $routes) { $routes->connect('/', ['controller' => 'Users', 'action' => 'login']); $routes->fallbacks(DashedRoute::class); });```
# Jun 14th 2021, 17:02 alamnaryab @admad below is my routes file before Multilanguage, now I have 2 languages , can you plz convert this to for languages (en,ar) ```use Cake\Routing\Route\DashedRoute; use Cake\Routing\RouteBuilder; use Cake\Routing\RouterBuilder; $routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->connect('/', ['controller' => 'cv', 'action' => 'index']);
# Jun 14th 2021, 16:58 alamnaryab I am attaching routes output from debugger and also cmd
# Jun 14th 2021, 16:52 kevin.pfeifer can/should we add a warning to the scope function if such a "placeholder" can be detected? :thinking_face:
# Jun 14th 2021, 16:48 admad @alamnaryab `scope(':/language')` that's your problem. Scopes can't be place holders/route elements, they need to be static strings.
# Jun 14th 2021, 16:19 slackebot that Controller/Action/Whatever So it could be that the routes are just being set differently than you expect. Unfortunately I can't tell you how to set your routes so you have a language prefix/scope for your controllers.
# Jun 14th 2021, 16:19 kevin.pfeifer @alamnaryab I would try to check the "Routes" tab in the DebugKit to see if the routes are actually generated the way you intend them to. Otherwise you could also run `bin/cake routes` in the terminal if you don't have access to the DebugKit to see the same table of active routes. Basically (as far as I know) the route system works like • go through all the available routes • after the first match is present go to
# Jun 14th 2021, 15:25 martin ok fixed it by setting it to _orginal in entity when I update 1 of the 2 fields :)
# Jun 14th 2021, 15:07 martin https://github.com/cakephp/cakephp/blob/master/src/Datasource/EntityTrait.php#L304 hmm it just reads out the array from orignal, so does not work with custom made fields :(
# Jun 14th 2021, 15:03 martin Hmm when you create a virtual field inside a entity. it does not work with getOriginal(‘virtualfieldname’) ? because that already returns the new name (virtuel field just combines 2 fields)
# Jun 14th 2021, 13:55 a.vanniel I just don't know enough about routing to be able to help you here.. maybe someone else has an idea?
# Jun 14th 2021, 13:55 a.vanniel is placing the language as the first parameter actually possible with Cake? I am not entirely sure, it does feel like it get's a bit complicated because of this and I am not sure if Cake actually enjoys this way of routing/handling urls... whenever I needed to switch from locale I would add a request variable named lang= of language= but that might not be suitable for you... it might also not be very elegant.