<com:TContent ID="body" >
<h1 id="501">Command Line Tool</h1>

<div class="Note">
<b class="tip">Note:</b> With Prado version 3.2.3 prado-cli.php location changed from framework 
to bin directory. If you're using Prado 3.2.2 or earlier, replace bin with framework in examples below.
</div>

<p id="70046" class="block-content">The optional <tt>prado-cli.php</tt> PHP script file in the <tt>bin</tt>
directory provides command line tools to perform various tedious takes in Prado.
The <tt>prado-cli.php</tt> can be used to create Prado project skeletons, create
initial test fixtures, and access to an interactive PHP shell.
</p>
<h2 id="502">Requirements</h2>
<p id="70047" class="block-content">
To use the command line tool, you need to use your command prompt, command console
or terminal. In addition, PHP must be able to execute PHP scripts from
the command line.
</p>

<h2 id="503">Usage</h2>
<p id="70048" class="block-content">
If you type <tt>php path/to/bin/prado-cli.php</tt>, you should see
the following information. Alternatively, if you are not on Windows,
you may try to change the <tt>prado-cli.php</tt> into an executable
and execute it as a script</p>
<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70006">
Command line tools for Prado 3.0.5.
usage: php prado-cli.php action <parameter> [optional]
example: php prado-cli.php -c mysite

actions:
  -c <directory>
    Creates a Prado project skeleton for the given <directory>.

  -t <directory>
    Create test fixtures in the given <directory>.

  shell [directory]
    Runs a PHP interactive interpreter. Initializes the Prado
    application in the given [directory].
</com:TTextHighlighter>

<p id="70049" class="block-content">The <b>&lt;parameter&gt;</b> are required parameters and <b>[optional]</b>
are optional parameters. </p>

<h2 id="504">Creating a new Prado project skeleton</h2>

<p id="70050" class="block-content">To create a Prado project skeleton, do the following:</p>
<ol>
	<li>Change to the directory where you want to create the project skeleton.</li>
	<li>Type, <tt>php ../prado/bin/prado-cli.php -c helloworld</tt>, where
	<tt>helloworld</tt> is the directory name that you want to create the project skeleton files.</li>
	<li>Type, <tt>php ../prado/bin/prado-cli.php <b>-t</b> helloworld</tt> to create
	the test fixtures for the <tt>helloworld</tt> project.</li>
</ol>

<h2 id="505">Interactive Shell</h2>
<p id="70051" class="block-content">
The interactive shell allows you to evaluate PHP statements from the command line.
The <tt>prado-cli.php</tt> script can be used to start the shell and load an existing
Prado project. For example, let us load the blog demo project. Assume that your
command line is in the <tt>prado</tt> distribution directory and you type.
</p>
<p id="70052" class="block-content">
<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70007">
$: php bin/prado-cli.php shell demos/blog
</com:TTextHighlighter>
The output should be
<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70008">
Command line tools for Prado 3.0.5.
** Loaded Prado application in directory "demos\blog\protected".
PHP-Shell - Version 0.3.1
(c) 2006, Jan Kneschke <jan@kneschke.de>

>> use '?' to open the inline help

>>
</com:TTextHighlighter>
Then we will get an instance of the Prado blog application, and from
that instance we want an instance of the <tt>'data'</tt> module. Notice that
a <b>semicolon</b> at the end of the line <b>suppresses the output</b>.

<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70009">
>> $app = Prado::getApplication();

>> $db = $app->getModule('data');
</com:TTextHighlighter>
Lastly, we want to use the data module to query for a post with <tt>ID=1</tt>. Notice that
we <b>leave out the semicolon</b> to show the results.
<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70010">
>> $db->queryPostByID(1)
</com:TTextHighlighter>
There should not be any errors and you should see the following.
<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70011">
PostRecord#1
(
    [ID] => 1
    [AuthorID] => 1
    [AuthorName] => 'Prado User'
    [CreateTime] => 1148819691
    [ModifyTime] => 0
    [Title] => 'Welcome to Prado Weblog'
    [Content] => 'Congratulations! You have successfully installed Prado Blog --
 a PRADO-driven weblog system. A default administrator account has been created.
 Please login with <b>admin/prado</b> and update your password as soon as possible.'
    [Status] => 0
    [CommentCount] => 0
)
</com:TTextHighlighter>
</p>

<h2>Creating Active Record Classes</h2>
<p>
In the blog demo project, we need to create two <a href="?page=Database.ActiveRecord">Active Record</a> classes, <tt>UserRecord</tt> and <tt>PostRecord</tt>, to represent data records in the <tt>users</tt> and <tt>posts</tt> tables, respectively. Active Record classes must extend from the base class <tt>ActiveRecord</tt>, and must define property names that matches with the field names of the corresponding table.
</p>

<p>
To better organize our directories, we create a new directory <tt>protected/database</tt> to hold the class files. We also modify our application configuration by inserting the following lines. It is equivalent to adding the directory <tt>protected/database</tt> to PHP include_path, which allows us to use the classes without explicitly including them.
</p>

<com:TTextHighlighter CssClass="source" Language="xml">
<paths>
  <using namespace="Application.database.*" />
</paths>
</com:TTextHighlighter>

<p>
At the prompt, enter the following two commands to create <tt>UserRecord</tt> and <tt>PostRecord</tt> classes:
</p>

<com:TTextHighlighter CssClass="source cli" Language="text">
>> generate users Application.database.UserRecord

>> generate posts Application.database.PostRecord
</com:TTextHighlighter>

<p>
Here we used the <a href="?page=Fundamentals.Components1">namespace format</a> again to specify the classes to be created. The path <tt>Application.database.UserRecord</tt> indicates that we want the <tt>UserRecord</tt> class file to be <tt>protected/database/UserRecord.php</tt>.
</p>

</com:TContent>