Symfony (I):添加一个Webpage(Action,Template,Helper)

Adding a Page

In symfony, the logic behind pages is stored in the action, and the presentation is in templates.

Adding an Action

The "Hello, world!" page will be accessible through a myAction action. To create it, just add an executeMyAction method to the mymoduleActions class, as shown in Listing 4-2.

Listing 4-2 - Adding an Action Is Like Adding an Execute Method to the Action Class

<?php
 
class mymoduleActions extends sfActions
{
  public function executeMyAction()
  {
    $today = getdate();
    $this->hour = $today['hours'];
  }
}
 
 

The name of the action method is always execute``Xxx``(), where the second part of the name is the action name with the first letter capitalized.

Now, if you request the following URL:

http://localhost/myapp_dev.php/mymodule/myAction
  
  

symfony will complain that the myActionSuccess.php template is missing. That's normal; in symfony, a page is always made of an action and a template.

Adding a Template

The action expects a template to render itself. A template is a file located in the templates/ directory of a module, named by the action and the action termination. The default action termination is a "success," so the template file to be created for the myAction action is to be called myActionSuccess.php.

Listing 4-5 - The Alternative PHP Syntax, Good for Templates

<p>Hello, world!</p>
<?php if ($test): ?>
<p><?php echo time(); ?></p>
<?php endif; ?>
  
  

  
  
   
    
  
  

Listing 4-4 - The Usual PHP Syntax, Good for Actions, But Bad for Templates (不推荐)

<p>Hello, world!</p>
<?php
 
if ($test)
{
  echo "<p>".time()."</p>";
}
 
?>
   
   

   
   
    
     
   
   
If you need to execute some PHP code in the template, you should avoid using the usual PHP syntax, as shown in Listing 4-4. Instead, Listing 4-5.
  
  
 
 
 
  
   
 
 

Gathering Information from the User with Forms

A helper is a PHP function defined by symfony that is meant to be used within templates. It outputs some HTML code and is faster to use than writing the actual HTML code by yourself. Using symfony helpers, you can have the same result as in Listing 4-8 with the code shown in Listing 4-9.

Listing 4-9 - It Is Faster and Easier to Use Helpers Than to Use HTML Tags

<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It's already <?php echo $hour ?>.</p>
  
  
<?php endif; ?>
  
  
<?php echo form_tag('mymodule/anotherAction') ?>
  
  
  <?php echo label_for('name', 'What is your name?') ?>
  
  
  <?php echo input_tag('name') ?>
  
  
  <?php echo submit_tag('Ok') ?>
  
  
</form>
  
  

If, in the example in Listing 4-9, you think the helper version is not really faster to write than the HTML one, consider this one:

<?php
>     $card_list = array(
>       'VISA' => 'Visa',
>       'MAST' => 'MasterCard',
>       'AMEX' => 'American Express',
>       'DISC' => 'Discover');
>     echo select_tag('cc_type', options_for_select($card_list, 'AMEX'));
>     ?>
 

This outputs the following HTML:

<select name="cc_type" id="cc_type">
  <option value="VISA">Visa</option>
  <option value="MAST">MasterCard</option>
  <option value="AMEX" selected="selected">American Express</option>
  <option value="DISC">Discover</option>
</select>
 

You should always use the link_to() helper to create hyperlinks to your application's actions.

<?php echo link_to('I never say my name','mymodule/anotherAction?name=anonymous') ?>
   
   

   
   
    
     
   
   

Most Helpers Accept an Option Argument

// Option argument as an associative array
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous',
  array(
    'class'    => 'special_link',
    'confirm'  => 'Are you sure?',
    'absolute' => true
)) ?>
 
// Option argument as a string
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous',
  'class=special_link confirm=Are you sure? absolute=true') ?>
 
// Both calls output the same
 => <a class="special_link" οnclick="return confirm('Are you sure?');"
    href="http://localhost/myapp_dev.php/mymodule/anotherAction/name/anonymous">
    I never say my name</a>
 
 
 
  
   
 
 

Getting Information from the Request

Whether the user sends information via a form (usually in a POST request) or via the URL (GET request), you can retrieve the related data from the action with the getRequestParameter() method of the sfActions object. Listing 4-13 shows how, in anotherAction, you retrieve the value of the name parameter.

Listing 4-13 - Getting Data from the Request Parameter in the Action

<?php
 
class mymoduleActions extends sfActions
{
  ...
 
  public function executeAnotherAction()
  {
    $this->name = $this->getRequestParameter('name');
  }
}

Listing 4-14 shows how the anotherActionSuccess.php template would retrieve the same name parameter.

Listing 4-14 - Getting Data from the Request Parameter Directly in the Template

<p>Hello, <?php echo $sf_params->get('name') ?>!</p>

Note: The usual PHP variables (the $_POST, $_GET, or $_REQUEST) won't work anymore

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值