mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-06 19:06:02 +03:00
Extend Existing Controller #5134
Closed
opened 2026-02-05 09:42:19 +03:00 by OVERLORD
·
4 comments
No Branch/Tag Specified
development
further_theme_development
l10n_development
release
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
pull-request
Mirrored from GitHub Pull Request
No Label
🐕 Support
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#5134
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @RobinNiemann on GitHub (Jan 20, 2025).
Attempted Debugging
Searched GitHub Issues
Describe the Scenario
I want to add a custom feature (on the Book-Page). I use the Logical Theme System for this.
What would work: Copy the BookController to my theme folder (themes/mytheme/app/Entities/Controllers/BookController.php) and then implement my feature in between the copied code.
Since a don't want to adjust existing features but add a new one, it would seem cleaner to me to extend the BookController and just overwrite what I need.
What I tried so far
First approach was to create
MyBookController extends BookController. Then I would have to overwrite the web.php. I both tried aweb.phpat the same folder position and amy-web.php, both included in thefunctions.phpbut doesn't work. I either get a "Sorry, this page was not found" result or an exceptionViewException: Undefined variable $cspNonce.Second approach was
wich lead to
local.ERROR: Failed loading theme functions file at "/app/themes/mytheme/functions.php" with error: Class "BookStack\Entities\Controllers\BookController" not found {"exception":"[object] (BookStack\\Exceptions\\ThemeException(code: 0): Failed loading theme functions file at \"/app/themes/mytheme/functions.php\" with error: Class \"BookStack\\Entities\\Controllers\\BookController\" not found at /app/app/Theming/ThemeService.php:79)plus a lot ofUndefined variable $cspNonceexceptions.Is there a chance that this will work in some way or do I have to do the way of copiing the whole Controller?
Exact BookStack Version
24.02.2
Log Content
No response
Hosting Environment
Local development environment with Docker
@ssddanbrown commented on GitHub (Jan 21, 2025):
Hi @RobinNiemann,
Here's a full commented (and quickly tested) example which should hopefully help:
Code
Note that much of the contents here has potential to break on updates, and the ability to override existing controller routes is kind of luck and based upon the ordering of when things run, so not something intentional but seems to work. Can't imagine it's too likley to break, but not something assured nor tested either.
Edit: Also, you might not need to override the existing controller at all, depending on what you're needing, it might be simpler just to define a custom simpler standalone controller. It's the route it's registered at which really matters for access at the same URL.
@RobinNiemann commented on GitHub (Jan 23, 2025):
Thank you! I got the overwritten Controller working and also tried a standalone controller approach :-)
So you'd prefer something like this?
CustomController.php
my_theme/books/show.blade.php
This also works but raises another problem: I need the book context.
In
CustomController->getStuffI want to depend on the current book, thus I need at leaststring $slugas parameter. Do you have an idea how to get the book context into the CustomController?@ssddanbrown commented on GitHub (Jan 23, 2025):
No, I just meant you may not have to extend the original BookController, but instead just the app default controller, then copy over methods/lines needed, but just do whatever works best for what you need, it's not a big deal.
@RobinNiemann commented on GitHub (Jan 24, 2025):
Ah, okay.
Overwriting the BookController seems to be cleaner to me and it works quite nicely :-)
Thanks again for your help!