闪光信使不显示消息


flash messenger not displaying messages

我最近开始开发一个使用 Zend Framework 的网站。网站上的闪存消息已损坏,我的工作是修复它。我试图找出它的问题所在,并且在理解代码方面取得了部分成功。

我以前从未在Zend Framework中工作过,所以我不熟悉可以破坏的内容,甚至不熟悉如何正确调试它。

我尝试放置此问题中建议的代码,但它只是完全破坏了 php。

如果有人可以帮助我完成这段代码,我将不胜感激:我将包括以下文件:


LoginController.php扩展MrBlue_Controller_Action_Default并通过以下方式调用闪存消息:

{
                    $this->_flashMessenger->addMessage(array('success', 'Done. Now get your email and confirm you account'));
                    $this->redirect('/');
}

MrBlue_Controller_Action_Default扩展Zend_Controller_Action

<?php
/**
 * Default.php
 */
abstract class MrBlue_Controller_Action_Default extends Zend_Controller_Action
{
    /**
     * Zend_Acl
     *
     * @var Zend_Acl
     * @access protected
     */
    protected $_acl = null;
    /**
     * FlashMessenger
     *
     * @var object
     * @access protected
     */
    protected $_flashMessenger = null;
    /**
     * Array with params (controller, action, etc)
     *
     * @var array
     * @access protected
     */
    protected $params;
    /**
     * Application config object
     *
     * @var Zend_Config
     * @access protected
     */
    protected $config;
    /**
     * MrBlue Benchamark Helper
     *
     * @var MrBlue_Helper_Benchmark
     * @access protected
     */
    protected $benchmark;
    /**
     * Zend_Auth
     *
     * @var Zend_Auth
     * @access protected
     */
    protected $_auth = null;
    /**
     * User account
     *
     * @var object
     * @access protected
     */
    protected $account = null;
    /**
     * Array of post values
     * @var array
     */
    protected $aPost = array();
    /**
     * @var Zend_Session_Namespace
     */
    protected $oDefaultUserNS = null;
    /**
     *  init()
     *
     * @access public
     */
    public function init()
    {
        $this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        $this->view->messages = $this->_flashMessenger->getMessages();
        $this->params = $this->getAllParams();
        $this->params['c/a'] = $this->params['controller'] . '/' . $this->params['action'];
        $this->view->params = $this->params;
        if ($this->_request->isPost())
        {
            $this->aPost = $this->_request->getPost();
        }
        $this->view->aPost = $this->aPost;
        $this->config = Zend_Registry::get('config');
        $this->view->config = $this->config;
        // Zend ACL
        $this->_acl = Zend_Registry::get('acl');
        $this->view->acl = $this->_acl;
        $this->view->role = 'guest';    // will be overwrite in setAccountData()

        //create navigation container
        $this->prepareNavigation();
        $this->oDefaultUserNS = new Zend_Session_Namespace('default_data');
        $this->benchmark = new MrBlue_Helper_Benchmark();
        //$this->view->benchmark = $this->benchmark;
        $this->setAuth();
    }
    /**
     * Prepare navigation container based on navigation.php file and
     * dynamic pages from database 
     */
    public function prepareNavigation()
    {
        //get current role or if null default guest role with limited access
        $role = 'guest';
        if( Zend_Auth::getInstance()->hasIdentity() ) {
            $role = Zend_Auth::getInstance()->getIdentity()->role;
            /*
             OLD CODE to display leaderboard menu based on leader_board flag in users table
             * 
             *
            //allow Leaderboard page if user have "List me on leader board" flag set to 1
            //flag has to be check from database  - not from identity, because it can change in session
            $user_app = new Model_UsersApp();
            $user = $user_app->getById(Zend_Auth::getInstance()->getIdentity()->id);
            if($user->leader_board == 1)
            {
                $this->_acl->allow('user', 'default:leaderboard', null);
            }
            else
            {
                $this->_acl->deny('user', 'default:leaderboard', null);
            }
             *
             */
        }
        /* 
         * NEW CODE - to display leaderboard menu item based on flag in settings table
         */
        //allow Leaderboard page 
      //  $settings_app = new Model_SettingsApp();
        if(MrBlue_Setting::get('leaderboard_menu')==1)
        {
             $this->_acl->allow('user', 'default:leaderboard', null);
        }
        else
        {
            $this->_acl->deny('user', 'default:leaderboard', null);
        }

        //create navigation from navi file
        $navConfig = require APPLICATION_PATH . '/modules/default/configs/navigation.php';
        $navigation = new Zend_Navigation($navConfig);
        //get dynamic pages
        $pages_app = new Model_PagesApp();
        $pages = $pages_app->getList(1);
        //add dynamic pages to navigation
        foreach ($pages as $page)
        {
            if( $page['roles']==Model_Db_PagesDb::ROLE_ALL || $page['roles']==$role ) {
                $page_nav = new Zend_Navigation_Page_Mvc(array(
                    'route' => 'pages',
                    'module' => 'default',
                    'controller' => 'pages',
                    'action' => 'read',
                    'params' => array('pageslug' => $page['name_slug']),
                    'label' => $page['name'],
                    'position' => $page['position'],
                    'roles' => $page['roles']
                ));
                $navigation->addPage($page_nav);
            }
        }
        //send navigation to view container
        $this->view->navigation($navigation)->setAcl($this->_acl)->setRole($role);
    }
    /**
     * Set auth
     *
     * @access public
     * @return void
     */
    public function setAuth()
    {
        $this->_auth = Zend_Auth::getInstance();
        $this->_auth->setStorage(new Zend_Auth_Storage_Session('Default_Auth'));
        if ($this->_auth->hasIdentity())
        {
            $this->setAccountData();
        }
        else
        {
            if ($this->params['c/a'] != 'login/authorize')
            {
                //@TASK uncomment redirection for denied resources
                // return $this->redirect('index/index');
            }
        }
    }
    /**
     * Checking if some action in current module and controller is allowed
     *
     * @param string $action
     * @return boolean
     */
    public function isActionAllowed($action)
    {
        return $this->_acl->isAllowed($this->account->role, $this->_request->getModuleName() . ':' . $this->_request->getControllerName(), $action);
    }
    /**
     * Set account data
     *
     * @access public
     * @return void
     */
    public function setAccountData()
    {
        if ($this->_auth->hasIdentity())
        {
            $this->account = $this->_auth->getIdentity();
            $climbing_app = new Model_ClimbingApp();
            $climbing = $climbing_app->getUserLastClimbing($this->account->id);
            $this->account->climbing = $climbing;
//            $this->account->funds = $climbing['funds'];
//            $this->account->coins = $climbing['coins'];
            unset($climbing_app);
             //must be ass separate query because if user have no climbing records, there is nothing to join user table values
            $user_app = new Model_UsersApp();
            $user = $user_app->getById($this->account->id);
            $this->account->funds = $user->funds;
            $this->account->coins = $user->coins;
            unset($user_app);
            $this->view->account = $this->account;
            $this->view->role = $this->account->role;
            // Zend_Registry
            Zend_Registry::set('account', $this->account);
            Zend_Registry::set('auth', $this->_auth);
        }
    }
    /**
     * Get current climbing values
     * 
     * @return array
     */
    public function getUserClimbing()
    {
        $aClimbing = array();
        if ( $this->_auth->hasIdentity() && isset($this->account->climbing) && !empty($this->account->climbing) )
        {
            $aClimbing = $this->account->climbing;
        }
        return $aClimbing;
    }
}

