Comments (11)
I found out that $handler
on Dispatcher.php
, line 47, has the information I need. However I'm not sure as how to pass it to the filter since it has a $response
parameter that seems to be null
, always.
Is it safe to pass $handler
into there as well?
Thank you.
from phroute.
The response is null for before filters, because there hasn't been any response created at that stage.
For after filters, the response is whatever was returned from the route handler.
I can see what you are trying to get to, but I don't think there is an easy way to do that currently. Let me think about this over the weekend and see what I can do.
I've been working on a new version of phroute where the objects composition is much better and would allow you to do this much more easily.
from phroute.
Hello!
I decided to try to hack it a bit... and it seems to work, please check this commit: f330921
I know, its bad, but I tested it in one of my weekend projects and it seems to work fine.
$router->filter("auth", function($result, $handler) {
print $handler[0] . "->" . $handler[1] . "()";
exit();
});
// Output: API\Controller\Test->manualMethod()
Your tests still pass. I didn't write a specific test for this because I'm not familiar with your test code ;).
Have a nice weekend!
from phroute.
Any news on this?
from phroute.
I would also like to know if this is possible. I need to access the handler in a filter.
from phroute.
@Ant59 check my experimental commit above. It works in the described way.
from phroute.
Great, thanks! I'll give it a go
from phroute.
@Ant59 great! I'll be waiting some feedback.
from phroute.
Hmmm, it seems it's not exactly what I wanted. I need to access the handler before dispatch of ALL routes, and I don't want to have to include every route in a filter group since I need it to be extensible for addons to include routes as easy as possible.
Why is the dispatcher class locked up so tight with private visibility? I can't even access these functions from a child class using extend.
from phroute.
My code will only give you the class name / method that will be used to dispatch the request later... Then you can do whatever you want with the class name. Whatever you do on the filter will be done before the dispatch actually happens.
In my case, I'm using the filter above so I can get the name of the class/method that will be used to dispatch the request and do simple CRUD permissions on that. For instance... check is there's a user session and if the user has permissions to access Controllers/Users::list
if not redirect to login page or some other place before the dispatch happens.
from phroute.
@Ant59 Maybe have a look at this version I started to refactor which exposes the handler as a separate entity via an interface.
https://github.com/mrjgreen/phroute/tree/handler
The reason the class is private, is to prevent extension of the class's internal methods. Inheritance is not the best design pattern when attempting to add functionality - instead composition should be favoured.
Obviously pragmatism should come into it too and I don't want to prevent you from being able to do what you need to, but in this case I would rather spend some time completing the new refactored branch, rather than hacking the current one.
from phroute.
Related Issues (20)
- There was an error installing phroute in its latest version
- Error Class not found HOT 1
- Possible error to group routes
- Query string is not passing on real server HOT 1
- Handling exceptions within controller methods HOT 1
- Extends Controller Index optional parameter NOT ALLOWED HOT 2
- Cannot use the same placeholder 'id' twice HOT 1
- How to Use Before in Controllers
- Match any route to OPTIONS request method HOT 3
- Bug: Filters applied in registered order instead of requested order
- Custom resolver route parameters
- Error! when has too many variableRoutes
- how to prevent URL not found? HOT 2
- how handle route not found in dispatcher to redirect to 404 page
- Fatal error: Uncaught Phroute\Phroute\Exception\HttpRouteNotFoundException: Route ecomselim does not exist in HOT 2
- Not able to post with jquery. HOT 1
- Post with JQuery info
- Controller methods are call twice on every request
- route issue - URL not found HOT 1
- Bug with PHP 8.1 with RouteCollector class HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from phroute.