Quantcast
Channel: CodeIgniter Forums - All Forums
Viewing all 14343 articles
Browse latest View live

Add new field from different table to shield login

$
0
0
Hi,

i need to add a new field into the authentification of shield.


This field comes NOT from the users-table this field comes from a second table. I need to check the entered values with the values from db.


For that i start at the login page and also i add the language-parts in the lang-file.

i add a new field in view/login
Code:
<input type="number" class="form-control fs-13px h-45px" id="floatingCipInput" name="newfield" inputmode="number" autocomplete="current-newfield" placeholder="<?= lang('Auth.cip') ?>" value="<?= old('newfield') ?>" required>

Now i need to add the field to the login-process, here i failed.

I need to add a validation rule with called a function to get and check some datas in touch with the values of the newfield.

Play around with the Validation.php brings no goal.


1) How (in wich file) i can add a validation function for the newfield, to get and check the values from the second-table?
2) How (in wich file) i cann add data-to the session after successful log in?

Thanks a lot.

apache2 server-status

$
0
0
I am trying to get status information from apache2. 

There are instructions here:

https://httpd.apache.org/docs/2.4/mod/mod_status.html

https://statuslist.app/apache/apache-sta...etup-guide

<Location "/server-status">
    SetHandler server-status
    Require host servername.com
...
</Location>

My problem is I have multiple domains pointing to 1 ip, virtual hosts etc.  I need to be able to handle this from within CI or index.php.
http://your.server.name/server-status.
I tried this:

if ($_SERVER['HTTP_HOST']  === 'servername.com') {

// Redirect browser
header("Location: https://servername,com/server-status");

exit;
}
This does not work.  redirects etc
Any ideas how to transfer control out of CI

404 Status Even Though the Image is Served

$
0
0
I'm working on a method to serve images stored in a specific directory within my CodeIgniter 4 application. The code looks like this:

PHP Code:
public function downloadImg($user_id$fileName)
{
    $filePath WRITEPATH 'account' DIRECTORY_SEPARATOR $user_id DIRECTORY_SEPARATOR 'persons' DIRECTORY_SEPARATOR $fileName;

    if (!file_exists($filePath))
        return $this->response->setStatusCode(404)->setBody('File not found.');

    $mimeType mime_content_type($filePath);
    $fileSize filesize($filePath);
    $image file_get_contents($filePath);

    return $this->response
        
->setHeader('Content-Type'$mimeType)
        ->setHeader('Content-Length'$fileSize)
        ->setBody($image)
        ->setStatusCode(200);


Issue:

When accessing this method, the image is successfully returned in the response, and I can view it in the browser or download it as expected. However, the HTTP status code in the response is 404 Not Found, which is incorrect and misleading.

Troubleshooting Steps:
  • Verified that file_exists($filePath) correctly returns true for the requested file.
  • Double-checked the $filePath, and it matches the correct file location.
  • The image content, MIME type, and file size are set correctly in the response headers.
  • Tested other HTTP status codes (e.g., 201), but the issue persists.
Questions:
  1. Why would the HTTP status code still be 404 when the file is served correctly?
  2. Could this be an issue with CodeIgniter's response handling or headers being overridden elsewhere in the application?
  3. How can I ensure the correct HTTP status code (200) is returned along with the image?
Any advice or guidance on this would be greatly appreciated! Thank you!

Shield auth messages - I would like to use mine

$
0
0
Hello!

I have a simple practical question about CodeIgniter 4 shield, which I'm using in one of my new web applications. However, I would like to use my language for some of the Shield auth messages (not validation messages, I know how to overwrite these). I'm talking about the messages which are located at \vendor\codeigniter4\shield\src\Language\en folder and in the Auth.php file inside this folder. I will give you an example, there is a message in this file that goes like this: "Passwords cannot contain re-hashed personal information.". I would like to overwrite these messages with my own. I cannot use other language folders since the language that I would like to use is not offered (croatian) yet in the CodeIgniter installation. Any ideas?

Spark on Docker not working

$
0
0
Hi Folks!
I'm trying to setup my application with CI 4.5 on docker, but when I try to migrate and seed nothing occurs. It just give me back an " " response. What am I missing? 

Here's my Dockerfile: 
Code:
FROM php:8.2.27-apache

RUN apt-get update && \
    apt-get install -y

RUN apt-get install -y curl vim wget git curl libgdal-dev \
    build-essential libssl-dev zlib1g-dev libpng-dev \
    libjpeg-dev libfreetype6-dev libonig-dev libicu-dev \
    libzip-dev unzip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY . /var/www/html

COPY /docker/000-default.conf /etc/apache2/sites-enabled/000-default.conf

RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring gd intl zip && docker-php-ext-enable mysqli

RUN docker-php-ext-configure intl

RUN chown -R www-data:www-data /var/www/html && a2enmod rewrite && a2enmod headers proxy_http

RUN echo "upload_max_filesize = 100M" > /usr/local/etc/php/conf.d/uploads.ini

RUN echo "post_max_size = 100M" >> /usr/local/etc/php/conf.d/uploads.ini

RUN service apache2 restart

WORKDIR /var/www/html

USER www-data

EXPOSE 80
EXPOSE 443

and Here's my docker-compose: 
Code:
services:
  myservice:
    image: myimage:main
    command: bash -c "php spark migrate && php spark db:seed"
    restart: "unless-stopped"
    links:
      - dbservice
    ports:
      - "9000:80"
    environment:
      admin_name: "NAME"
      admin_email: "email@email.com"
      admin_password: "password"
      database_default_hostname: dbservice
      database_default_database: dbname
      database_default_username: root
      database_default_password: dbpw
      logger_threshold: 5
      app_baseURL: "http://localhost:9000"


  dbservice:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: dbpw
      MYSQL_DATABASE: dbname
    ports:
      - "3306:3306"

And if I try to run spark on Vendor's folder, it works correctly. I've already tried to copy to my app base folder, but same result. What am I missing?

redirect not working

$
0
0
Hi i try to run a function from a library wich returns a redirect.

It failed, the redirect not fired, i dont know what i do wrong.

Here is the situation

in basecontroller i add my library on initController
Code:
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
    $this->mylib = new MyLib();  
}