索引.php我想在其中显示味精:

<section class="landing-main landing-main2">
            <div class="landing-logo">
               <!-- <h1>
                    Sports Ladder <br />
                    <span>Challenge</span>
                </h1>
                <div class="logo-star">
                    &#9733;
                </div> -->
                <img src="http://www.sportsladderchallenge.com/img/Logo.png" alt="Sports Ladder Challenge" />
            </div>
            <section class="main-highlight">
                 <div class="join-section-right">
                    <p class="cta-caption">
                        Win up to <span>$50,000.00</span>
                     </p>            
                     <a class="cta" href="<?php echo $this->url(array('controller'=>'login','action'=>'register'),null,true); ?>" alt="" id="signup-button" />
                        Join Now <span>&raquo;</span>
                     </a>
                     <p class="cta-caption">
                        It's absolutely 100% <strong>free</strong>. 
                     </p>
                 </div>
            </section>
    <section class="sports-ladder">
                <?php if($this->double == 2) $d = true; else $d = false;  
            echo $this->partial('partials/ladder_sidebar.phtml',array('ladder' => $this->ladder,'safe_zones' => $this->ladder_safe, 
            'level' => $this->current_rung, 'double' => $d) );
    ?>
    <br />
    <?php
    $oLadder = new Model_LadderObj();
    if( !is_null($this->current_rung) && !in_array($this->current_rung,$oLadder->getSafeZones()) && $this->current_rung!=0 ) :
    ?>
        <a class="header-buttons ladder-collect" href="<?php echo $this->url(array('action'=>'respawn-climbing'),null,true); ?>" class="btn btn-primary btn-collect" style="margin-left:16px; width:207px;" title="By pressing ‘collect’ you will have the specified dollar amount on any non-safe step (steps 5,6,8,9 etc) deposited into your account balance and forfeit the remainder of your climb. This action cannot be undone.">Collect</a>
    <?php else : ?>
        <a class="header-buttons ladder-collect" href="javascript:return false;" class="btn btn-default btn-collect" style="margin-left:16px; width:207px;" title="By pressing ‘collect’ you will have the specified dollar amount on any non-safe step (steps 5,6,8,9 etc) deposited into your account balance and forfeit the remainder of your climb. This action cannot be undone.">Collect</a>
    <?php endif; ?>
            </section>
            <section class="main-htp">
                <h2>
                    How To Play
                </h2>
                <h4>
                    And win up to <span>$50,000.00</span>!
                 </h4>
                <div class="htp">
                    <div class="htp-number">
                        1
                    </div>
                    <h3>Sign Up</h3>
                    <li>
                        Sign up, it's completely free to play!
                    </li>
                    <li>
                        Pick one of our sports match ups
                    </li>

                </div>
                <div class="htp">
                    <div class="htp-number">
                        2
                    </div>
                    <h3>Build Your Streak</h3>
                    <li>
                        Make a right pick, and climb a step
                    </li>
                    <li>
                        The higher you climb, the more money you win!
                    </li>
                </div>
                <div class="htp">
                    <div class="htp-number">
                        3
                    </div>
                    <h3>Cash Out</h3>
                    <li>
                        Earn anywhere from $0.01 to $50,000.00 per climb
                    </li>
                    <li>
                        Increase your account balance to $100 or more and cash out, it's that easy!
                    </li>
                </div>
            </section>
            <section class="main-bottom-left">
                <h2>Start Playing Today</h2>
                <div class="join-section-left">
                    <div class="join-section">
                        <p class="star">&#10097;</p>
                        <p>
                            The Sports Ladder Challenge combines the use of power ups, a wider selection of games and questions to choose from, as well as an innovative new platform that is optimized to reward users on a variety of levels to combine for the most thrilling, action packed pick em game on the web!
                        </p>
                    </div>
                    <div class="join-section">
                        <p class="star">&#10097;</p>
                         <p>
                            We cover a wide variety of sports and leagues including the NFL, NBA, MLB, NHL, Premier League, La Liga and much more! 
                        </p>
                    </div>
                    <div class="join-section">
                        <p class="star">&#10097;</p>
                        <p>
                            There is no limit to how much you can win! Win anywhere from $0.01 to $50,000.00 on every climb. We GUARANTEE that with enough sports knowledge and due diligence, you will cash out!
                         </p>
                     </div>
                 </div>
            </section>
        </section>

_flash_messenger.phtml 部分

<?php if ( !empty($this->messages) ): ?>
    <div style="margin-left:auto;margin-right:auto;width:90%;">
    <?php foreach($this->messages as $message): ?>
        <?php if($message[0] == 'error'): ?>
        <div class="alert alert-block alert-danger">
        <?php elseif($message[0] == 'success'): ?>
        <div class="alert alert-block alert-success">
        <?php endif; ?>
            <p><strong><?php echo $message[1]; ?></strong></p>
        </div>
    <?php endforeach; ?>
    </div>
<?php endif; ?>

真的很感激我能得到的任何帮助。如果此信息不完整,请告诉我,我将发布其他代码片段。

更新登录控制器的完整代码.php链接: http://codepad.org/VL4DGLtX

看起来消息没有呈现。

如果你看一下你提供的抽象控制器,有这样的代码:

$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
$this->view->messages = $this->_flashMessenger->getMessages();

这将获取 Flash 信使操作助手 (doc) 并将所有消息放入视图(模板)中。

现在,您需要将部分模板_flash_messenger.phtml呈现在所需的消息位置。为此,您可以使用部分视图助手 (doc):

<?php echo $this->partial('path/to/_flash_messenger.phtml', array('messages' => $this->messages)); ?>