CodeIgniter CLI trainer script ( creates simple application)

veedeoo 2 Tallied Votes 2K Views Share

Hello Everyone,

I wrote this script way back in 2008 as Version1. However, I was forced to forget about this, because it was criticized by many developers with BS, MS, and "Seasoned PHP Developer" under their names. During those days, I couldn't stand up for my own reasons, because I can't even put High School graduate as my lone achievement under my name. I was told this script was 10 steps backward to where we at in 2008. If my memory still served me well, even my own brothers in Silicon Valley have asked me to forget about this.

enough of bad memories behind this script Honestly, I could have developed this into something useful, if I was given just a little moral support.

CLI was introduced in PHP some very long time ago. However, it wasn't popular and most of the people have questioned or were not interested in writing any application VIA the command line Iterface. For some odd reasons, laravel, FuelPHP and others took advantage of the CLI features. Anyone who are familiar with Laravel, Symfony2, and Fuel PHP can easily relate to what I am talking about. Else, my sincere apology for bringing the subject on some relic technology.

I love the idea of being able to generate or create an application through command prompt. This may sound too foolish and Backward in 2008, but today I can easily demonstrate why it is important for new comers in PHP MVC Framework, most imporatantly CodeIgniter users.

Why Do it on CI?
Believe it or not, CI played a major role in the innovation of many PHP MVC frameworks. Although it may have been ignored by others, we cannot deny how important CodeIgniter's contributions to PHP MVC framework developers. CI is the most lightweight Framework out there, it is also the most extensible and the easiest to modify.

What this script is all about?
This script was intended to serve as a training tool in helping new developers and students to write easily create simple application on CI.

Requirements?
1. XAMPP or Uniform Server
2. CodeIgniter.

Few Steps to keep you going
Step One: Open your command prompt, CD to xampp/ or zero/ (for uniform server) and then type

    php -v

you should be getting a response something like this

    C:\public_directory>php -v
    PHP 5.5.3 (cli) (built: Aug 20 2013 16:11:53)
    Copyright (c) 1997-2013 The PHP Group
    Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies

If you are reading resposne similar to the above, you are good to go.

Step Two: Unzipped CodeIgniter to htdocs directory or www directory for uniform server.
Step Three: load application/config/config.php on your favorite source code editor e.g. notepad++.

find line 47 or this line of codes

$config['uri_protocol'] = 'AUTO';

right below it add

$config['uri_protocol'] = isset($_SERVER['REQUEST_URI']) ? 'PATH_INFO' : 'CLI';  

save your changes...

Step Four: Copy the snippets I have provided above and save as application/controllers/build.php

Step Five: Type this on your command prompt

php index.php build create_app myapp

Step Six: direct your favorite browser to localhost/codeIgniterLocation/myapp. You should see something like this

 This is my first application
 This is your first application 

Explore and Learn
The snippet above created these files for you
application/myapp.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Myapp extends CI_Controller {

public function __construct(){

    parent::__construct();

}

public function index(){

    $this->load->model('Myapp_model');



    $data['content'] = $this->Myapp_model->set_index();

$this->load->view('Myapp_view', $data);

}

}

?>

the model file

application/models/myapp_model.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

  class Myapp_Model extends CI_Model {

  public function __construct(){

    parent::__construct();

 }

public function set_index(){

    return ('This is your first application');

}

}

?>

Lastly, the snippet will create the template file application/views/myapp_view.php

 <html>

<title>Myapp3 view page </title>

<body><h2> This is my first application</h2><?php echo $content; ?></body>

</html>

Experiment for all the possibilities. The snippet above have given you the basic foundation of creating an application in CI without trying to figure out how its done. Just follow the snippet's trail and you won't get lost.

What's Next
I might write another tutorial about CI sometime this year. If you noticed this part of the snippet?

public function create_app($controller,$migration=false)

That migration, if set to true, we can make the CI to generate a file called migration for automatic database creation. I just don't feel like covering the subject about migration, because it will confusing to some. Please come back here in Daniweb often and check tutorial and snippet sections.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');


