feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds
, '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

feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds
, '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

feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds
, '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

feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds
, '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

feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds
, '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

feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds
, '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

feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds
, '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

feat: [Auto Routing Improved] fallback to default controller's default method - #7406

Merged
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller
Jun 1, 2023
Merged

feat: [Auto Routing Improved] fallback to default controller's default method#7406
kenjis merged 14 commits into
codeigniter4:4.4from
kenjis:feat-auto-routes-fallback-to-default-controller

Conversation

@kenjis

@kenjiskenjis commented Apr 4, 2023

Copy link
Copy Markdown
Member

Description
Related #7162

You can pass arguments to the default method of the default controller.

When you have News\Home and public function getIndex($id = null) in it:

  • GET /news/101
    • News not found
    • News\101 not found (invalid)
    • News\101\Home not found (invalid)
    • News\Home found
    • News\Home::getIndex() found
    • → run News\Home::getIndex('101')

This PR makes it possible that one controller one URI.

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 enhancement PRs that improve existing functionalities 4.4 labels Apr 4, 2023
@kenjis
kenjis marked this pull request as draft April 10, 2023 22:56
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from 937cf28 to 18b3db1CompareApril 11, 2023 07:00
@kenjiskenjis changed the title feat: [Auto Routing Improved] fallback to default controllerfeat: [Auto Routing Improved] fallback to default controller's default methodApr 11, 2023
@kenjis
kenjis marked this pull request as ready for review April 11, 2023 08:29
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch 2 times, most recently from df966fa to df04a9fCompareApril 13, 2023 09:07
@kenjis
kenjisforce-pushed the feat-auto-routes-fallback-to-default-controller branch from df04a9f to cc6b2d9CompareApril 13, 2023 09:30
Cannot declare class CodeIgniter\Router\Controllers\Index
@kenjis

Copy link
Copy Markdown
MemberAuthor

I would like to merge this. Can someone review?

@iRedds

Copy link
Copy Markdown
Collaborator

I think this autorouting is too auto.
For example, the News::getIndex() method returns a list of news.
If I didn't specify the /news/(:num) route, then I would expect a request to the URL /news/15 to return an error.
Now I have to check the argument in the getIndex() method in order to get a 404 error for the URL /news/15.

It seems to me that such a change will lead to incorrect operation of existing applications.

If I compared on a scale of breaking changes, then I would rate this PR as 10 out of 10, and for example, changing the interface in the core of the framework 6 out of 10.

@kenjis

Copy link
Copy Markdown
MemberAuthor

If the getIndex() method has no parameter, /news/15 is not routed to the controller.
/news is routed to. Because Auto Routing Improved checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.

There is no way to specify the type of a parameter like /news/(:num) in Auto Routing.

I do not think this PR (or #7162) to be a breaking change.
Give use cases where existing apps would be broken.
I will consider it.

@iRedds

iRedds commented May 24, 2023

Copy link
Copy Markdown
Collaborator

I haven't looked at the Autorouter code because I think it's a waste of core team resources. Therefore, my comment was based only on the concept proposed in the PR. But after your answer, I saw that the code uses ReflectionClass.
While I still think the framework's support for autorouting is a waste of resources, I have no more questions about the concept of this PR.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Defining all routes is tedious.
Many sites do not need flexible routing that defined routes provide.
Even if needed, most routes can be handled by auto routing.
So I don't want to remove auto routing feature.

@kenjis
kenjis merged commit 3565864 into codeigniter4:4.4Jun 1, 2023
@kenjis
kenjis deleted the feat-auto-routes-fallback-to-default-controller branch June 1, 2023 08:36
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementPRs that improve existing functionalities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kenjis@iRedds