Welcome Guest, Not a member yet? Register   Sign In
Install CI4 on Mac MAMP and with vhosts support
#1

(This post was last modified: 01-08-2024, 07:57 AM by tiollo.)

Hi there,
I've been using CI3 for several years and I would love to start with CI4.
Unfortunately, by following the guide to set it up on my local environment, I don't manage to make it work as I expect.


My specs:
- I'm using MAMP 6.8 on Mac OS Ventura (13.2.1)
- the php version running on MAMP is 8.1.13
- CI4 is installed via composer


What I'm trying to do: I would like to use the MAMP htdocs folder (where I have all my website projects) with a subfolder "codeigniter4-test" and then open it from a vhost (i.e. http://codeigniter4-test.local).
At the moment the only way the setup works is if I run "php spark serve" and open http://localhost:8080/
Is there any way to make it work without spark and from a virtual host?


That's how the virtual host appears in httpd-vhosts.conf (virtual hosts are also enabled in the httpd.conf file):
Code:
<VirtualHost *:80>
ServerName codeigniter4-test.local
ServerAlias codeigniter4-test.local
DocumentRoot "/Applications/MAMP/htdocs/codeigniter4-test"
<Directory  "/Applications/MAMP/htdocs/codeigniter4-test">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>

My .env file:
Code:
#--------------------------------------------------------------------
# Example Environment Configuration file
#
# This file can be used as a starting point for your own
# custom .env files, and contains most of the possible settings
# available in a default install.
#
# By default, all of the settings are commented out. If you want
# to override the setting, you must un-comment it by removing the '#'
# at the beginning of the line.
#--------------------------------------------------------------------

#--------------------------------------------------------------------
# ENVIRONMENT
#--------------------------------------------------------------------

CI_ENVIRONMENT = development

#--------------------------------------------------------------------
# APP
#--------------------------------------------------------------------

app.baseURL = 'http://codeigniter4-test.local/'
# If you have trouble with `.`, you could also use `_`.
# app_baseURL = ''
# app.forceGlobalSecureRequests = false
# app.CSPEnabled = false

#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------

# database.default.hostname = localhost
# database.default.database = ci4
# database.default.username = root
# database.default.password = root
# database.default.DBDriver = MySQLi
# database.default.DBPrefix =
# database.default.port = 3306

# database.tests.hostname = localhost
# database.tests.database = ci4_test
# database.tests.username = root
# database.tests.password = root
# database.tests.DBDriver = MySQLi
# database.tests.DBPrefix =
# database.tests.port = 3306

#--------------------------------------------------------------------
# CONTENT SECURITY POLICY
#--------------------------------------------------------------------

# contentsecuritypolicy.reportOnly = false
# contentsecuritypolicy.defaultSrc = 'none'
# contentsecuritypolicy.scriptSrc = 'self'
# contentsecuritypolicy.styleSrc = 'self'
# contentsecuritypolicy.imageSrc = 'self'
# contentsecuritypolicy.baseURI = null
# contentsecuritypolicy.childSrc = null
# contentsecuritypolicy.connectSrc = 'self'
# contentsecuritypolicy.fontSrc = null
# contentsecuritypolicy.formAction = null
# contentsecuritypolicy.frameAncestors = null
# contentsecuritypolicy.frameSrc = null
# contentsecuritypolicy.mediaSrc = null
# contentsecuritypolicy.objectSrc = null
# contentsecuritypolicy.pluginTypes = null
# contentsecuritypolicy.reportURI = null
# contentsecuritypolicy.sandbox = false
# contentsecuritypolicy.upgradeInsecureRequests = false
# contentsecuritypolicy.styleNonceTag = '{csp-style-nonce}'
# contentsecuritypolicy.scriptNonceTag = '{csp-script-nonce}'
# contentsecuritypolicy.autoNonce = true

#--------------------------------------------------------------------
# COOKIE
#--------------------------------------------------------------------

# cookie.prefix = ''
# cookie.expires = 0
# cookie.path = '/'
# cookie.domain = ''
# cookie.secure = false
# cookie.httponly = false
# cookie.samesite = 'Lax'
# cookie.raw = false

#--------------------------------------------------------------------
# ENCRYPTION
#--------------------------------------------------------------------

# encryption.key =
# encryption.driver = OpenSSL
# encryption.blockSize = 16
# encryption.digest = SHA512

#--------------------------------------------------------------------
# HONEYPOT
#--------------------------------------------------------------------

# honeypot.hidden = 'true'
# honeypot.label = 'Fill This Field'
# honeypot.name = 'honeypot'
# honeypot.template = '<label>{label}</label><input type="text" name="{name}" value=""/>'
# honeypot.container = '<div style="display:none">{template}</div>'

#--------------------------------------------------------------------
# SECURITY
#--------------------------------------------------------------------

# security.csrfProtection = 'cookie'
# security.tokenRandomize = false
# security.tokenName = 'csrf_token_name'
# security.headerName = 'X-CSRF-TOKEN'
# security.cookieName = 'csrf_cookie_name'
# security.expires = 7200
# security.regenerate = true
# security.redirect = false
# security.samesite = 'Lax'

#--------------------------------------------------------------------
# SESSION
#--------------------------------------------------------------------

# session.driver = 'CodeIgniter\Session\Handlers\FileHandler'
# session.cookieName = 'ci_session'
# session.expiration = 7200
# session.savePath = null
# session.matchIP = false
# session.timeToUpdate = 300
# session.regenerateDestroy = false

#--------------------------------------------------------------------
# LOGGER
#--------------------------------------------------------------------

# logger.threshold = 4

#--------------------------------------------------------------------
# CURLRequest
#--------------------------------------------------------------------

# curlrequest.shareOptions = false