/*
* Modified version of 2009 version 2.1.
* Copyright (C) 2009 - Present @geegler and @veedeoo [veedeoo@gmail.com]
* Everyone is permitted to copy and distribute verbatim or modified copies of this license document, 
* and changing it is allowed as long as the name is changed.
* DON'T BE A DICK PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
*
***** Do whatever you like with the original work, just don't be a dick.
***** Being a dick includes - but is not limited to - the following instances:
********* 1a. Outright copyright infringement - Don't just copy this and change the name.
********* 1b. Selling the unmodified original with no work done what-so-ever, that's REALLY being a dick.
********* 1c. Modifying the original work to contain hidden harmful content. That would make you a PROPER dick.
***** If you become rich through modifications, related works/services, or supporting the original work, share the love. Only a dick would make loads off this work and not buy the original works creator(s) a pint.
***** Code is provided with no warranty. 
*********** Using somebody else's code and bitching when it goes wrong makes you a DONKEY dick. 
*********** Fix the problem yourself. A non-dick would submit the fix back.
* filename: build.php
* Special thanks to mentor Mr. Lorenzo De Leon Alipio for his mentorship and dedication and love for innovation
* License info: http://www.dbad-license.org/
*/


class Build extends CI_Controller { 
	private $ldel = '{';
	private $rdel = '}';
	private $tab = "\t";
	private $tab2 = "\t\t";
	
	private $ret = "\n\n";
	private $ret2 = "\n\n\n\n";
	private $rettab = "\n\n\t";
    private $tabret= "\t\n\n";

	public function __construct(){
		parent::__construct();

	}
/*
* return string
*/
	public function index(){

		echo 'This is shown on CLI';
	}
	
	/*
	* CLI tester
	* returns string 
	*/
	
	public function say_something($name){

			echo 'Hello '. $name;
	}
	/*
	* create application's controller file, model file, and view file
	* @migration, this you can extend
	*/
	public function create_app($controller,$migration=false){
		if(file_exists('application/controllers/'.$controller.'php') OR (class_exists(''.$controller.'')) OR (class_exists(''.$controller.'_Model'))){
			echo $controller.' Controller already exists in the application/controllers directory';
		}
		else{
				$this->create_controller($controller);
					$this->create_model($controller);
						$this->create_view($controller);
				

		}
	}
	/*
	* create controller
	* returns boolean true
	*/
	public function create_controller($controller){
			$controller_name_l = strtolower($controller);
			$controller_name = ucfirst($controller_name_l);
				$f = "";
		## must use single quotes when it is necessary
				$f .='<?php  if ( ! defined(\'BASEPATH\')) exit(\'No direct script access allowed\');';
				
				$f .= $this->ret;
				$f .='class '.$controller_name.' extends CI_Controller {' ;
				
				$f .= $this->rettab;
				$f .='public function __construct(){';
				$f .=$this->ret;
				
				$f .= $this->tab2;
				$f .='parent::__construct();';
				$f .= $this->ret;
				$f .='}';
				
				$f .= $this->rettab;
				$f .='public function index(){';
				$f .= $this->ret;
				
				$f .= $this->tab2;
				$f .= '$this->load->model(\''.$controller_name.'_model\');';
				$f .= $this->ret2;
				
				$f .= $this->tab2;
				$f .= '$data[\'content\'] = $this->'.$controller_name.'_model->set_index();';
				$f .= $this->ret;
				$f .=$this->tab;
				$f .= '$this->load->view(\''.$controller_name.'_view\', $data);';
				$f .= $this->ret;
				$f .=$this->tab;
				$f .='}';
				$f .= $this->ret;
				$f .='}';
				$f .= $this->ret;
				$f .='?>';

				$writeThisFile = fopen('application/controllers/'.$controller_name_l.'.php',"w");
				fwrite($writeThisFile,$f);
				fclose($writeThisFile); 
				return true;
	}
	/*
	* create model
	* returns boolean true
	*/
	public function create_model($controller){

			$controller_name_l = strtolower($controller);
			$controller_name = ucfirst($controller_name_l);
				$f = "";
		## must use single quotes when it is necessary
				$f .='<?php  if ( ! defined(\'BASEPATH\')) exit(\'No direct script access allowed\');';
				$f .= $this->ret;
				$f .='class '.$controller_name.'_Model extends CI_Model {' ;
				$f .= $this->ret;
				$f .='public function __construct(){';
				$f .= $this->rettab;
				$f .='parent::__construct();';
				$f .= $this->ret;
				$f .='}';
				$f .= $this->rettab;
				$f .='public function set_index(){';
				$f .= $this->ret;
				$f .= $this->tab2;
				$f .='return (\'This is your first application\');';
				$f .= $this->rettab;
				$f .='}';
				$f .= $this->ret;
				$f .='}';
				$f .= $this->ret;
				$f .='?>';

				$writeThisFile = fopen('application/models/'.$controller_name_l.'_model.php',"w");
				fwrite($writeThisFile,$f);
				fclose($writeThisFile); 
				return true;

	}
	/*
	* create view 
	* returns boolean true
	*/
	public function create_view($controller){
			$controller_name_l = strtolower($controller);
			$controller_name = ucfirst($controller_name_l);
			
			$f ="";
			$f .='<html>';
			$f .= $this->ret;
			$f .= '<title>'.$controller_name.' view page </title>';
			$f .= $this->ret;
			$f .= '<body>';
			$f .= '<h2> This is my first application</h2>';
			$f .= '<?php echo $content; ?>';
			$f .= '</body>'.$this->ret.'</html>';
			$writeThisFile = fopen('application/views/'.$controller_name_l.'_view.php',"w");
				fwrite($writeThisFile,$f);
				fclose($writeThisFile); 
				return true;


	}

}
Member Avatar for iamthwee
iamthwee