also in basecontroller i defined these function
Code:
public function initPage(){
    $this->myLib = new MyLib();               //Why need to create a new instance and dont use the instance from initController - my tries failed - is it possible?
    $this->myLib->my_lib_function();
}


In the library i've two functions
- The one i've called in the base-controller
Code:
public function my_lib_function()
{
            $this->my_redirect('viewname');       //POS1    

            die("die after my_redirect");             //DIE1

           //go on...
}


and the function for handle and doing the redirect himself
Code:
public function my_redirect($view='defaultview')
{
        //header('Location: /Errors/'.$view);             //Here a redirect fired but thats not the way in codeigniter4 so i won't use it
        return redirect()->to('Errors::'.$view);            //Play around with "return" or without - has no effect
}

Notice: "Errors" is a controller in the main Controllers-Folder.
Here are the routes for them
Code:
$routes->get('errors/(:any)', 'Errors::code/$1');
  $routes->get('errors', 'Errors::index');

So the result is that the redirect from the POS1 dont run. Nothing happens.

If i add the "die(..)" statements the DIE1 print out, but not more. If i comment the DIE1 out, the code goes on...

Why the redirect dont work?

Forum software updated

$
0
0
Hey gang -

Just wanted to let you know that the forums were just updated last night. Since we moved a couple of point versions, I wanted to make you aware of it in case you come across anything odd.

If you do find something strange or not working, let me know and I'll try to fix it. I'm still pretty slammed with a freelance job that's taking up most of my free time like it has for the last few months, so bear with me if it takes a little bit to get things fixed up.

HTML6 and CSS5: What’s New for Web Developers?


DEPRECATED on construct?

$
0
0
I see the following infos in the debug-toolbar

"[DEPRECATED] Creation of dynamic property App\Libraries\MyLib::$ModulesModel is deprecated in APPPATH/Libraries/MyLib.php on line 128. 1 APPPATH/Controllers/BaseController.php(71): App\Libraries\MyLib->__construct() 2 SYSTEMPATH/CodeIgniter.php(904): App\Controllers\BaseController->initController(Object(CodeIgniter\HTTP\IncomingRequest), Object(CodeIgniter\HTTP\Response), Object(CodeIgniter\Log\Logger)) 3 SYSTEMPATH/CodeIgniter.php(500): CodeIgniter\CodeIgniter->createController() 4 SYSTEMPATH/CodeIgniter.php(355): CodeIgniter\CodeIgniter->handleRequest(null, Object(Config\Cache), false) 5 SYSTEMPATH/Boot.php(325): CodeIgniter\CodeIgniter->run() 6 SYSTEMPATH/Boot.php(67): CodeIgniter\Boot::runCodeIgniter(Object(CodeIgniter\CodeIgniter)) 7 FCPATH/index.php(56): CodeIgniter\Boot::bootWeb(Object(Config\Paths))"

