docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

docs: add Getting Routing Information - #9129

Merged
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames
Aug 22, 2024
Merged

docs: add Getting Routing Information#9129
kenjis merged 10 commits into
codeigniter4:developfrom
datamweb:docs-add-Retrieving-Controller-MethodNames

Conversation

@datamweb

@datamwebdatamweb commented Aug 17, 2024

Copy link
Copy Markdown
Contributor

Description
I was unable to find clear documentation on how to retrieve the controller and method names for the current route in CodeIgniter 4. After searching through the user guide without success, I had to read the source code to figure out the correct approach. While I'm not entirely sure if this has been documented elsewhere, I believe this addition will be helpful for developers who need to dynamically interact with the controller or method handling the current request.

  • Retrieving the Controller and Method Names
  • Accessing Active Filters in Router

Screenshot 2024-08-19 180907
Screenshot 2024-08-19 181039

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added the documentation Pull requests for documentation only label Aug 18, 2024
Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@kenjis

kenjis commented Aug 18, 2024

Copy link
Copy Markdown
Member

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?
Screenshot 2024-08-18 11 36 13

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I'm not sure that is the right place for this section.
Isn't it better to move it to the Controllers page?

Honestly, I’m not entirely sure which section would be the most appropriate. However, let me explain why I initially placed this under the Specifying Route Handlers section within the URI Routing page.

This section focuses on different ways to specify what code should handle a particular route. Since retrieving the controller and method names is directly related to how route handlers are resolved by the framework, I felt that placing it here made sense.

The Specifying Route Handlers section already covers topics such as controllers, closures, and array callables, which are different methods for defining route handlers. Including information on retrieving the controller and method names could add valuable context to this section, as it helps in understanding how route handlers are determined and processed.

That said, I’m open to moving this content to another section. Could you please specify the exact location of the Controllers page so I can make the necessary changes?

datamweband others added 2 commits August 18, 2024 07:49
@neznaika0

Copy link
Copy Markdown
Contributor

I would expand the information about the routes. How to get the router parameters (name, filters, priority...)
Now there are no ready-made methods for this, only an array

Comment threaduser_guide_src/source/incoming/routing/071.php Outdated
@kenjis

Copy link
Copy Markdown
Member

@datamweb@neznaika0 How about this?
Screenshot 2024-08-19 17 20 13

Adding a new section "Getting Routing Information".
Because

  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

@neznaika0

Copy link
Copy Markdown
Contributor

Yes. The new section looks better.

I've talked about it, there's no way to get the route details. You need to parse it yourself

publicfunctiongetRoutesOptions(?string$from = null, ?string$verb = null): array

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Why do you want to get route options (name, filters, priority...) ?
Use case?

@datamweb

Copy link
Copy Markdown
ContributorAuthor
  • This topic is about Routing (Router). So it is better to be in the Routing page.
  • The existing sections are all for how to set routes. But this is how to get the routing info.

Your reasons are quite fair and have explained the issue well.

get route options (name, filters, priority...) ?
Use case?

For example(filters), if an authentication filter is not active, you might redirect the user to a login page:

$router = service('router');
$filters = $router->getFilters();
if (!in_array('auth', $filters)) {
returnredirect()->to('/login');
}

@datamweb

Copy link
Copy Markdown
ContributorAuthor

I would like to add a section called Accessing Active Filters in Router to Getting Routing Information as well. Do you agree with this addition?

Co-authored-by: kenjis <kenji.uui@gmail.com>
@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis Many people use the URL as a condition for an action/redirect. I used to rely on built-in functions with routes (routeName). It's more reliable.

$router = Services::router();
$routeName = $router->getMatchedRouteOptions()['as'] ?? '';

@datamwebdatamweb changed the title docs: add Retrieving the Controller and Method Names for the Current Routedocs: add Getting Routing InformationAug 19, 2024
@kenjis

Copy link
Copy Markdown
Member

@neznaika0 I still don't understand your use case completely. Where do you put the code like that?

Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
Comment threaduser_guide_src/source/incoming/routing.rst Outdated
@neznaika0

Copy link
Copy Markdown
Contributor

Example:

if (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

It doesn't matter where - it's more reliable than a URL comparison. I use in my "access control" based on controllers (not as Shield)

@kenjis

Copy link
Copy Markdown
Member

I still don't understand why you need such code?
Where do you put it?

datamweband others added 2 commits August 20, 2024 07:55
Co-authored-by: kenjis <kenji.uui@gmail.com>

@kenjiskenjis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you.

@neznaika0

Copy link
Copy Markdown
Contributor

@kenjis It's in the filter now. It doesn't matter. The main reason is not to compare dynamic URLs, but a constant route name.

// not// if (base_url('main') === 'http://example.com/main') {// betterif (! empty($routeName) && $routeName === 'homepage') {
thrownewLogicException('Access control: Found redirect loop');
}

@kenjis

Copy link
Copy Markdown
Member

@neznaika0 Okay, thank you for your explanation.

In my opinion, it is better that the Request (IncomingRequest) has the current route info including the route name.
But this is an enhancement.

@kenjis
kenjis merged commit 655bd1d into codeigniter4:developAug 22, 2024
@datamweb
datamweb deleted the docs-add-Retrieving-Controller-MethodNames branch August 22, 2024 08:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationPull requests for documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@datamweb@kenjis@neznaika0