V, I am using codeigniter at the moment and loving it. Well, sometimes it takes longer to build something than regular php but it is worth it in my opinion.

Can you explain why you would want to do this from the command line, what are the benefits? How would it be useful/different from development in an ide such as sublime?

veedeoo 474 Junior Poster Featured Poster

Hi iamthwee,

Thanks for the response. I will be writing a second part of this tutorial and I will demonstrate how to make the CI migration class to be able to create the application database including the router. So, creating the basic foundation of the application is a brisk. We don't have to create the initial controller, model, and view files.

CLI is a lot faster for testing your application. For example, if we have a CI controller class and we want it tested..

<?php

    class MysimpleClass{

        public function __construct(){
        }

        public function say_something($string){

            echo $string;

            }

            }

CLI can create an instance of the above class just by typing

php index.php MysimpleClass say_something hello world

the output of the above command will be

hello world

Noticed? we don't even have to manually write an object for our controller or class. We can just type it on the command prompt and evaluate if it is working without calling the entire application on browser. So, by using CLI, we can test our class without even creating an object.

Another benefits of using CLI interface is to gain experience in creating an application behind the CLI similar to creating a web application in python. In PHP, we have a similar tool called Composer which intended to serve as a dependency manager which can keep your framework up to date at all times ( developer release dependent).

Member Avatar for iamthwee
iamthwee

Thanks veedeoo,

Here are some of my concerns, of course having never worked with the command line for PHP or composer, it might be a little one sided.

One, although I can see the merits of testing a class like that wouldn't you still need to open up your controller to find out what the methods are called to test it from the command line?

It that sense, how much easier is this from typing it into a webbrowser and calling the method from a url?

Second, I've read a lot about composer and I know everyone is harping on about it. So the biggest sell is dependencies. But what exactly are these dependencies? Are we talking other libraries?

To me I just don't get the point. In fact, part of the reason I didn't choose laravel is that most of the tutorials show people installing it through composer - I know you can just grab the files from git, but I was put off at having to remember these rather esoteric command prompts to download and install a framework.

My other point is dependencies... What exactly are there within the framework alone. I wouldn't have thought there were any. Surely if you just grab the latest folder of ci from their website you're pretty much good to go. Also, I happen to use a lot of other (commercial stuff shall we say) that isn't open source, so the dependency hard sell seems like a pretty moot point to me.

I still have to go through the commercial stuff I'm using, and by hand, ensure it works with ci. This hands on control (perhaps I'm a control freak) also sits very nicely with me. I can remove the stuff I don't need and ensure the stuff I do need is there.

Can you clarify these doubts for myself and anybody else. Why I might be wrong.

veedeoo 474 Junior Poster Featured Poster

I do understand your concerns. I think I have failed to mention that CLI and Composers are highly desirable for the developers who are writing a distibutable applications.

Please allow me tell you a brief story. When I was a young developer, I was only 16 years old ( I really wanted to test my ability to write codes, so I lied about my age. I was a minor and not allowed to work, plus my parents will kill me. All they wanted me to do was to study hard and be accepted at the Princeton University after high shool. I was accepted there and graduated there with a double degree in Mathematics and Physics, so inspite of whatever I did behind my parents back, I did not failed them for whatever dreams they wanted me to be as an adult.), and I was hired by a software company located in Canada. My first job was to remotely provide client support for all propriety web applications they are selling. I was then promoted to code quality assurance, and then finally made me a part of the development team.