So have a look at the line i found this

Code:
//Construct
    function __construct()
{
        //Session
        $this->session = session(); 


        //Models
        $this->ModulesModel = model('ModulesModel');  //This is line 128
        $this->UsersModel = model('UsersModel');
        $this->RolesModel = model('RolesModel');
        $this->CompanyModel = model('CompanyModel');
       
        //Helper
        $this->current_url = current_url(true);

        ...
    }

What is wrong with this, and how i can do it, may i dont need to create a own instance of each needed modell in the library!?

shield - error "is null. You should not use the incomplete User object"

$
0
0
Hi, i recieved this error

"CodeIgniter\Shield\Exceptions\LogicException

"$user->id" is null. You should not use the incomplete User object."

I dont understand the message - the entered username is in the database.

What can it caused?

May it is in touch with this topic: https://forum.codeigniter.com/showthread.php?tid=92266

Seems to found it.

I've a missconfiguration on the new validation rules
Config/Validation.php

Code:
public $login = [
        'username' => [
            'label' => 'Auth.username',
            'rules' => ['required',
                        'max_length[30]',
                        'min_length[3]',
                        'regex_match[/\A[a-zA-Z0-9\.]+\z/]',
                        ],
        ],
        'password' => [
        'label' => 'Auth.password',
            'rules' => [
                'required',
                'max_byte[72]',
            ],
        'errors' => [
            'max_byte' => 'Auth.errorPasswordTooLongBytes',
            ]
        ],
    ];

Now the login seems to work without the error message.

Set username procedurally in SHIELD

$
0
0
I'd like to add custom First name and Last name to the registration form and don't allow user to set his own username, I'd like to set this field procedurally... for example combining First Name and Last name.
So, I have created a custom registration form ( see code below ) to remove username field and added First and Last name fields
Code:
<form class="form-transparent-grey" action="<?= url_to('register') ?>" method="post">
                                <?= csrf_field() ?>

                                <div class="row">
                                    <div class="col-lg-12">
                                        <h3><?= lang('Auth.register') ?></h3>
                                        <p>Crea il tuo account compilando il modulo sottostante. Dopo la registrazione il tuo account dovrà essere validato da un amministratore per essere attivo.</p>
                                    </div>
                                    <div class="col-lg-6 form-group">
                                        <label for="floatingFirstnameInput" class="sr-only"><?= lang('Myauth.firstname') ?></label>
                                        <input type="text" class="form-control" id="floatingFirstnameInput" name="firstname" inputmode="text" autocomplete="firstname" placeholder="<?= lang('Myauth.firstname') ?>" value="<?= old('firstname') ?>" required>
                                    </div>
                                    <div class="col-lg-6 form-group">
                                        <label for="floatingLastnameInput" class="sr-only"><?= lang('Myauth.lastname') ?></label>
                                        <input type="text" class="form-control" id="floatingLastnameInput" name="lastname" inputmode="text" autocomplete="lastname" placeholder="<?= lang('Myauth.lastname') ?>" value="<?= old('lastname') ?>" required>
                                    </div>
                                    <div class="col-lg-6 form-group">
                                        <label for="floatingPasswordInput" class="sr-only"><?= lang('Auth.password') ?></label>
                                        <input type="password" class="form-control" id="floatingPasswordInput" name="password" inputmode="text" autocomplete="new-password" placeholder="<?= lang('Auth.password') ?>" required>
                                    </div>
                                    <div class="col-lg-6 form-group">
                                        <label for="floatingPasswordConfirmInput" class="sr-only"><?= lang('Auth.passwordConfirm') ?></label>
                                        <input type="password" class="form-control" id="floatingPasswordConfirmInput" name="password_confirm" inputmode="text" autocomplete="new-password" placeholder="<?= lang('Auth.passwordConfirm') ?>" required>
                                    </div>
                                    <div class="col-lg-12 form-group">
                                        <label for="floatingEmailInput" class="sr-only"><?= lang('Auth.email') ?></label>
                                        <input type="email" class="form-control" id="floatingEmailInput" name="email" inputmode="email" autocomplete="email" placeholder="<?= lang('Auth.email') ?>" value="<?= old('email') ?>" required>
                                    </div>
                                   
                                    <div class="col-lg-12 form-group">
                                        <button type="submit" class="btn btn-primary btn-block"><?= lang('Auth.register') ?></button>
                                    </div>
                                </div>
                            </form>

