A Project skeleton to build PRADO Framework based web application.
Prado3 is a Component Framework for PHP 5 (Like ASP .NET dose for C#).
- php : >=5.3.3
- ext-ctype
- ext-dom
- ext-json
- ext-pcre
- ext-spl
Firstly run this command :
$ cd path/to/web/server/www
$ composer create-project enimiste/prado-project-starter project_name
If all goes right open the new project in your favorite IDE. (ex: PhpStorm)
You can use many types of database as it is supported by PDO Driver.
In this section i will focus on two database types : Sqlite and Mysql.
- Sqlite :
- Prequisites :
- Installing Sqlite3 from Sqlite3.
- Enabling PHP Sqlite extension on
php.ini
file
- The project is bundled with the database file located under
protected/data/app.db
. - This database is seeded with the needed data. So it is ready to use for next steps.
- Prequisites :
- Mysql :
You have two options : Mysql extension or Mysqli extension
So you should be sure that the desired extension is enabled inphp.ini
file before using it.-
Open the
protected/config.database.xml
file. -
Comment the sqlite config :
<database ConnectionString="sqlite:protected/data/app.db"/>
-
Uncomment the Mysql config (mysql or mysqli) :
<!-- <database ConnectionString="mysqli:host=localhost;dbname=test" username="dbuser" password="dbpass" /> --> <!-- <database ConnectionString="mysql:host=localhost;dbname=test" username="dbuser" password="dbpass" /> -->
-
Create an empty database named as
;dbname=
in the step 3. -
Update host, username and password with the correct ones.
-
Open your Mysql console and run the following statements in order :
- The content of
protected/data/migrations
directory files (*.sql) - The content of
protected/data/seeds
directory files (*.sql)
- The content of
-
Now its time to update our parameters config located in the file protected/config/parameters.xml
.
Ex :
<parameter id="base_url" value="https://localhost/project_name/"/>
This parameter is used to build assets urls (css, javascripts, ...) via the function site_url($uri)
Now you can test the project.
- Check if your web server under it the project is deployed is running.
- Check if your RDBS is running if you use one.
- Type the URL to your project in the browser. Ex :
https://localhost/project_name
. - The web app will show you the default page of Frontoffice.
- To see the Backoffice, click on the link "Espace d'administration" (Backoffice space in frensh, sorry) :
-
A login page will show.
-
Type one of these credentials to access the web app as authenticated user :
Username Password Role sadmin sadmin Super Admin admin admin Normal Admin user user Normal User -
And bingo you can manage : users, site settings
-
The project is divided in two parts :
- FO : Front office
- BO : Back office
So protected/pages
, protected/pages
and themes
directories are splited into two sub directories : fo and bo.
The themes directory holde the css, js files needed to render the IHM of each side of you web app. Ex: themes\bo
contains sb-admin css and js files used in backoffice IHM.
The theme used in the backoffice is the SB-admin. For the front office is not implemented for instance.
I added a bunch of helper functions to help developper access most used features of Prado easaly.
Ex:
app();
//Shortcut to Prado::getApplication();
user();
//shortcut to Prado::getApplication()->getUser();
And so on ... Lets now take a tour of these function :
Function | Return Type | Description |
---|---|---|
session() |
THttpSession |
Return the current running user session. |
request() |
THttpRequest |
Return the current request. |
response() |
THttpResponse |
Return the current response. |
input($name [, $default = null] ) |
string |
Retrieve a request input by its name or return a default value. |
page() |
`TPage | NPage` |
redirect_page($page [, array $param]) |
Redirect the user to a given page. $page is the namespace format to the page, ex : bo.users.ListPage | |
redirect_url($url) |
Redirect the user to a given url. | |
page_url($page [, array $param] ) |
string |
Contruct an URL pointing to a given page. $page is the namespace format to the page, ex : bo.users.ListPage |
site_url($uri) |
string |
Build an url to a resource located under the root directory of the project. The param base_url is used here. |
Function | Return Type | Description |
---|---|---|
auth() |
TAuthManager |
Return the Authentication Manager. |
user() |
`IUser | TDbUser |
is_guest() |
bool |
True if the user is not authenticated in the system. |
is_admin() |
bool |
True if the authenticated user has one of the roles : Super Admin or Normal Admin |
is_super_admin() |
bool |
True if the authenticated user has the role : Super Admin |
Function | Return Type | Description |
---|---|---|
app() |
TApplication |
Return the current runining Prado Application instance. |
module($id) |
IModule |
Get a module by its id. |
running_service() |
IService |
Return the current running service that processing the request. For instance it returns the TPageService |
page_service() |
TPageService |
If another service is processing the request, this function throw a function. |
param($id [, $default = null] ) |
string |
Retrieve a given parameter from the config/parameters file by its name. If not found, the $default value will be returned. |
using($namespace) |
Shortcut to \Prado::using( $namespace ); . I think is more readable this way. |
|
site_info($name [, $default = ''] ) |
string |
Return a site setting by its name. If not found returns the default value. |
mysql_timestamp(int $time) |
string |
Format the given time to the TIMESTAMP format requied by Mysql. Shortcut to date( 'Y-m-d H:i:s', $time ); |
check_is_int(mixed $v) |
bool |
True if the $v is numeric and (is int or is string and is only integer). See source code for more details. |
Function | Return Type | Description |
---|---|---|
localize($text [, array $parameters [, $catalogue = null [, $charset = null]]] ) |
string |
Translate and localize a given $text based on the i18n and i10l of your application. |
Function | Return Type | Description |
---|---|---|
file_extension($filename) |
string |
Returns the file extension by spliting its name. |