Add the composer to the application on Yii

June 13, 2017 26 Yehor Rykhnov

Composer (the dependency manager for PHP) is already pretty tightly integrated into the programmer's daily work, which is understandable, because it simplifies the installation of various extensions for your project.

In Yii2, the composer dependency manager helps not only to add extensions, but also to install the Yii2 Framework itself, but it is often necessary to work with the project (projects) of the earlier version of Yii, namely on Yii1, and it happens that the composer is very lacking, because You can add the required extension or dependency package by running one command.

The article will describe how to add a composer to Yii1 and not just to add the composer, but to make it work. Let's start ...

Install composer

To begin with, you need to install the composer. If you have Windows and opsenServer, then it's already installed and ready to work, if not, install it as described here: Installing Composer on Windows. If you use Linux, then you are here: Install composer globally for Linux/Unix/OSX

Configuring autoloading packages for the Yii Framework

After or before you download the package(s) you need for your project, you need to ensure that the package(s) in the project are automatically downloaded. Since the composer will add all the packages to the /vendor folder, you must enable this folder to autoload. To do this, you need to make some changes to the Yii Framework code, namely, to add code:

require __DIR__ . '/vendor/autoload.php';

The following files: index.php, protected/yiic.php, protected/tests/bootstrap.php.

There is also an alternative method for connecting autoloading, at the beginning of the file protected/config/main.php add:

require_once( dirname(__FILE__) . '/../../vendor/autoload.php');

Hide files and folders of the composer from superfluous eyes

Add the following code to the root .htaccess to deny access to /vendor, composer.phar, composer.json composer.lock and redirect the request to index.php for this, add the following code (.htaccess):

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} vendor/ [OR]
RewriteCond %{REQUEST_FILENAME} composer.phar [OR]
RewriteCond %{REQUEST_FILENAME} composer.json [OR]
RewriteCond %{REQUEST_FILENAME} composer.lock
RewriteRule . index.php

Download the package with composer

To load the required package, execute the command (usually these commands are described in the package manual):

php ./composer.phar require packegeName

or

composer require packegeName

That all, enjoy the work of Yii1 and composer.

Example of loading a package through composer in Yii1 and working with it

Example #1

And so, take any package for tests, the first thing I got was Endroid QR Code (https://packagist.org/packages/endroid/qrcode). Open the console, go to the root of the project and run the installation command:

composer require endroid/qrcode

We wait until everything is downloaded, and then open any view or action and add the code from the instruction:

<?php

use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\LabelAlignment;
use Endroid\QrCode\QrCode;
use Symfony\Component\HttpFoundation\Response;

$qrCode = new QrCode('Composer + Yii | Кодер.укр');
$qrCode->setSize(300);

$qrCode
    ->setWriterByName('png')
    ->setMargin(10)
    ->setEncoding('UTF-8')
    ->setErrorCorrectionLevel(ErrorCorrectionLevel::LOW)
    ->setValidateResult(false);

header('Content-Type: '.$qrCode->getContentType());
echo $qrCode->writeString();

$qrCode->writeFile(__DIR__.'/qrcode.png');

$response = new Response($qrCode->writeString(), Response::HTTP_OK, ['Content-Type' => $qrCode->getContentType()]);

And get a working extension in our project on the Yii Framework.

Example #2

For the purity of the experiment, take another (second available) package (https://github.com/dompdf/dompdf) and install it:

composer require dompdf/dompdf

And make work it like the previous one. We open any view (view) or action (action), we add the code from the instruction:

<?php

use Dompdf\Dompdf;

$dompdf = new Dompdf();
$dompdf->loadHtml('Composer + Yii | Кодер.укр');
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$dompdf->stream();

Run and enjoy)

Original article: https://кодер.укр/записи/добавляем-composer-к-приложению-на-yii