Added First and Last name validations rules in app\Config\Validation.php file
Code:
public $registration = [
        'firstname' => [
            'label' => 'Myauth.firstname',
            'rules' => [
                'required',
                'min_length[2]',
            ],
        ],
        'lastname' => [
            'label' => 'Myauth.lastname',
            'rules' => [
                'required',
                'min_length[2]',
            ],
        ],
        'email' => [
            'label' => 'Auth.email',
            'rules' => [
                'required',
                'max_length[254]',
                'valid_email',
                'is_unique[auth_identities.secret]',
            ],
        ],
        'password' => [
            'label' => 'Auth.password',
            'rules' => 'required|max_byte[72]|strong_password[]',
            'errors' => [
                'max_byte' => 'Auth.errorPasswordTooLongBytes'
            ]
        ],
        'password_confirm' => [
            'label' => 'Auth.passwordConfirm',
            'rules' => 'required|matches[password]',
        ],
    ];

Created a custom userModel in app\Models\UserModel.php
Code:
declare(strict_types=1);

namespace App\Models;

use CodeIgniter\Shield\Models\UserModel as ShieldUserModel;

class UserModel extends ShieldUserModel
{
    protected function initialize(): void
    {
        parent::initialize();

        $this->allowedFields = [
            ...$this->allowedFields,
            'firstname',
            'lastname',
        ];
    }
}

but I have no idea how to add procedurally username into the db...any suggestions?
Thanks a lot

Class PageNotFoundException not found

$
0
0
Sometimes weird issues arise...at least until I won't understand how CI4 works.
When I call the Show method in following controller:
Code:
namespace Admin\Controllers;

use App\Controllers\BaseController;
use CodeIgniter\HTTP\ResponseInterface;
use App\Models\UserModel;
use Codeigniter\Shield\Entities\User;
use Codeigniter\Exceptions\PageNotFoundException;

class Users extends BaseController
{
    private UserModel $model;

    public function __construct()
    {
        $this->model = new UserModel;
    }

    public function index()
    {
        $users = $this->model->orderBy('created_at')->paginate(3);
        $this->viewData['users'] = $users;
        $this->viewData['pager'] = $this->model->pager;
        return view('Admin\Views\Users\index', $this->viewData);
    }

    public function show($id)
    {
        $user = $this->getUserOr404($id);
        $this->viewData['user'] = $user;
        return view('Admin\Views\Users\show', $this->viewData);
    }

    private function getUserOr404($id): User
    {
        $user = $this->model->find($id);

        if($user === null)
        {
            throw new PageNotFoundException("User not found");
        }

        return $user;
    }
}

I get the error...can I ask why this happens? I have no idea how to fix it
Class "Codeigniter\Exceptions\PageNotFoundException" not found
ROOTPATH\Admin\Controllers\Users.php at line 51
Code:
44    private function getUserOr404($id): User
45    {
46        $user = $this->model->find($id);
47        //$user = $model->find($id);
48
49        if($user === null)
50        {
51            throw new PageNotFoundException("User not found");
52            //throw PageNotFoundException::forPageNotFound();
53        }
54
55        return $user;
56    }
57 }

Why - You must set the database table to be used with your query.

$
0
0
Hi, I wondering about getting this error " You must set the database table to be used with your query."


The marked line is this 
Code:
$var=$this->MyModel ->my_function($vars,$id);


I do that inside a library. The parts of the model are
Code:
namespace App\Models;
use CodeIgniter\Model;

class MyModel extends Model
{
    protected $DB;
     

    #### INIT YOUR MODEL ####
    protected function initialize()
    {
        $this->DB = db_connect('DB');   
        $this->DBA = db_connect('DBA');   
    }

public function my_function($fields,$id)
    {
       
        $qry=$this->DB->table('my_db_table');            //here i define the table, thats why i dont  understand the errormessage!?

        //Select
        if(empty($fields) || in_array('*',$fields)){ $qry->select('*'); }else{ $qry->select($fields); }
       
        //Where
        $qry->Where(['id' => $id]);
     
        //Get the results as RowArray
        $res= $qry->get()->getResultArray();

        //return as array or array of arrays
        if(count($res)>1){ return $res; }else{ return $res[0]; }         
    }

}

