takuya-motoshima / codeigniter-extension
Extend CodeIgniter for ease of use
Installs: 5 049
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 3
Forks: 4
Language:JavaScript
pkg:composer/takuya-motoshima/codeigniter-extension
Requires
- php: ^8.0
 - ext-openssl: *
 - aws/aws-sdk-php: ^3.64
 - codeigniter/framework: 3.1.*
 - doctrine/common: ^2.10
 - hybridauth/hybridauth: 2.*
 - intervention/image: ^2.5
 - mathieuviossat/arraytotexttable: ^1.0
 - twig/twig: 2.*
 - vlucas/phpdotenv: ^5.3
 
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.32.0
 - phpunit/phpunit: ^8.4
 
- dev-main
 - 5.0.1
 - 5.0.0
 - 4.20
 - 4.1.9
 - 4.1.8
 - 4.1.7
 - 4.1.6
 - 4.1.5
 - 4.1.4
 - 4.1.3
 - 4.1.2
 - 4.1.1
 - 4.1.0
 - 4.0.25
 - 4.0.24
 - 4.0.23
 - 4.0.22
 - 4.0.21
 - 4.0.20
 - 4.0.19
 - 4.0.18
 - 4.0.17
 - 4.0.16
 - 4.0.15
 - 4.0.14
 - 4.0.13
 - 4.0.12
 - 4.0.11
 - 4.0.10
 - 4.0.9
 - 4.0.8
 - 4.0.7
 - 4.0.6
 - 4.0.5
 - 4.0.4
 - 4.0.3
 - 4.0.2
 - 4.0.1
 - 4.0.0
 - 3.9.9
 - 3.9.8
 - 3.9.7
 - 3.9.6
 - 3.9.5
 - 3.9.4
 - 3.9.3
 - 3.9.2
 - 3.9.1
 - 3.9.0
 - 3.8.9
 - 3.8.8
 - 3.8.7
 - 3.8.6
 - 3.8.5
 - 3.8.4
 - 3.8.3
 - 3.8.2
 - 3.8.1
 - 3.8.0
 - 3.7.9
 - 3.7.8
 - 3.7.7
 - 3.7.6
 - 3.7.5
 - 3.7.4
 - 3.7.3
 - 3.7.2
 - 3.7.1
 - 3.7.0
 - 3.6.9
 - 3.6.8
 - 3.6.7
 - 3.6.6
 - 3.6.5
 - 3.6.4
 - 3.6.3
 - 3.6.2
 - 3.6.1
 - 3.6.0
 - 3.5.9
 - 3.5.8
 - 3.5.7
 - 3.5.6
 - 3.5.5
 - 3.5.4
 - 3.5.3
 - 3.5.2
 - 3.5.1
 - 3.5.0
 - 3.4.9
 - 3.4.8
 - 3.4.7
 - 3.4.6
 - 3.4.5
 - 3.4.4
 - 3.4.3
 - 3.4.2
 - 3.4.1
 - 3.4.0
 - 3.3.9
 - 3.3.8
 - 3.3.7
 - 3.3.6
 - 3.3.5
 - 3.3.4
 - 3.3.3
 - 3.3.2
 - 3.3.1
 - 3.3.0
 - 3.2.9
 - 3.2.8
 - 3.2.7
 - 3.2.6
 - 3.2.5
 - 3.2.4
 - 3.2.3
 - 3.2.2
 - 3.2.1
 - 3.2.0
 - 3.1.7
 - 3.1.6
 - 3.1.5
 - 3.1.4
 - 3.1.3
 - 3.1.2
 - 3.1.1
 - 3.1.0
 - 3.0.9
 - 3.0.8
 - 3.0.7
 - 3.0.6
 - 3.0.5
 - 3.0.4
 - 3.0.3
 - 3.0.2
 - 3.0.1
 - 3.0.0
 - 2.4.2
 - 2.4.1
 - 2.4.0
 - 2.3.9
 - 2.3.8
 - 2.3.7
 - 2.3.6
 - 2.3.5
 - 2.3.4
 - 2.3.3
 - 2.3.2
 - 2.3.1
 - 2.3.0
 - 2.2.9
 - 2.2.8
 - 2.2.7
 - 2.2.6
 - 2.2.5
 - 2.2.4
 - 2.2.3
 - 2.2.2
 - 2.2.1
 - 2.2.0
 - 2.1.9
 - 2.1.8
 - 2.1.7
 - 2.1.6
 - 2.1.5
 - 2.1.4
 - 2.1.3
 - 2.1.2
 - 2.1.1
 - 2.1.0
 - 2.0.9
 - 2.0.8
 - 2.0.7
 - 2.0.6
 - 2.0.5
 - 2.0.4
 - 2.0.3
 - 2.0.2
 - 2.0.1
 - 2.0.0
 - 1.3.7
 - 1.3.6
 - 1.3.5
 - 1.3.4
 - 1.3.3
 - 1.3.2
 - 1.3.1
 - 1.3.0
 - 1.2.9
 - 1.2.8
 - 1.2.7
 - 1.2.6
 - 1.2.5
 - 1.2.4
 - 1.2.3
 - 1.2.2
 - 1.2.1
 - 1.2.0
 - 1.1.9
 - 1.1.8
 - 1.1.7
 - 1.1.6
 - 1.1.5
 - 1.1.4
 - 1.1.3
 - 1.1.2
 - 1.1.1
 - 1.1.0
 - 1.0.9
 - 1.0.8
 - 1.0.7
 - 1.0.6
 - 1.0.5
 - 1.0.4
 - 1.0.3
 - 1.0.2
 - 1.0.1
 - 1.0.0
 - dev-dependabot/npm_and_yarn/demo/client/axios-1.12.2
 - dev-dependabot/npm_and_yarn/demo/client/axios-1.12.0
 