My app/Config/App.php file:
Code:
<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class App extends BaseConfig
{
    /**
    * --------------------------------------------------------------------------
    * Base Site URL
    * --------------------------------------------------------------------------
    *
    * URL to your CodeIgniter root. Typically, this will be your base URL,
    * WITH a trailing slash:
    *
    *    http://example.com/
    */
    public string $baseURL = 'http://codeigniter4-test.local/';

    /**
    * Allowed Hostnames in the Site URL other than the hostname in the baseURL.
    * If you want to accept multiple Hostnames, set this.
    *
    * E.g. When your site URL ($baseURL) is 'http://example.com/', and your site
    *      also accepts 'http://media.example.com/' and
    *      'http://accounts.example.com/':
    *          ['media.example.com', 'accounts.example.com']
    *
    * @var list<string>
    */
    public array $allowedHostnames = [];

    /**
    * --------------------------------------------------------------------------
    * Index File
    * --------------------------------------------------------------------------
    *
    * Typically this will be your index.php file, unless you've renamed it to
    * something else. If you are using mod_rewrite to remove the page set this
    * variable so that it is blank.
    */
    public string $indexPage = '';

    /**
    * --------------------------------------------------------------------------
    * URI PROTOCOL
    * --------------------------------------------------------------------------
    *
    * This item determines which server global should be used to retrieve the
    * URI string.  The default setting of 'REQUEST_URI' works for most servers.
    * If your links do not seem to work, try one of the other delicious flavors:
    *
    * 'REQUEST_URI'    Uses $_SERVER['REQUEST_URI']
    * 'QUERY_STRING'  Uses $_SERVER['QUERY_STRING']
    * 'PATH_INFO'      Uses $_SERVER['PATH_INFO']
    *
    * WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
    */
    public string $uriProtocol = 'REQUEST_URI';

    /**
    * --------------------------------------------------------------------------
    * Default Locale
    * --------------------------------------------------------------------------
    *
    * The Locale roughly represents the language and location that your visitor
    * is viewing the site from. It affects the language strings and other
    * strings (like currency markers, numbers, etc), that your program
    * should run under for this request.
    */
    public string $defaultLocale = 'en';

    /**
    * --------------------------------------------------------------------------
    * Negotiate Locale
    * --------------------------------------------------------------------------
    *
    * If true, the current Request object will automatically determine the
    * language to use based on the value of the Accept-Language header.
    *
    * If false, no automatic detection will be performed.
    */
    public bool $negotiateLocale = false;

    /**
    * --------------------------------------------------------------------------
    * Supported Locales
    * --------------------------------------------------------------------------
    *
    * If $negotiateLocale is true, this array lists the locales supported
    * by the application in descending order of priority. If no match is
    * found, the first locale will be used.
    *
    * IncomingRequest::setLocale() also uses this list.
    *
    * @var string[]
    */
    public array $supportedLocales = ['en'];

    /**
    * --------------------------------------------------------------------------
    * Application Timezone
    * --------------------------------------------------------------------------
    *
    * The default timezone that will be used in your application to display
    * dates with the date helper, and can be retrieved through app_timezone()
    *
    * @see https://www.php.net/manual/en/timezones.php for list of timezones supported by PHP.
    */
    public string $appTimezone = 'UTC';

    /**
    * --------------------------------------------------------------------------
    * Default Character Set
    * --------------------------------------------------------------------------
    *
    * This determines which character set is used by default in various methods
    * that require a character set to be provided.
    *
    * @see http://php.net/htmlspecialchars for a list of supported charsets.
    */
    public string $charset = 'UTF-8';

    /**
    * --------------------------------------------------------------------------
    * Force Global Secure Requests
    * --------------------------------------------------------------------------
    *
    * If true, this will force every request made to this application to be
    * made via a secure connection (HTTPS). If the incoming request is not
    * secure, the user will be redirected to a secure version of the page
    * and the HTTP Strict Transport Security header will be set.
    */
    public bool $forceGlobalSecureRequests = false;

    /**
    * --------------------------------------------------------------------------
    * Reverse Proxy IPs
    * --------------------------------------------------------------------------
    *
    * If your server is behind a reverse proxy, you must whitelist the proxy
    * IP addresses from which CodeIgniter should trust headers such as
    * X-Forwarded-For or Client-IP in order to properly identify
    * the visitor's IP address.
    *
    * You need to set a proxy IP address or IP address with subnets and
    * the HTTP header for the client IP address.
    *
    * Here are some examples:
    *    [
    *        '10.0.1.200'    => 'X-Forwarded-For',
    *        '192.168.5.0/24' => 'X-Real-IP',
    *    ]
    *
    * @var array<string, string>
    */
    public array $proxyIPs = [];

    /**
    * --------------------------------------------------------------------------
    * Content Security Policy
    * --------------------------------------------------------------------------
    *
    * Enables the Response's Content Secure Policy to restrict the sources that
    * can be used for images, scripts, CSS files, audio, video, etc. If enabled,
    * the Response object will populate default values for the policy from the
    * `ContentSecurityPolicy.php` file. Controllers can always add to those
    * restrictions at run time.
    *
    * For a better understanding of CSP, see these documents:
    *
    * @see http://www.html5rocks.com/en/tutorials/security/content-security-policy/
    * @see http://www.w3.org/TR/CSP/
    */
    public bool $CSPEnabled = false;
}
Thanks in advance!
Reply
#2

See https://codeigniter4.github.io/CodeIgnit...irtualhost
Reply
#3

The DocumentRoot in vHosts must located to the "public" folder in the installation folder.
There the apache is looking for the "index.php" to run the bootstrap
Reply




Theme © iAndrew 2016 - Forum software by © MyBB