may i'm blind to see the missing thing...

Could CodeIgniter\Debug\ExceptionHandler be more object oriented and less coupled?

$
0
0
My projects run codeigniter with Swoole, which is a 'Resident Process Mode'. That means 'public coupled'  is strictly restricted. For example, when using services, I can't set the param $getShared to true because the static properties like $instances will be shared among all requests, and the coroutine mechanism will cause to conflicts. So I've paid some time to modify codeigniter to adapt to swoole. If you ask me: why not use some framework developed for swoole? Because I like 'Do It Yourself' and codeigniter's manual is very friendly to fresh man like me.

Recently, after learned a little about Architecture Design, I found that some modification I did may originally can be avoided. So those are my first group of bafflement:
1. Now that $request and $response are required in BaseExceptionHandler's abstract method 'handle', why not use them in the method 'render'? For example, set them as properties of BaseExceptionHandler rather than ExceptionHandler, or just pass them to 'render'. After then, we can respond to client by the response instance instead of 'echo', which can only output contents to 'stdout'. What's more, call static method to get request instance and response instance in view file error_exception.php is 'public coupled', pass them to this file may be less coupled?
2. Now that we've got response instance in method 'handle', why not use it to check if headers have been sent or not and send headers, but call Process-oriented functions headers_sent and header?
3. Is there some other way to end the current request safely except for call exit after view be rendered?
Thank you for any response!

I'm a Chinese with broken English, if any inappropriate diction is used, apologize !
If anyone want my modified code to adapt to Swoole, I'm glad to share with you by free!

Run seed command in module

$
0
0
I have create an Admin module, to add an Admin user into the db I created a seed file into the Admin\Database\Seeds path, below the code of the seeder
Code:
namespace Admin\Database\Seeds;

use CodeIgniter\Database\Seeder;
use CodeIgniter\Shield\Entities\User;
use App\Models\UserModel;

class AddAdminAccount extends Seeder
{
    public function run()
    {
        $user = new User([
            'email' => 'admin@example.com',
            'password' => 'secret',
            'firstname' => 'Admin',
            'lastname' => 'Strator',
        ]);

        $model = new UserModel;

        $model->save($user);

        $user = $model->findById($model->getInsertID());

        $user->activate();

        $user->addGroup('user', 'admin');
    }
}

The issue arises when I run the php spark dbConfusedeed NameFile command...I got the following error, since it seems that the command looks for the seeder file into the main app folder.
[InvalidArgumentException]
The specified seeder is not a valid file: D:\project\app\Database/Seeds/AddAdminAccount
I'm sure that could be an option to set spark db command to run in Admin module namespace...but I wasn't able to find it in CI documentation...am I wrong? 
Is it possible to run seed file in Admin module?
Thanks a lot for your feedback

Components for Codeigniter 4

$
0
0
I would like to announce a semi-new Components library for CI4. It allows to encapsulate html and css classes/styles into reusable website building blocks.
See it here: https://packagist.org/packages/dgvirtual...components
It allows to write this in your view:
PHP Code:
<x-green-button onclick="alert('I was clicked!')">
  <?= $clickMeLabel ?>
</x-green-button> 
and after rendering get this sent to your browser:
PHP Code:
<button
    style
="color: white; background-color: green;"
    <?= isset($onclick) ? 'onclick="' $onclick '"' '' ?>
>
    <?= $slot ?>
</button> 
This functionality has been available in Bonfire2 for a while, but I have extracted it and put it into an installable composer package.

Bonfire2 was written mainly by Lonnie Ezell (@kilishan), so most of the credit goes to him.

Hope you will find it as useful as I have.

Send Email on Aruba not working

$
0
0
HI,
I'm trying to send emails using Aruba SMTP, it works locally but when I publish doesn't work.

I tried to view the output of : 

$email->printDebugger(['headers']);

but it returns nothing.

Does anyone know what the problem could be?,

CodeIgniter 4 Restful Todo API Project - Feedback and Suggestions Wanted!

$
0
0
Hello everyone,
I’ve recently developed a RESTful Todo API project using CodeIgniter 4 and I’d love to get feedback from the community. This project allows users to manage tasks, assign them to friends, and handle friendships. Users can send, accept, or reject friendship requests. Authentication is handled using Shield, and the app supports Turkish, English, and German languages. For quick access, Queue and multilingual support are stored in Redis, and rate limiting is also implemented using Redis.
The project includes an admin panel for managing users, tasks, friendships, logs, and more. All admin actions are tracked with an event system stored in MongoDB, and errors are logged as well. The database structure is ready with Migration and Seeder files, and design patterns like Factory, Singleton, and Observer have been used.