Because of the nature of my responsiblities, I was exposed to source codes written by many different developers from excellent, logical, good, bad, horrible, spaghetti, i have seen it all. While I was in this capacity, I was always questioning the Sr. Backend developer about the dependency of the applications. I also laid-out the potential looming problems at the horizon due to the upcoming major PHP upgrades beyond the PHP 4.4.6 version. By this time, I was already hearing the talks about PHP 5 and PHP 6. I guess, a 16 years old kid's voice, was not important at all or it does not hold any values of any kind.

The application was written on the back of the first CodeIgniter framework. Writing an application on top of CI is not the problem, but writing an application not capable of dependency upgrades is bound for failure.

When the support for PHP 4 has been discontinued in December of 2007, the entire application crumbled and none of its promised functionalities ever worked.

The company was then sold for some great amount of money. The Sr. Developer and the Owner was kind enough to give me the source codes and the copyright for it, but it will only work if I upgrade the entire application with 2500 pages in it ranging between 2kb to 45kb php files that are out-dated.

By the time, I can legally claimed the copyright on the application, the PHP version was at version PHP 5.2.8. Since then I was chasing the tail of the fast moving PHP. My schooling have prevented me to fully re-developed the application back to its glory in 2005 where the weekly downloads peaked at 60000 copies. 3 years later, before graduating college, I was able to release the upgraded version using the CI version 2 with smarty template engine. However, I was not happy with the results. I want something that can be upgraded through the packagist.org via composer or via CLI.

My previous experience made me search for any unique solutions outside the conventional box. I experimented with CLI at first, utilizing the cURL to check if the versions and dependency of the script is up to date. A year later here comes the composer, the solution I have been looking for all these years.

Why is composer important for distributable application?
Most distributable applications are written on top of an MVC framework e.g. magento on Zend. Other frameworks are written to have dependency to Symfony2 e.g. Laravel uses great amount of Symfony2 integral parts. More and more applications today are dependent in ORM e.g. doctrine and propel.

Why is CLI important to distributable application?
CLI plays a major role in upgrading the source codes of the application. For example, Laravel uses the artisan and Fuel PHP uses the oil. However, there is a unique feature in Laravel and Symfony2 Vs. the fuel PHP. Symfony2 and Laravel can be installed through Composer. While in Composer, you can create an application via the artisan which is nothing but a similar class to what I have posted in this thread. In the case of Fuel PHP, the installation is a direct download, and the application creation can takes place in CLI or the class name called Oil.

Example of a Composer json file.
Let say, I am creating an application and I don't want to use Symfony nor Laravel because they are just too big for what I am trying to create, but I only want the following;
1. twig template engine and Symfony autoloader
2. To be able to test my entire application utilizing the php unit.
3. I want my application to have an AUTH.
4. I want my own written framework to be autoloaded during the initialization.
5. and lastly the symfony router for routing all of the URI requests on my application.

To make all of the above possible, I can easily create a composer json file like the one below.

{
"require": {
    "phpunit/phpunit": "3.7.*",
    "symfony/class-loader": "2.4.*@dev",
    "twig/twig": "1.14.*@dev",
    "symfony/routing": "2.5.*@dev",
    "rgnevashev/hybridauth3": "dev-master"
},


"autoload":{
    "classmap":[
    "vendor/veedeoo"
    ]


}
}

Noticed the composer.json file above? I only added the ones I wanted my application to be dependent. The autoload loads my framework.

The mix and match dependencies
Composer allows us to mix and match the dependecies we want the application to have. If for any reason, the new application release doesn't require the twig anymore and we would like to experiment with smarty, we can easily write the script to override the twig and then update the composer json like this

{
"require": {
    "phpunit/phpunit": "3.7.*",
    "symfony/class-loader": "2.4.*@dev",
    "symfony/routing": "2.5.*@dev",
    "rgnevashev/hybridauth3": "dev-master"
},

"autoload": {
    "classmap": [
        "vendor/smarty/smarty/Smarty.class.php", 
        "vendor/smarty/smarty/SmartyBC.class.php"
    ]
},

"autoload":{
    "classmap":[
    "vendor/veedeoo"
    ]


}
}

and then on the CLI, we type

    composer update

