Please note: the bulk of this project belongs to Jason Crider: Please visit the Original Project., or the original docs are located below.
Thank you, Jason!
Disabled auth for the time being... more correctly, I circumvented it.
I completed the codeigniter tutorial from their docs, so the "news" function works, complete with database.
I set up a "demo" section with a simple automatic routing proceedure. Add a file to the demo folder, and it will automatically appear in the navigation,
I made some changes to the templating process, and the default controller logic related to that... it's basically set up with 5 main sections: * header * nav * primary * secondary (sidebar, etc) * footer
...Each of the sections has a default "partial", but they can be overridden at the "global" level, in the controller, or on a per-project bases. The "demo" area is the best example. There is one simple route and a little controller logic.
I configured my system to synchronize content between my local dev Environment and my webserver. To learn more, visit my live, working demo, at ci.gristech.com/demo - the process is explained there.
Auth will be back soon: Furthermore, I monkeyed with migrations a bit, and got it to work. There are a few snags, but from the CLI, you can run
php index.php migrate current
php index.php migrate version 1
php index.php migrate version 2 //(and so on)
php index.php migrate version 0 //rollback all
Be careful this deletes data!
I am excited to do some more exploration with the CLI.
Please reach out to me at ryan.grissinger@gmail.com if you have any questions.
##Setup To set up your new CI project, you will need to set some configurations.
First open up /application/config/config.php and set the base_url to the url of the site you are developing.
You may also want to change the cookie_prefix value to something else as it can cause conflicts with other sites running with that name.
Open up /application/config/database.php and set your database connection settings up in there.
If you wish to route requests to controllers based on subdomains (ex. api.mysite.com will route to /applications/controllers/api/) then leave the MY_Router.php file in the /application/core folder. If you wish to route the requests based on folders (ex. mysite.com/api/ routes to /applications/controllers/api/) then simply remove the file.
##What's Different
There are some distinct differences between this version of Codeigniter and the stock version.
###Templating
I've built in a native templating system that treats views as partial templates that get loaded into a master template.
In the views/templates folder you will see a file named default.php. This is the default template that will load if no template is specified. The view will load in the main template wherever the $content variable is.
You can create your own templates and tell the framework to load it by using the following code:
$this->template = 'templates/your_template.php';
###View Loading Handled Automagically
I thought it was a bit cumbersome to have to include the whole $this->load->view(); code in every single controller method.
The Codeignited framework automatically loads views based on the name of the controller/method. For example Blog::page() would automatically attempt to load 'views/blog/page.php' as it's view. You can override this and specify your own views by using:
$this->view = 'folder/your_view.php';
##Data Output
Data output is handled in non-api controllers by using the $this->data[] array. For example in my controller if I had the following:
class Books extends MY_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->data['hello'] = 'Hello World';
}
}
I could access the variable '$hello' from my view like so:
<?= $hello; //echoes 'Hello World' ?>
The $this->data array is also available (except for any keys named 'content') to the parent template.
##Built-in API support:
The Codeignited framework has built-in API support and will treat any folder in the controllers folder with the string 'api' in it as an API. For instance if my folder structure was like so:
/application /controllers /my_api api_call.php
The 'api_call.php' file would be treated as an API call with no further work needed by the developer.
The api has a default response of
{ "success": true }
To add items to the JSON/XML response you only need to populate the $this->out[] array. For instance if my controller was like so:
class Books extends MY_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->out['hello'] = 'Hello World';
}
}
The response would look like:
{
"success":true,
"hello": "Hello World"
}
To get an XML response you only need to provide a GET parameter to the HTTP request of 'format=xml'.
Additionally, you may default any controller or method to output JSON/XML data by declaring the following:
$this->isApi = true;
##Included Libraries This build of codeigniter comes pre packaged with a few useful libraries for development.
###Curl The curl library can be used to get files from remote sources. Here is a quick example:
$data = $this->curl->simple_get('http://www.google.com'); //data now = google.com's html
###APNS, GCM and C2DM The apn and c2dm libraries can be used to push notifications to iOS and Android devices. The apn library will need to be configured in /application/config/apn.php to point to the correct .pem certificate for sending push notifications.
For more info on GCM read here: http://developer.android.com/guide/google/gcm/index.html
Here is an example of it in use: gcm:
$this->load->library('gcm');
$this->gcm->send($token,$servertoken,$message);
c2dm:
$this->load->library('c2dm');
if ($this->c2dm->send($push_token, $server_token, $message) == 'error') {
return false;
}
apn: $this->load->library('apn'); $this->apn->connectToPush(); $r = $this->apn->sendMessage($push_token, $message); $this->apn->disconnectPush();
###Get
I am currently working on making this library better.
This library is autoloaded, using $this->load is not necessary. This library can be used to manage variables POSTed or GETed to the server. It is similar to the CI input class, but gives the developer a place to easily manage variable sanitization and management without extending the core. Here is a rundown of all the methods that get has to offer:
The get class is automatically assigned properties based on the parameters sent to the server. So, if you post or send a get variable of 'somevar' you can access it by using $this->get->somevar; If there is a conflict of names the GET variable will take precidence.
$this->get->assoc(array $ignore) This method returns an associative array of all get/post variables, but will ignore keys specified in the $ignore array.
$this->get->hasKeys('key1','key2') This method checks whether the keys supplied as arguments were sent to the server. If you are trying to check whether the variables have been set via a HTML form, run $this->get->validateKeys(); first.
$this->get->sent() Returns true if get/post variables are present, or false if they are not.
###Datamapper
version 1.8.2
###Ion Auth
installed
###Running from CLI
To run any of your scripts from the CLI, follow the instructions here: http://codeigniter.com/user_guide/general/cli.html