# |
Feb 17th 2020, 16:51 |
neon1024 |
Set it’s result to a class property |
# |
Feb 17th 2020, 16:51 |
dan874 |
but what if you use that line in 30 different places? |
# |
Feb 17th 2020, 16:49 |
admad |
So much trouble to save 1 line of code: `$this->Foo->get($id)` |
# |
Feb 17th 2020, 16:48 |
dan874 |
as it seems to kill the session in some way |
# |
Feb 17th 2020, 16:48 |
neon1024 |
It also means if you need a bespoke entity, you’d have wasted that loading |
# |
Feb 17th 2020, 16:48 |
dan874 |
i think the large entity is killing it |
# |
Feb 17th 2020, 16:48 |
dan874 |
by that i mean the middleware |
# |
Feb 17th 2020, 16:48 |
dan874 |
@neon1024 thats actually what we've done and i think thats whats causing the issue |
# |
Feb 17th 2020, 16:48 |
neon1024 |
You could always abstract away the loading of the data into a table method if that was what the issue was |
# |
Feb 17th 2020, 16:48 |
neon1024 |
I don’t really see any benefits to the approach either |
# |
Feb 17th 2020, 16:47 |
neon1024 |
You could use a middleware perhaps, but you’d have to set the entity into the request, and with associated data I would worry about setting a large entity and associated data into the request, as the request is passed to so many places |
# |
Feb 17th 2020, 16:46 |
neon1024 |
..but it wouldn’t allow it to be passed into the method |
# |
Feb 17th 2020, 16:46 |
neon1024 |
You could use `beforeFilter()` for this, and set the found entity to a class property in the controller |
# |
Feb 17th 2020, 16:46 |
flashios09 |
for some magic, i’m not sure but i think that you need to extend the controller and play with the invokeAction and the Reflection class |
# |
Feb 17th 2020, 16:43 |
dan874 |
so instead of `int $proposal` the method could be `Proposal $proposal` |
# |
Feb 17th 2020, 16:43 |
dan874 |
some magic to get the entity |
# |
Feb 17th 2020, 16:42 |
flashios09 |
here you want to add typehint or have some magic to get the proposal entity ? |
# |
Feb 17th 2020, 16:41 |
flashios09 |
yes, this is how cake works |
# |
Feb 17th 2020, 16:40 |
dan874 |
but in cake we have `view(int $proposalId)` and then have to load the entity in inside the controller. |
# |
Feb 17th 2020, 16:40 |
dan874 |
ok so i have a route `Proposals/view/1025173/primary` which maps to a `ProposalController/view` method, that method currently has no typehint as the parameter being passed to it is just a integer, what we can do in laravel is basically setup on the route a model binding so it knows when i give it ID `1025173` that it goes to the proposal table and loads that model in so in the `view(Proposal $proposal)` method like that. |
# |
Feb 17th 2020, 16:38 |
flashios09 |
if you can explain more *what do you want to do*, maybe i can help you but with cake approach not Laravel |
# |
Feb 17th 2020, 16:38 |
dan874 |
so when you get to the controller you already have your table/entity ready loaded, if that makes sense? |
# |
Feb 17th 2020, 16:37 |
dan874 |
thats what we were trying to achieve with the above solution |
# |
Feb 17th 2020, 16:37 |
dan874 |
but if your doing a route for instance that has a ID how do you then in your controller method tell it to swap that ID for the model? |
# |
Feb 17th 2020, 16:37 |
flashios09 |
```function (User $user) { // ... }``` |
# |
Feb 17th 2020, 16:35 |
flashios09 |
but if you need typehint for any property, all you have to do is to write something like this: |
# |
Feb 17th 2020, 16:35 |
dan874 |
no need to apologise @flashios09 sorry for my terrible explanation. |
# |
Feb 17th 2020, 16:34 |
flashios09 |
sorry @dan874 i can’t help you here |
# |
Feb 17th 2020, 16:33 |
dan874 |
it was just something we were trying out so im going to look more into the request with Param area. thanks all though as its guided me down a path |
# |
Feb 17th 2020, 16:32 |
dan874 |
so im just wondering if the size of the model is causing an issue with the request as its loading in a number of contains at the same time. |
# |
Feb 17th 2020, 16:32 |
dan874 |
as in i go through the session is maintained correctly and it all works |
# |
Feb 17th 2020, 16:32 |
dan874 |
so if i remove the $request->withParam line everything works as expected |
# |
Feb 17th 2020, 16:31 |
ndm |
Even if someone had done something like that, it wouldn't necessarily help to figure what might be happening in your application. It would probably be better if you elaborated on the latter. What is that particular route and set of data? What does "_blowing up_" exactly mean? What does your error logs say? ... |
# |
Feb 17th 2020, 16:23 |
dan874 |
and this allows us to typehint entities on the controllers |
# |
Feb 17th 2020, 16:23 |
slackebot |
$request->getParam('_matchedRoute')); $paramIndex = array_search($parameter, $passedParams, true); if (!empty($paramIndex)) { return $request->withParam('pass.' . ($paramIndex - 1), $model); } return $request; }``` |
# |
Feb 17th 2020, 16:23 |
dan874 |
at the core its just ``` /** * Bind the model to the route as part of the request * * @param ServerRequestInterface $request * @param Entity $model * @param string $parameter * @return ServerRequestInterface */ public function bindModelToRoute( ServerRequestInterface $request, Entity $model, string $parameter )ServerRequestInterface { $passedParams = explode('/:', |
# |
Feb 17th 2020, 16:22 |
flashios09 |
sorry i don’t know anything about Laravel, i haven’t used any other php framework |
# |
Feb 17th 2020, 16:21 |
dan874 |
but looking at it, this is what seems to be causing the issue with my session now as for some reason on a particular route with a particular set of data its blowing it up. |
# |
Feb 17th 2020, 16:21 |
dan874 |
sorry its a laravel term. basically if i have a model called user and in the route i have a `userId` then what ive done is in a middleware swap that user id out with the user so in the controller i can typehint the user entity |
# |
Feb 17th 2020, 16:20 |
flashios09 |
@dan874 what do you mean by *route model binding* ? |
# |
Feb 17th 2020, 16:19 |
flashios09 |
change `posts` with your table name |