all of the twig dependencies will be removed and the smarty class will then be included in the autoloader.

What are the disadvantages if any, in using the Composer
The main disadvantages of composer is the autoloading mechanism. The same agressive autoloading are also found in many PHP MVC frameworks. The framework is not conservative when it comes to loading files. It will just load all of the files in the system and application directory, wether they are needed or not.

Member Avatar for iamthwee
iamthwee

Thank you for that rather eloquent explanation veedeoo.

Unfortunately, I'm still not sold - most probably due to my inexperience. It seems like composer would be useful if you use bits and bobs from OTHER frameworks. Artisan from ____ , oil from _____. These acroynms just serve to confuse me in all honesty.

I rather like having all resources available to me in one folder... that's why I love ci so much.

The dependancy list you've given as a json example further expemplies my point. You've written php unit 3.7, symphony 2.4... I mean how does your general layman programmer know to use 3.7 and symphony 2.4.

What if they picked symphony 2.2... would that still be compatible. It just doesn't seem to me to make things EASIER. The programmer still needs specialist knowledge to know what versions to include in the json file for composer. This IMO defeats the idea/point.

As I said, lack of experience is probably my undoing here. But having all files in one folder and testing commerical stuff bit by bit with ci suits me just fine.

I wonder what other people's thoughts are?

Adrian_5 1 Light Poster

@Veedeoo, I would like to start by thanking you for this great script. But, I also would like to corect you on some points you made in your comentary. Talking about composer, Laravel, and the autoloading, I must say that the autoload in Laravel and composer is actually happening at run-time. It's something called Dependency Injection which means that the classes are loaded only when there is need for them. On the other hand, like you said, other frameworks, Codeigniter included, have the "autoload" which load the classes everytime, no matter if there is the need for them or not. @iamthwee, regarding the dependency, I think this is the absolute DRY philosophy: Why repeating yourself trying to do a class, when someone (be it in this case symfony, twig, smarty) already made the best class there can be for that particular need? Why make a new templating engine when you already have something great already made for you like Blade, or smarty or twig? You get my point? I am a Codeigniter developer, but every day that passes by, I want to have the courage to get away from this framework, because, even though is a fast framework, easy to use and extend, I think is old, and I don't want to be left behind by greater looking and acting frameworks like Laravel. The problem with us (if you will allow me to call myself a programmer too) is that we are lazy. We feel comfortable not learning something new. I really like Codeigniter, it does all I need it to do, but every now and then I see that Laravel is doing it much faster and leaner. And if you like Codeigniter, stick with it, but give Laravel a chance, and you will see that it is actually a great framework which learned alot from Codeigniter and from other frameworks. Thank you again for the great script you put here (by the way, Laravel has something called artisan which does something just like your script does).

veedeoo 474 Junior Poster Featured Poster

Thanks @Adrian for bringing that up. Yes, Laravel can do a lot more that what I have presented above by way of Artisan.

In the case of CodeIgniter, codeigniter needs to simultaneously load at least 50 or more files during a single controller requests.

I use this simple PHP function to view all related files both from the system, libraries, and helpers during a simple application's controller request.

<?php

    class Myclass extends CI_Controller{
        private $included_files;

        public function __construct(){

            parent::__construct();

            $this->included_files = get_included_files();

echo 'this application included files:  '. count($this->included_files).'<br/>';

foreach ($this->included_files as $file) {
    echo $file.'<br/>';
}


    }
}    

The above will show the included file count, but that will not show files that are included after the application initialization process e.g. model called libraries and helpers.

If I have a simple login and registration with a template engine like smarty with twig fallback, both of the parent and child constructor above are obligated to load at least 63 files during initialization. I mean at idle when no one is logging in.

below is a test result from codeIgniter. WARNING! this test was conducted just for the fun of it and not something academic in nature. I know the result can be easily debated, but having an approximation as a baseline can help even if the actual application will load half the number of my test results.

