PHP Asset library
Translations: Español
PHP library for handling HTML links and scripts.
Requirements
This library is compatible with the PHP versions: 8.1.
Installation
The preferred way to install this extension is through Composer.
To install PHP Asset library, simply:
composer require josantonius/asset
The previous command will only install the necessary files, if you prefer to download the entire source code you can use:
composer require josantonius/asset --prefer-source
You can also clone the complete repository with Git:
git clone https://github.com/josantonius/php-asset.git
Available Classes
Asset Class
use Josantonius\Asset\Asset;
Create object:
$asset = new Asset();
Print the added scripts for the body:
$asset->outputBodyScripts(): string
Print the added scripts for the head:
$asset->outputHeadScripts(): string
Print the added links:
$asset->outputLinks(): string
Asset Facade
use Josantonius\Asset\Facades\Asset;
Add body script:
/**
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
*/
Asset::addBodyScript(
null|bool $async = null,
null|string $crossorigin = null,
null|bool $defer = null,
null|string $fetchpriority = null,
null|string $integrity = null,
null|bool $nomodule = null,
null|string $nonce = null,
null|string $referrerpolicy = null,
null|string $src = null,
null|string $type = null
): BodyScript
Add head script:
/**
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
*/
Asset::addHeadScript(
null|bool $async = null,
null|string $crossorigin = null,
null|bool $defer = null,
null|string $fetchpriority = null,
null|string $integrity = null,
null|bool $nomodule = null,
null|string $nonce = null,
null|string $referrerpolicy = null,
null|string $src = null,
null|string $type = null
): HeadScript
Add link:
/**
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link
*/
Asset::addLink(
null|string $as = null,
null|string $crossorigin = null,
null|bool $disabled = null,
null|string $fetchpriority = null,
null|string $href = null,
null|string $hreflang = null,
null|string $imagesizes = null,
null|string $imagesrcset = null,
null|string $integrity = null,
null|string $media = null,
null|string $prefetch = null,
null|string $referrerpolicy = null,
null|string $rel = null,
null|string $sizes = null,
null|string $target = null,
null|string $title = null,
null|string $type = null,
): Link
Print the added scripts for the body:
Asset::outputBodyScripts(): string
Print the added scripts for the head:
Asset::outputHeadScripts(): string
Print the added links:
Asset::outputLinks(): string
BodyScript Class
use Josantonius\Asset\Elements\BodyScript;
Add body script:
/**
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
*/
new BodyScript(
null|bool $async = null,
null|string $crossorigin = null,
null|bool $defer = null,
null|string $fetchpriority = null,
null|string $integrity = null,
null|bool $nomodule = null,
null|string $nonce = null,
null|string $referrerpolicy = null,
null|string $src = null,
null|string $type = null
);
HeadScript Class
use Josantonius\Asset\Elements\HeadScript;
Add head script:
/**
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
*/
new HeadScript(
null|bool $async = null,
null|string $crossorigin = null,
null|bool $defer = null,
null|string $fetchpriority = null,
null|string $integrity = null,
null|bool $nomodule = null,
null|string $nonce = null,
null|string $referrerpolicy = null,
null|string $src = null,
null|string $type = null
);
Link Class
use Josantonius\Asset\Elements\Link;
Add link:
/**
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link
*/
new Link(
null|string $as = null,
null|string $crossorigin = null,
null|bool $disabled = null,
null|string $fetchpriority = null,
null|string $href = null,
null|string $hreflang = null,
null|string $imagesizes = null,
null|string $imagesrcset = null,
null|string $integrity = null,
null|string $media = null,
null|string $prefetch = null,
null|string $referrerpolicy = null,
null|string $rel = null,
null|string $sizes = null,
null|string $target = null,
null|string $title = null,
null|string $type = null,
);
Usage
Example of use for this library:
Add body script
use Josantonius\Asset\Elements\BodyScript;
new BodyScript(
src: 'https://example.com/script.js'
);
use Josantonius\Asset\Facades\Asset;
Asset::addBodyScript(
src: 'script.js',
type: 'text/javascript'
);
Add head script
use Josantonius\Asset\Elements\HeadScript;
new HeadScript(
src: 'script.js',
type: 'module'
);
use Josantonius\Asset\Facades\Asset;
Asset::addHeadScript(
crossorigin: 'anonymous',
defer: true,
integrity: 'sha256-n9+',
src: 'https://example.com/script.js',
type: 'text/javascript'
);
Add link
use Josantonius\Asset\Elements\Link;
new Link(
crossorigin: 'anonymous',
href: 'https://example.com/style.css',
integrity: 'sha256-n9+',
media: 'all',
rel: 'stylesheet'
);
use Josantonius\Asset\Facades\Asset;
Asset::addLink(
href: 'https://example.com/style.css',
rel: 'stylesheet'
);
Print the added scripts for the body
use Josantonius\Asset\Asset;
$asset = new Asset();
echo $asset->outputBodyScripts();
use Josantonius\Asset\Facades\Asset;
echo Asset::outputBodyScripts();
Print the added scripts for the head
use Josantonius\Asset\Asset;
$asset = new Asset();
echo $asset->outputHeadScripts();
use Josantonius\Asset\Facades\Asset;
echo Asset::outputHeadScripts();
Print the added links
use Josantonius\Asset\Asset;
$asset = new Asset();
echo $asset->outputLinks();
use Josantonius\Asset\Facades\Asset;
echo Asset::outputLinks();
Full example
index.php
use Josantonius\Asset\Elements\Link;
use Josantonius\Asset\Elements\BodyScript;
use Josantonius\Asset\Elements\HeadScript;
new BodyScript(src: 'foo.js', async: true);
new BodyScript(src: 'bar.js', type: 'text/javascript');
new HeadScript(src: 'https://example.com/foo.js', type: 'module');
new HeadScript(src: 'https://example.com/bar.js', defer: true);
new Link(href: 'https://example.com/foo.css', rel: 'stylesheet');
new Link(href: 'https://example.com/bar.css', rel: 'stylesheet', media: 'all');
page.html
<?php
use Josantonius\Asset\Asset;
$asset = new Asset();
?>
<html>
<head>
<?= $asset->outputLinks() ?>
<?= $asset->outputHeadScripts() ?>
</head>
<body>
<?= $asset->outputBodyScripts() ?>
</body>
</html>
Result:
<html>
<head>
<link href="https://example.com/foo.css" rel="stylesheet">
<link href="https://example.com/bar.css" rel="stylesheet" media="all">
<script src="https://example.com/foo.js" type="module"></script>
<script defer src="https://example.com/bar.js"></script>
</head>
<body>
<script async src="foo.js"></script>
<script src="bar.js" type="text/javascript"></script>
</body>
</html>
Full example using the facade
index.php
use Josantonius\Asset\Facades\Asset;
Asset::addBodyScript(src: 'foo.js', async: true);
Asset::addBodyScript(src: 'bar.js', type: 'text/javascript');
Asset::addHeadScript(src: 'https://example.com/foo.js', type: 'module');
Asset::addHeadScript(src: 'https://example.com/bar.js', defer: true);
Asset::addLink(href: 'https://example.com/foo.css', rel: 'stylesheet');
Asset::addLink(href: 'https://example.com/bar.css', rel: 'stylesheet', media: 'all');
page.html
<?php
use Josantonius\Asset\Facades\Asset;
?>
<html>
<head>
<?= Asset::outputLinks() ?>
<?= Asset::outputHeadScripts() ?>
</head>
<body>
<?= Asset::outputBodyScripts() ?>
</body>
</html>
Result:
<html>
<head>
<link href="https://example.com/foo.css" rel="stylesheet">
<link href="https://example.com/bar.css" rel="stylesheet" media="all">
<script src="https://example.com/foo.js" type="module"></script>
<script defer src="https://example.com/bar.js"></script>
</head>
<body>
<script async src="foo.js"></script>
<script src="bar.js" type="text/javascript"></script>
</body>
</html>
Tests
To run tests you just need composer and to execute the following:
git clone https://github.com/josantonius/php-asset.git
cd php-asset
composer install
Run unit tests with PHPUnit:
composer phpunit
Run code standard tests with PHPCS:
composer phpcs
Run PHP Mess Detector tests to detect inconsistencies in code style:
composer phpmd
Run all previous tests:
composer tests
TODO
- Add new feature
- Improve tests
- Improve documentation
- Improve English translation in the README file
- Refactor code for disabled code style rules (see phpmd.xml and phpcs.xml)
- Add other HTML elements
-
Add feature to add code between the
<script>
tags
Changelog
Detailed changes for each release are documented in the release notes.
Contribution
Please make sure to read the Contributing Guide, before making a pull request, start a discussion or report a issue.
Thanks to all contributors!
Sponsor
If this project helps you to reduce your development time,
you can sponsor me to support my open source work
License
This repository is licensed under the MIT License.
Copyright © 2016-present, Josantonius