This package is auto-updated.
Last update: 2025-10-14 01:36:57 UTC
README
You can use extended core classes (controllers, models, views) and utility classes in this package.
API Documentation
API documentation is here.
Demonstration
There is a demo application in demo/. Please use it as a reference for your development.
Release Notes
All changes can be found here.
- 
[5.0.1] - 2024/5/14
Changed
- Installer program fix. Added process to remove 
__prototypes__/,__tests__/,phpunit-printer.yml,phpunit.xmlafter installation. - Add 
client/package-lock.jsonto skeleton. 
 - Installer program fix. Added process to remove 
 - 
[5.0.0] - 2024/5/13
Changed
- 
PHP8 support. PHP8 or higher is required.
To support PHP8, extend the core class of codeigniter-extension in your application.application/core/ PHP AppController.php abstract class AppController extends \X\Controller\Controller {}AppInput.php class AppInput extends \X\Library\Input {}AppLoader.php class AppLoader extends \X\Core\Loader {}AppModel.php abstract class AppModel extends \X\Model\Model {}AppRouter.php class AppRouter extends \X\Core\Router {}AppURI.php class AppURI extends \X\Core\URI {} 
 - 
 - 
[4.2.0] - 2024/5/13
Changed
- Removed the 
$baseDirargument from thegenerateCollectionIdmethod of theX\Rekognition\Clientclass. - Deprecated methods 
message_from_template,message_from_xml,set_mailtypeandattachment_cidhave been removed from the\X\Util\EMailclass.
Please usemessageFromTemplate,messageFromXml,setMailTypeandattachmentCidinstead. - Changed to appropriate method name.
before after ImageHelper::putBase64 ImageHelper::writeDataURLToFile ImageHelper::putBlob ImageHelper::writeBlobToFile ImageHelper::readAsBase64 ImageHelper::readAsDataURL ImageHelper::isBase64 ImageHelper::isDataURL ImageHelper::convertBase64ToBlob ImageHelper::dataURL2Blob ImageHelper::read ImageHelper::readAsBlob VideoHelper::putBase64 VideoHelper::writeDataURLToFile VideoHelper::isBase64 VideoHelper::isDataURL VideoHelper::convertBase64ToBlob VideoHelper::dataURL2Blob  
 - Removed the 
 
Requirements
- 
PHP 7.3.0 or later
 - 
Composer
 - 
php-gd
 - 
php-mbstring
 - 
php-xml
 - 
php-imagick
The method to extract the first frame from a GIF (extractFirstFrameOfGif) in the\X\Util\ImageHelperclass requires ImageMagick.
To use this method, install ImageMagick and php-imagick.- For Amazon LInux 2 OS:
sudo yum -y install ImageMagick php-imagick
 - For Amazon LInux 2023 OS:
- Install ImageMagic and PECL.
sudo dnf -y install ImageMagick ImageMagick-devel php-pear.noarch
 - Install imagick with PECL.
sudo pecl install imagick
 - Add 
