Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cakefest 2024 Workshop 1
Search
Jorge M. González Martín
July 23, 2024
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cakefest 2024 Workshop 1
Jorge M. González Martín
July 23, 2024
More Decks by Jorge M. González Martín
See All by Jorge M. González Martín
CakeFest 2025 Workshop 1
steinkel
0
51
CakeFest 2023 Workshop 1
steinkel
0
49
CakeFest 2022 Workshop 1
steinkel
0
400
Cakefest 2021 Workshop 1
steinkel
0
480
Cakefest 2020 Workshop 1 and 4
steinkel
1
680
CakePHP Online Meetup 2
steinkel
0
130
Cakefest 2019 Basic Workshop
steinkel
0
1k
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
So, you think you're a good person
axbom
PRO
2
2.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
480
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
How GitHub (no longer) Works
holman
316
150k
Embracing the Ebb and Flow
colly
88
5.1k
Building Applications with DynamoDB
mza
96
7.1k
The Curious Case for Waylosing
cassininazir
1
420
BBQ
matthewcrist
89
10k
My Coaching Mixtape
mlcsv
0
160
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Transcript
CakeFest 2024 Luxembourg Workshop 1
Workshop 1 • 3h session • Quick CakePHP project setup
• Building a plugin from scratch: Report builder • Code https:/ /github.com/steinkel/cakefest2024 • Database https:/ /github.com/steinkel/cakefest2024/blob/master/db.sql • Slides
About Jorge González https:/ /phpc.social/@steinkel • VP at CakeDC
[email protected]
https:/ /www.cakedc.com
CakePHP Introduction • Setting up a development environment • Example
application • Baking our application CRUD
Setup dev environment • Requirements $ sudo apt install -y
php-cli php-intl php-mbstring php-sqlite3 zip php-zip // setup composer 5
OR Use ddev • Check https:/ /ddev.readthedocs.io/en/stable/ 6
Composer • Create a CakePHP 5 project • https:/ /github.com/cakephp/app
$ composer create-project cakephp/app cakefest2024 Installing... … Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]? ←Y {skeleton} 7
Configure ddev $ ddev config # edit .ddev/config.yml file $
ddev get --list # install phpmyadmin 8
Configuration • Application class • CakePHP Bootstrap • config/bootstrap.php •
config/app.php • Configure default datasource via environment (done for you by ddev in .env) 9
• Database download URL: https:/ /raw.githubusercontent.com/steinkel/cakefest2024/master/db.sql • ddev import-db Database
schema 10
$ bin/cake bake all --everything --prefix Admin (you will need
to setup Admin prefix routing) Bake Shell • Build a CRUD for our tables 11
Plugins • CakePHP Plugins
• https:/ /github.com/FriendsOfCake/awesome-cakephp • Plugin setup and configuration • We'll
set up an existing plugin later today Plugin concepts 13
Report Builder • New, generic plugin • Provide simple reporting
features to existing CakePHP projects
15
16
17
18
19
20
• bin/cake bake plugin ReportBuilder • Tweak routes and initial
configuration Let's go! 21
• bin/cake bake migration initial --plugin ReportBuilder cake bake model
--table rb_reports Reports --plugin ReportBuilder cake bake controller Reports --plugin ReportBuilder cake bake template Reports --plugin ReportBuilder Start with a migration 22
• bin/cake bake migration addStartingTable --plugin ReportBuilder Add the starting
table 23
• We need to be sure the starting table exists
Add validation 24
• Build editAssociations action, add javascript to navigate associations Navigate
associations 25
• Create new table to store the associations • Use
Ajax to save associations • Do not save duplicated associations Add association (save) 26
• Add new type to store comma separated values to
store the selected columns Create new Database Type 27
• Use the associations to select the columns for the
report • Save the selected columns as comma separated Select columns 28
• Prepare initial report run with contained associations Run the
report 29
• Add the selected columns to the report run Add
selected columns 30
• Store the filters as json • Add a filter
widget for the starting table Add filter widget 31
• Create logic to parse the filters and apply them
to the query executed Apply filters to report run 32
• Create another filter for relative dates, like "this week"
Add filter for relative dates 33
• Add simple pagination to report run Add Simple Pagination
34
• Add headers to the starting table in report run
Add Headers 35
• In case we want to fetch the data using
an endpoint Add a simple API 36
Consume API for charts 37
• In case we want to fetch the data using
an endpoint Add a simple API 38
Questions ?
Thank You ありがとうございました。 Gracias
• Create a widget to provide autocomplete filter for associations
following conventions Autocomplete association 41