C:\server\www\codeigniter3\index.php C:\server\www\codeigniter3\system\core\CodeIgniter.php C:\server\www\codeigniter3\system\core\Common.php C:\server\www\codeigniter3\application\config\constants.php C:\server\www\codeigniter3\system\core\Benchmark.php C:\server\www\codeigniter3\application\config\config.php C:\server\www\codeigniter3\system\core\Hooks.php C:\server\www\codeigniter3\system\core\Config.php C:\server\www\codeigniter3\system\core\Utf8.php C:\server\www\codeigniter3\system\core\URI.php C:\server\www\codeigniter3\system\core\Router.php C:\server\www\codeigniter3\application\config\routes.php C:\server\www\codeigniter3\system\core\Output.php C:\server\www\codeigniter3\application\config\mimes.php C:\server\www\codeigniter3\system\core\Security.php C:\server\www\codeigniter3\system\core\Input.php C:\server\www\codeigniter3\system\core\Lang.php C:\server\www\codeigniter3\system\core\Controller.php C:\server\www\codeigniter3\application\controllers\users.php C:\server\www\codeigniter3\system\core\Loader.php C:\server\www\codeigniter3\application\config\autoload.php C:\server\www\codeigniter3\system\helpers\url_helper.php C:\server\www\codeigniter3\system\helpers\form_helper.php C:\server\www\codeigniter3\system\helpers\cookie_helper.php C:\server\www\codeigniter3\system\database\DB.php C:\server\www\codeigniter3\application\config\database.php C:\server\www\codeigniter3\system\database\DB_driver.php C:\server\www\codeigniter3\system\database\DB_active_rec.php C:\server\www\codeigniter3\system\database\drivers\mysql\mysql_driver.php C:\server\www\codeigniter3\application\libraries\pdoclass.php C:\server\www\codeigniter3\system\libraries\Pagination.php C:\server\www\codeigniter3\system\libraries\Session.php C:\server\www\codeigniter3\system\helpers\string_helper.php C:\server\www\codeigniter3\system\database\DB_result.php C:\server\www\codeigniter3\system\database\drivers\mysql\mysql_result.php C:\server\www\codeigniter3\system\libraries\User_agent.php C:\server\www\codeigniter3\application\config\user_agents.php C:\server\www\codeigniter3\system\libraries\Form_validation.php C:\server\www\codeigniter3\application\libraries\smarty.php C:\server\www\codeigniter3\application\libraries\smarty\libs\Smarty.class.php C:\server\www\codeigniter3\application\libraries\smarty\libs\sysplugins\smarty_internal_data.php C:\server\www\codeigniter3\application\libraries\smarty\libs\sysplugins\smarty_internal_templatebase.php C:\server\www\codeigniter3\application\libraries\smarty\libs\sysplugins\smarty_internal_template.php C:\server\www\codeigniter3\application\libraries\smarty\libs\sysplugins\smarty_resource.php C:\server\www\codeigniter3\application\libraries\smarty\libs\sysplugins\smarty_internal_resource_file.php C:\server\www\codeigniter3\application\libraries\smarty\libs\sysplugins\smarty_cacheresource.php C:\server\www\codeigniter3\application\libraries\smarty\libs\sysplugins\smarty_internal_cacheresource_file.php C:\server\www\codeigniter3\application\config\smartyconfig.php C:\server\www\codeigniter3\application\libraries\twig.php C:\server\www\codeigniter3\application\config\twig.php C:\server\www\codeigniter3\application\libraries\twig\Autoloader.php C:\server\www\codeigniter3\application\libraries\twig\Loader\Filesystem.php C:\server\www\codeigniter3\application\libraries\twig\LoaderInterface.php C:\server\www\codeigniter3\application\libraries\twig\Environment.php C:\server\www\codeigniter3\application\libraries\twig\Extension\Core.php C:\server\www\codeigniter3\application\libraries\twig\Extension.php C:\server\www\codeigniter3\application\libraries\twig\ExtensionInterface.php C:\server\www\codeigniter3\application\libraries\twig\Extension\Escaper.php C:\server\www\codeigniter3\application\libraries\twig\Extension\Optimizer.php C:\server\www\codeigniter3\application\libraries\twig\Function\Function.php C:\server\www\codeigniter3\application\libraries\twig\Function.php C:\server\www\codeigniter3\application\libraries\twig\FunctionInterface.php C:\server\www\codeigniter3\application\helpers\passwordhash_helper.php 

The loaded files during initialization includes the necessary files for the smarty and twig. It also include the PDO CRUD I wrote for the CodeIgniter.

Looking at the results, I honestly believe that Rasmus Lerdorf made his points in claiming that "All PHP Framework Sucks" . Although I might have some great deal of disagreement with him whenever I am Lazy to write every single application from the scratch, I would agree with him when I am not feeling lazy.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.