imagick.solink in/etc/php.ini.extension=imagick.so
 - Restart 
php-fpmandnginx.sudo systemctl restart nginx sudo systemctl restart php-fpm
 
 - Install ImageMagic and PECL.
 
 - For Amazon LInux 2 OS:
 
Getting Started
- Create project.
composer create-project takuya-motoshima/codeigniter-extension myapp
 - Grant write permission to logs, cache, session to WEB server.
sudo chmod -R 755 public/upload application/{logs,cache,session} sudo chown -R nginx:nginx public/upload application/{logs,cache,session} - Set up a web server (nginx).
If you are using Nginx, copy nginx.sample.conf to/etc/nginx/conf.d/sample.conf.
Restart Nginx.sudo systemctl restart nginx
 - Build a DB for init.sql (MySQL or MariaDB).
 - The skeleton uses webpack for front module bundling.
The front module is located in./client.
How to build the front module:cd client npm run build - Open 
http://{public IP of the server}:3000/in a browser and the following screen will appear.
NOTE: You can log in with the usernamerobin@example.comand passwordpassword. 
Usage
See https://codeigniter.com/userguide3/ for basic usage.
- 
About config (
application/config/config.php).Name Before After base_url if (!empty($_SERVER['HTTP_HOST'])) $config['base_url'] = '//' . $_SERVER['HTTP_HOST'] . str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); enable_hooks FALSE TRUE permitted_uri_chars a-z 0-9~%.:_\- a-z 0-9~%.:_\-, sess_save_path NULL APPPATH . 'session'; cookie_httponly FALSE TRUE composer_autoload FALSE realpath(APPPATH . '../vendor/autoload.php'); index_page index.php  - 
Control of accessible URLs.
- 
Define a controller to be executed when the root URL is accessed.
In the example below, the login page is set to open when the root URL is accessed.application/config/routes.php:
$route['default_controller'] = 'users/login';
 - 
Define login session name.
application/config/constants.php:const SESSION_NAME = 'session';
 - 
Create control over which URLs can be accessed depending on the user's login status.
At the same time, add env loading and error handling inpre_system.application/config/hooks.php:
use \X\Annotation\AnnotationReader; use \X\Util\Logger; $hook['post_controller_constructor'] = function() { if (is_cli()) return; $CI =& get_instance(); $meta = AnnotationReader::getAccessibility($CI->router->class, $CI->router->method); $loggedin = !empty($_SESSION[SESSION_NAME]); $current = lcfirst($CI->router->directory ?? '') . lcfirst($CI->router->class) . '/' . $CI->router->method; $default = '/users/index'; $allowRoles = !empty($meta->allow_role) ? array_map('trim', explode(',', $meta->allow_role)) : null; if (!$meta->allow_http) throw new \RuntimeException('HTTP access is not allowed'); else if ($loggedin && !$meta->allow_login) redirect($default); else if (!$loggedin && !$meta->allow_logoff) redirect('/users/login'); else if ($loggedin && !empty($allowRoles)) { $role = $_SESSION[SESSION_NAME]['role'] ?? ''; if (!in_array($role, $allowRoles) && $default !== $current) redirect($default); } }; $hook['pre_system'] = function () { $dotenv = Dotenv\Dotenv::createImmutable(ENV_DIR); $dotenv->load(); set_exception_handler(function ($e) { Logger::error($e); show_error($e->getMessage(), 500); }); };
 - 
After this, you will need to create controllers, models, and views, see the demo for details.
 
 - 
 - 
About Twig Template Engine.
This extension package uses the Twig template.
See here for how to use Twig.In addition, the session of the logged-in user is automatically set in the template variable.
This is useful, for example, when displaying the login username on the screen.PHP:
$_SESSION['user'] = ['name' => 'John Smith'];
HTML:
{% if session.user is not empty %} Hello {{session.user.name}}! {% endif %} Who is it? {% else %} 
Testing
The unit test consists of the following files.
- tests/*.php: Test Case.
 - phpunit.xml: Test setting fill.
 - phpunit-printer.yml: Test result output format.
 
composer test
PHPDoc
Generate PHPDoc in docs/.
#wget https://phpdoc.org/phpDocumentor.phar #chmod +x phpDocumentor.phar php phpDocumentor.phar run -d src/ --ignore vendor --ignore src/X/Database/Driver/ -t docs/
Author
Takuya Motoshima




