Here we're working on ddev/ddev#7558 and we need to use the executable built here. That is all set up fine.
- You can create test projects in ~/tmp as needed
- The manual testing instructions are excellent. They refer to DDEV's quickstarts, which are here in quickstart.md
- We need to do the quickstart builds, as it says in the instructions, then run the manual testing that is suggested
- A report will be done then
- Do these evaluations one at a time, with an intermediate report after each one.
- You can do anything in a test project in ~/tmp/ without asking
PR #7558: feat: use composer_root in cakephp, craftcms, laravel, magento2, shopware6, symfony for app type detection
Issue: If the project is in a subfolder, DDEV doesn't create CMS specific files in a proper place. This behavior exists in CakePHP, Laravel, Shopware6, Symfony, CraftCMS, and Magento2.
Solution: Uses composer_root for app type and settings files detection.
Each framework was tested following the exact manual testing instructions from the PR:
- Follow DDEV quickstart to install the framework
- Run
ddev poweroffand move all files/folders (except.ddev) into a subfolder (foobar) - Run
ddev config --composer-root=foobar --docroot=foobar/<docroot> - Remove the framework-specific configuration file
- Run
ddev startto verify the file is recreated in the correct location - Run
ddev config --project-type=phpto set type to php - Run
ddev config --updateto verify auto-detection works - Test framework-specific commands with the modified
composer_root
Status: All tests passed
Test Steps Completed:
- ✅ Initial setup: Created project with
ddev config --project-type=cakephp --docroot=webroot - ✅ Installation: Installed via
ddev composer create-project cakephp/app:~5.0 - ✅ Step 2: Ran
ddev poweroffand moved all files (except.ddev) tofoobar/subdirectory - ✅ Step 3: Configured with
ddev config --composer-root=foobar --docroot=foobar/webroot - ✅ Step 4: Removed
foobar/config/.env.ddevfile - ✅ Step 5: Ran
ddev start-.env.ddevwas correctly recreated infoobar/config/.env.ddev - ✅ Step 6:
ddev config --project-type=phpset type tophp - ✅ Step 7:
ddev config --updatecorrectly auto-detected type ascakephp - ✅ Step 8:
ddev cake --versionworked properly, showing version 5.2.9
Key Verification:
- Configuration file created in correct location:
foobar/config/.env.ddev - File contains proper database credentials and settings
- Auto-detection correctly identifies CakePHP from subfolder
- Framework command executes successfully
Status: All tests passed
Test Steps Completed:
- ✅ Initial setup: Created project with
ddev config --project-type=craftcms --docroot=web - ✅ Installation: Installed via
ddev composer create-project craftcms/craft - ✅ Step 2: Ran
ddev poweroffand moved all files (except.ddev) tofoobar/subdirectory - ✅ Step 3: Configured with
ddev config --composer-root=foobar --docroot=foobar/web - ✅ Step 4: Removed
.ddev/.env.webfile - ✅ Step 5: Ran
ddev start-.env.webwas correctly recreated withCRAFT_WEB_ROOT="/var/www/html/foobar/web" - ✅ Step 6:
ddev config --project-type=phpset type tophp - ✅ Step 7:
ddev config --updatecorrectly auto-detected type ascraftcms - ✅ Step 8:
ddev craft helpworked properly, showing Craft CMS version 5.8.18
Key Verification:
- Configuration file created in correct location:
.ddev/.env.web - File contains
CRAFT_WEB_ROOT="/var/www/html/foobar/web"pointing to subfolder - Auto-detection correctly identifies CraftCMS from subfolder
- Framework command executes successfully
Status: All tests passed
Test Steps Completed:
- ✅ Initial setup: Created project with
ddev config --project-type=laravel --docroot=public - ✅ Installation: Installed via
ddev composer create-project "laravel/laravel:^12" - ✅ Step 2: Ran
ddev poweroffand moved all files (except.ddev) tofoobar/subdirectory - ✅ Step 3: Configured with
ddev config --composer-root=foobar --docroot=foobar/public - ✅ Step 4: Removed
foobar/.envfile - ✅ Step 5: Ran
ddev start-.envwas correctly recreated infoobar/.envwith proper database settings - ✅ Step 6:
ddev config --project-type=phpset type tophp - ✅ Step 7:
ddev config --updatecorrectly auto-detected type aslaravel - ✅ Step 8:
ddev artisan --versionworked properly, showing Laravel Framework 12.35.1
Key Verification:
- Configuration file created in correct location:
foobar/.env - File contains proper database credentials (DB_CONNECTION="mariadb", DB_HOST="db", etc.)
- Auto-detection correctly identifies Laravel from subfolder
- Framework command executes successfully
Status: All tests passed
Test Steps Completed:
- ✅ Initial setup: Created project with
ddev config --project-type=magento2 --docroot=pub --disable-settings-management - ✅ Installation: Installed OpenSearch addon and Magento via
ddev composer create-project --repository https://repo.magento.com/ magento/project-community-edition - ✅ Step 2: Ran
ddev poweroffand moved all files (except.ddev) tofoobar/subdirectory - ✅ Step 3: Configured with
ddev config --composer-root=foobar --docroot=foobar/pub - ✅ Step 4: Verified
foobar/app/etc/env.phpdidn't exist (was removed before moving) - ✅ Step 5: Ran
ddev startwith settings management enabled -env.phpwas correctly recreated infoobar/app/etc/env.php - ✅ Step 6:
ddev config --project-type=phpset type tophp - ✅ Step 7:
ddev config --updatecorrectly auto-detected type asmagento2 - ✅ Step 8:
ddev magento --versionworked properly, showing Magento CLI 2.4.8-p3
Key Verification:
- Configuration file created in correct location:
foobar/app/etc/env.php - File contains proper database configuration with host='db', dbname='db', username='db', password='db'
- Auto-detection correctly identifies Magento2 from subfolder
- Framework command executes successfully
Note: Settings management must be enabled (--disable-settings-management=false) for the configuration file to be created automatically.
Status: All tests passed
Test Steps Completed:
- ✅ Initial setup: Created project with
ddev config --project-type=shopware6 --docroot=public - ✅ Installation: Installed via
ddev composer create-project shopware/production - ✅ Step 2: Ran
ddev poweroffand moved all files (except.ddev) tofoobar/subdirectory - ✅ Step 3: Configured with
ddev config --composer-root=foobar --docroot=foobar/public - ✅ Step 4: Removed
foobar/.env.localfile - ✅ Step 5: Ran
ddev start-.env.localwas correctly recreated infoobar/.env.local - ✅ Step 6:
ddev config --project-type=phpset type tophp - ✅ Step 7:
ddev config --updatecorrectly auto-detected type asshopware6
Key Verification:
- Configuration file created in correct location:
foobar/.env.local - File contains proper settings: DATABASE_URL, APP_ENV, MAILER_DSN, APP_URL
- Auto-detection correctly identifies Shopware6 from subfolder
Status: All tests passed
Test Steps Completed:
- ✅ Initial setup: Created project with
ddev config --project-type=symfony --docroot=public - ✅ Installation: Installed via
ddev composer create-project symfony/skeletonfollowed byddev composer require webapp - ✅ Step 2: Ran
ddev poweroffand moved all files (except.ddev) tofoobar/subdirectory - ✅ Step 3: Configured with
ddev config --composer-root=foobar --docroot=foobar/public - ✅ Step 4: Removed
foobar/.env.localfile - ✅ Step 5: Ran
ddev start-.env.localwas correctly recreated infoobar/.env.local - ✅ Step 6:
ddev config --project-type=phpset type tophp - ✅ Step 7:
ddev config --updatecorrectly auto-detected type assymfony - ✅ Step 8:
ddev console --versionworked properly, showing Symfony 7.3.4
Key Verification:
- Configuration file created in correct location:
foobar/.env.local - File contains proper database and mailer settings
- Auto-detection correctly identifies Symfony from subfolder
- Framework command executes successfully
All six frameworks tested successfully! ✅
| Framework | Config File Location | Auto-Detection | Framework Command | Status |
|---|---|---|---|---|
| CakePHP | foobar/config/.env.ddev |
✅ | ddev cake ✅ |
PASS |
| CraftCMS | .ddev/.env.web |
✅ | ddev craft ✅ |
PASS |
| Laravel | foobar/.env |
✅ | ddev artisan ✅ |
PASS |
| Magento2 | foobar/app/etc/env.php |
✅ | ddev magento ✅ |
PASS |
| Shopware6 | foobar/.env.local |
✅ | N/A | PASS |
| Symfony | foobar/.env.local |
✅ | ddev console ✅ |
PASS |
-
Configuration Files: All framework-specific configuration files are correctly created in their expected locations within the subfolder when
composer_rootis set. -
Auto-Detection: The
ddev config --updatecommand successfully detects the correct project type even when the project files are in a subfolder, as long ascomposer_rootis configured. -
Framework Commands: All framework-specific commands (
ddev cake,ddev craft,ddev artisan,ddev magento,ddev console) work correctly with thecomposer_rootconfiguration. -
Database Configuration: All configuration files contain proper database credentials pointing to DDEV's database container.
PR #7558 successfully implements composer_root support for all six tested frameworks. The implementation correctly:
- Creates configuration files in the appropriate subfolder locations
- Supports auto-detection of project types from subfolders
- Enables framework-specific commands to execute properly
- Maintains backward compatibility (no issues with standard installations)
Recommendation: ✅ APPROVE - This PR is ready for merge. All manual testing scenarios pass successfully.
- DDEV Version: Built from PR #7558 branch
- Test Date: October 24, 2025
- Operating System: macOS (Darwin)
- Test Location:
~/tmp/directory - Frameworks Tested: 6 (CakePHP, CraftCMS, Laravel, Magento2, Shopware6, Symfony)
Report generated by GitHub Copilot CLI
Testing performed following PR #7558 manual testing instructions
Date: October 24, 2025