github.com/ddev/ddev@v1.23.2-0.20240519125000-d824ffe36ff3/pkg/ddevapp/cakephp.go (about) 1 package ddevapp 2 3 import ( 4 "fmt" 5 "github.com/ddev/ddev/pkg/fileutil" 6 "github.com/ddev/ddev/pkg/nodeps" 7 "github.com/ddev/ddev/pkg/util" 8 "os" 9 "path/filepath" 10 "strings" 11 ) 12 13 // isCakephpApp returns true if the app is of type cakephp 14 func isCakephpApp(app *DdevApp) bool { 15 return fileutil.FileExists(filepath.Join(app.AppRoot, "bin/cake.php")) 16 } 17 18 func cakephpPostStartAction(app *DdevApp) error { 19 // We won't touch env if disable_settings_management: true 20 if app.DisableSettingsManagement { 21 return nil 22 } 23 envFileName := "config/.env" 24 envFilePath := filepath.Join(app.AppRoot, envFileName) 25 _, _, err := ReadProjectEnvFile(envFilePath) 26 if err != nil && !os.IsNotExist(err) { 27 return fmt.Errorf("unable to read .env file in config folder: %v", err) 28 } 29 if err == nil { 30 envFileName = "config/.env.ddev" 31 envFilePath = filepath.Join(app.AppRoot, envFileName) 32 _, _, err = ReadProjectEnvFile(envFilePath) 33 if err == nil { 34 util.Warning("CakePHP: .env.ddev file exists already. Replacing it. You can rename it or copy settings to your .env file.") 35 } else { 36 util.Warning("CakePHP: .env file exists already. Creating .env.ddev. You can rename it or copy settings to your .env file.") 37 } 38 } else { 39 util.Success("CakePHP: Creating .env file to store your config settings.") 40 } 41 err = fileutil.CopyFile(filepath.Join(app.AppRoot, "config/.env.example"), envFilePath) 42 if err != nil { 43 util.Debug("CakePHP: .env.example does not exist yet in config folder, not trying to process it") 44 return nil 45 } 46 _, envText, err := ReadProjectEnvFile(envFilePath) 47 if err != nil { 48 return err 49 } 50 port := "3306" 51 dbConnection := "mysql" 52 if app.Database.Type == nodeps.Postgres { 53 dbConnection = "pgsql" 54 port = "5432" 55 } 56 envMap := map[string]string{ 57 "export APP_NAME": app.GetName(), 58 "export DEBUG": "true", 59 "export APP_ENCODING": "UTF-8", 60 "export APP_DEFAULT_LOCALE": "en_US", 61 "export DATABASE_URL": dbConnection + "://db:db@db:" + port + "/db", 62 "export EMAIL_TRANSPORT_DEFAULT_URL": "smtp://localhost:1025", 63 "export SECURITY_SALT": util.HashSalt(app.GetName()), 64 "export DEBUG_KIT_SAFE_TLD": "site", 65 } 66 err = WriteProjectEnvFile(envFilePath, envMap, envText) 67 if err != nil { 68 return err 69 } 70 err = enableDotEnvLoading(app) 71 if err != nil { 72 return err 73 } 74 return nil 75 } 76 77 // cakephpConfigOverrideAction overrides php_version for CakePHP, requires PHP8.1 78 func cakephpConfigOverrideAction(app *DdevApp) error { 79 app.PHPVersion = nodeps.PHP83 80 app.DisableUploadDirsWarning = true 81 return nil 82 } 83 84 func enableDotEnvLoading(app *DdevApp) error { 85 bootstrapFileName := "config/bootstrap.php" 86 bootstrapFilePath := filepath.Join(app.AppRoot, bootstrapFileName) 87 envFunction := "// if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {\n// $dotenv = new \\josegonzalez\\Dotenv\\Loader([CONFIG . '.env']);\n// $dotenv->parse()\n// ->putenv()\n// ->toEnv()\n// ->toServer();\n// }\n" 88 err := fileutil.ReplaceStringInFile(envFunction, strings.ReplaceAll(envFunction, "// ", ""), bootstrapFilePath, bootstrapFilePath) 89 if err != nil { 90 return err 91 } 92 93 return nil 94 }