Here’s the link to the repository: https://github.com/kuzeyybora/ci4_restful_todo_api

I would appreciate any feedback, suggestions, or advice on best practices and improvements. Looking forward to your thoughts!
Thank you for your time and feedback!

Can't get migration in module to be recognised by spark migrate --all

$
0
0
I have modules separate to the app namespace. I'm following the instructions about modules and trying to run a migration that lives under my own namespace, but spark migrate is completely ignoring it and I can't figure out why.

My file structure:

app
midair
system

I have the following code:

app/Config/Autoload.php
PHP Code:
public $psr4 = [
    APP_NAMESPACE => APPPATH,
    'Midair\Article' => ROOTPATH 'midair/Article',
]; 

midair/Article/Database/Migrations/2025-01-07-195230_CreateArticle.php
PHP Code:
namespace Midair\Article\Database\Migrations;

use 
CodeIgniter\Database\Migration;

class 
CreateArticle extends Migration
{
    public function up()
    {
        $this->forge->addField([
            'id' => [
                'type'          => 'INT',
                'constraint'    => 5,
                'unsigned'      => true,
                'auto_increment' => true,
            ],
            'title' => [
                'type'      => 'VARCHAR',
                'constraint' => '255',
            ],
            'link' => [
                'type'      => 'VARCHAR',
                'constraint' => '255',
            ],
            'description' => [
                'type'      => 'TEXT',
            ],
            'author' => [
                'type'      => 'VARCHAR',
                'constraint' => '255',
            ],
            'categories' => [
                'type'      => 'VARCHAR',
                'constraint' => '255',
            ],
            'guid' => [
                'type'      => 'VARCHAR',
                'constraint' => '255',
            ],
            'pubDate' => [
                'type' => 'DATETIME',
            ],
            'content' => [
                'type' => 'TEXT',
            ],
            'created_at' => [
                'type' => 'DATETIME',
                'null' => true,
            ],
            'updated_at' => [
                'type' => 'DATETIME',
                'null' => true,
            ],
        ]);
        $this->forge->addPrimaryKey('id');
        $this->forge->addKey('pubDate');
        $this->forge->addUniqueKey('link');
        $this->forge->createTable('articles');
    }

    public function down()
    {
        $this->forge->dropTable('articles');
    }


And then when my server starts I'm executing
Code:
php spark migrate --all

I've tested moving the migration into app/Database/Migrations (and adjusting the namespace) and it works fine, but for some reason it's refusing to see the migration when it lives under my own namespace. I also tried running php spark migrate -n Midair\\Article and that also didn't work.

Code Igniter Monitoring Library

$
0
0
Hi devs, I've finally built a brand new CodeIgniter monitoring package.
I spent so much time building this monitoring library because I felt a significant gap in the monitoring space for CodeIgniter framework. I think that often the CodeIgniter community gets overlooked by larger monitoring solutions.

Sentry, Bugsnag, and other well known tools do not offer native integration for this framework and a lot of developers struggle to adopt this kind of technology. I decided to try to fill this gap.

It seems that the CodeIgniter community might not be interesting for big SaaS companies, but for me it’s completely different. I’m a bootstrapped founder with two other friends that help me maintain the company, so I can be free to build the product.

I come basically from nothing, working from my home in the south of Italy for 5 years now. Finally Inspector took off the ground after two years and now we have more room to go deeper into specific technologies where we can provide great value due to the lack of solutions.

We rejected a lot of VC proposals along the way because of their tendency to scale up the market and target big corporations. We definitely rejected this idea. We started this journey trying to help other software creators to make their life easier with powerful solutions. And we have been growing consistently for five years thanks to this different position against the market.

I had the wonderful opportunity to support developers in every corner of the world literally (US, Australia, Argentina, Kenya, Singapore, Germany, etc), and I’m so grateful for that.

I hope the Inspector package for CodeIgniter can be the right monitoring solution for developers that love to work with this framework, without the need to manually integrate libraries and tools, or implement tricky configurations.

As CodeIgniter exerts you can for sure identify many ideas to improve it. Feel free to write your feedback or open new issues on the GitHub repository.

https://github.com/inspector-apm/inspector-codeigniter
Viewing all 14343 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>