# laminas-mvc-skeleton > ## πŸ‡·πŸ‡Ί Русским Π³Ρ€Π°ΠΆΠ΄Π°Π½Π°ΠΌ > > ΠœΡ‹, участники Laminas, Ρ€ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ ΠΈ ΠΆΠΈΠ²Π΅ΠΌ Π² Ρ€Π°Π·Π½Ρ‹Ρ… странах. Π£ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈΠ· нас Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡ, родствСнники ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΊΠ°ΠΊ Π² России, Ρ‚Π°ΠΊ ΠΈ Π² Π£ΠΊΡ€Π°ΠΈΠ½Π΅. НСкоторыС ΠΈΠ· нас Ρ€ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² России. НСкоторыС ΠΈΠ· нас ΠΆΠΈΠ²ΡƒΡ‚ Π² России. Π£ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Π°Π±ΡƒΡˆΠΊΠΈ ΠΈ Π΄Π΅Π΄ΡƒΡˆΠΊΠΈ ΡΡ€Π°ΠΆΠ°Π»ΠΈΡΡŒ с Ρ„Π°ΡˆΠΈΡΡ‚Π°ΠΌΠΈ Π²ΠΎ Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ Π²ΠΎΠΉΠ½Π΅. Π—Π΄Π΅ΡΡŒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„Π°ΡˆΠΈΠ·ΠΌ. > > Π£ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· нас Π΅ΡΡ‚ΡŒ украинская родствСнница, которая спаслась ΠΈΠ· Π΄ΠΎΠΌΠ° вмСстС с сыном. ПоСзд задСрТался ΠΈΠ·-Π·Π° Π±ΠΎΠΌΠ±Π΅ΠΆΠΊΠΈ Π½Π° Π΄ΠΎΡ€ΠΎΠ³Π΅ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ. Π£ нас Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прячутся Π² Π±ΠΎΠΌΠ±ΠΎΡƒΠ±Π΅ΠΆΠΈΡ‰Π°Ρ…. ΠœΡ‹ с Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΎΠΉ ΠΆΠ΄Π΅ΠΌ вСсточки ΠΎΡ‚ Π½ΠΈΡ… послС Π²ΠΎΠ·Π΄ΡƒΡˆΠ½Ρ‹Ρ… Π½Π°Π»Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ бСспорядочно наносят ΡƒΠ΄Π°Ρ€Ρ‹ ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΠΎ Π±ΠΎΠ»ΡŒΠ½ΠΈΡ†Π°ΠΌ, школам, дСтским садам ΠΈ Π΄ΠΎΠΌΠ°ΠΌ. ΠœΡ‹ Π½Π΅ Π±Π΅Ρ€Π΅ΠΌ это ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ БМИ. ΠœΡ‹ наблюдаСм это Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. > > Π’Ρ‹ довСряСтС Π½Π°ΠΌ достаточно, Ρ‡Ρ‚ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ ΠΌΡ‹ просим вас Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ Π½Π°ΠΌ вновь. ΠœΡ‹ нуТдаСмся Π² ΠΏΠΎΠΌΠΎΡ‰ΠΈ. Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈ протСстуйтС ΠΏΡ€ΠΎΡ‚ΠΈΠ² этой бСсполСзной Π²ΠΎΠΉΠ½Ρ‹. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΡ€ΠΎΠ²ΠΎΠΏΡ€ΠΎΠ»ΠΈΡ‚ΠΈΠ΅. Π‘ΠΊΠ°ΠΆΠΈΡ‚Π΅ "НСт Π²ΠΎΠΉΠ½Π΅!" > > ## πŸ‡ΊπŸ‡Έ To Citizens of Russia > > We at Laminas come from all over the world. Many of us have friends, family and colleagues in both Russia and Ukraine. Some of us were born in Russia. Some of us currently live in Russia. Some have grandparents who fought Nazis in World War II. Nobody here supports fascism. > > One team member has a Ukrainian relative who fled her home with her son. The train was delayed due to bombing on the road ahead. We have friends who are hiding in bomb shelters. We anxiously follow up on them after the air raids, which indiscriminately fire at hospitals, schools, kindergartens and houses. We're not taking this from any media. These are our actual experiences. > > You trust us enough to use our software. We ask that you trust us to say the truth on this. We need your help. Go out and protest this unnecessary war. Stop the bloodshed. Say "stop the war!" > [!CAUTION] > > ## Maintenance mode > > This package is considered feature-complete, and is now in **security-only** maintenance mode, following a decision by the Technical Steering Committee. > More information on this decision can be found in a blog post: [Laminas MVC End of Life Schedule](https://getlaminas.org/blog/2026-03-06-laminas-mvc-eol-schedule.html). > The security-only status will continue until the security support for PHP 8.4 ends, which will be 31st December 2028. > > If you have a security issue, please [follow our security reporting guidelines](https://getlaminas.org/security/). ## Introduction This is a skeleton application using the Laminas MVC layer and module systems. This application is meant to be used as a starting place for those looking to get their feet wet with Laminas MVC. ## Installation using Composer The easiest way to create a new Laminas MVC project is to use [Composer](https://getcomposer.org/). If you don't have it already installed, then please install as per the [documentation](https://getcomposer.org/doc/00-intro.md). To create your new Laminas MVC project: ```bash $ composer create-project -sdev laminas/laminas-mvc-skeleton path/to/install ``` Once installed, you can test it out immediately using PHP's built-in web server: ```bash $ cd path/to/install $ php -S 0.0.0.0:8080 -t public # OR use the composer alias: $ composer serve ``` This will start the cli-server on port 8080, and bind it to all network interfaces. You can then visit the site at http://localhost:8080/ which will bring up Laminas MVC Skeleton welcome page. **Note:** The built-in CLI server is *for development only*. ## Development mode The skeleton ships with [laminas-development-mode](https://github.com/laminas/laminas-development-mode) by default, and provides three aliases for consuming the script it ships with: ```bash $ composer development-enable # enable development mode $ composer development-disable # disable development mode $ composer development-status # whether or not development mode is enabled ``` You may provide development-only modules and bootstrap-level configuration in `config/development.config.php.dist`, and development-only application configuration in `config/autoload/development.local.php.dist`. Enabling development mode will copy these files to versions removing the `.dist` suffix, while disabling development mode will remove those copies. Development mode is automatically enabled as part of the skeleton installation process. After making changes to one of the above-mentioned `.dist` configuration files you will either need to disable then enable development mode for the changes to take effect, or manually make matching updates to the `.dist`-less copies of those files. ## Running Unit Tests To run the supplied skeleton unit tests, you need to do one of the following: - During initial project creation, select to install the MVC testing support. - After initial project creation, install [laminas-test](https://docs.laminas.dev/laminas-test/): ```bash $ composer require --dev laminas/laminas-test ``` Once testing support is present, you can run the tests using: ```bash $ ./vendor/bin/phpunit ``` If you need to make local modifications for the PHPUnit test setup, copy `phpunit.xml.dist` to `phpunit.xml` and edit the new file; the latter has precedence over the former when running tests, and is ignored by version control. (If you want to make the modifications permanent, edit the `phpunit.xml.dist` file.) ## Running Psalm Static Analysis To run the supplied skeleton static analysis, you need to do one of the following: It is recommended to install the test components from laminas (laminas/laminas-test), as this is used in the tests supplied. ```bash $ composer require --dev vimeo/psalm psalm/plugin-phpunit laminas/laminas-test ``` Once psalm support is present, you can run the static analysis using: ```bash $ composer static-analysis ``` ## Using docker-compose This skeleton provides a `docker-compose.yml` for use with [docker-compose](https://docs.docker.com/compose/); it uses the provided `Dockerfile` to build a docker image for the `laminas` container created with `docker-compose`. Build and start the image and container using: ```bash $ docker-compose up -d --build ``` At this point, you can visit http://localhost:8080 to see the site running. You can also run commands such as `composer` in the container. The container environment is named "laminas" so you will pass that value to `docker-compose run`: ```bash $ docker-compose run laminas composer install ``` Some composer packages optionally use additional PHP extensions. The Dockerfile contains several commented-out commands which enable some of the more popular php extensions. For example, to install `pdo-pgsql` support for `laminas/laminas-db` uncomment the lines: ```sh # RUN apt-get install --yes libpq-dev \ # && docker-php-ext-install pdo_pgsql ``` then re-run the `docker-compose up -d --build` line as above. > You may also want to combine the various `apt-get` and `docker-php-ext-*` > statements later to reduce the number of layers created by your image. ## Web server setup ### Apache setup To setup apache, setup a virtual host to point to the public/ directory of the project and you should be ready to go! It should look something like below: ```apache ServerName laminasapp.localhost DocumentRoot /path/to/laminasapp/public DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all Require all granted ``` ### Nginx setup To setup nginx, open your `/path/to/nginx/nginx.conf` and add an [include directive](http://nginx.org/en/docs/ngx_core_module.html#include) below into `http` block if it does not already exist: ```nginx http { # ... include sites-enabled/*.conf; } ``` Create a virtual host configuration file for your project under `/path/to/nginx/sites-enabled/laminasapp.localhost.conf`. It should look something like below: ```nginx server { listen 80; server_name laminasapp.localhost; root /path/to/laminasapp/public; location / { index index.php; try_files $uri $uri/ @php; } location @php { # Pass the PHP requests to FastCGI server (php-fpm) on 127.0.0.1:9000 fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /path/to/laminasapp/public/index.php; include fastcgi_params; } } ``` Restart the nginx, now you should be ready to go! ## QA Tools The skeleton does not come with any QA tooling by default, but does ship with configuration for each of: - [phpcs](https://github.com/squizlabs/php_codesniffer) - [laminas-test](https://docs.laminas.dev/laminas-test/) - [phpunit](https://phpunit.de) Additionally, it comes with some basic tests for the shipped `Application\Controller\IndexController`. If you want to add these QA tools, execute the following: ```bash $ composer require --dev squizlabs/php_codesniffer laminas/laminas-test ``` We provide aliases for each of these tools in the Composer configuration: ```bash # Run CS checks: $ composer cs-check # Fix CS errors: $ composer cs-fix # Run PHPUnit tests: $ composer test ```