1

PHP と CodeIgniter に奇妙な問題があります。私のファイルのコードは次のとおりです。

このコードをスキップして、私が書いた 2 番目のコードに進んでください。役に立つかもしれない場合に備えて、これはここに残ります。

<?php if (! defined('BASEPATH')) exit('No direct script access allowed');

  require_once('utils.php');

  class FooterHeader {

    // Esta clase nos permite definir el footer y sus correspondientes menus
    var $utils;
    var $controller;

    var $TOPMENU_NOT_LOGGED_IN_NAMES;
    var $TOPMENU_NOT_LOGGED_IN_LINKS;
    var $TOPMENU_LOGGED_IN_NAMES;
    var $TOPMENU_LOGGED_IN_LINKS;
    var $TOPMENU_DESIGNER_NAMES;
    var $TOPMENU_DESIGNER_LINKS;

    // Side menu
    var $SIDEMENU_NOT_LOGGED_IN_NAMES;
    var $SIDEMENU_NOT_LOGGED_IN_LINKS;
    var $SIDEMENU_LOGGED_IN_NAMES;
    var $SIDEMENU_LOGGED_IN_LINKS;
    var $SIDEMENU_DESIGNER_NAMES;
    var $SIDEMENU_DESIGNER_LINKS;

    // Main menu
    var $MAINMENU_NOT_LOGGED_IN_NAMES;
    var $MAINMENU_NOT_LOGGED_IN_LINKS;
    var $MAINMENU_LOGGED_IN_NAMES;
    var $MAINMENU_LOGGED_IN_LINKS;
    var $MAINMENU_DESIGNER_NAMES;
    var $MAINMENU_DESIGNER_LINKS;

    function FooterHeader($controller) {
      $this->utils = new Utils();
      $this->controller = $controller;
      include_once 'defineMenus.php';
      configVars($this);
    }

    public function setDefaultHeader($situation) {
      $topMenuNames = array();
      $topMenulinks = array();
      $MainMenuNames = array ();
      $MainMenuLinks = array ();
      $SideMenuLinks = array ();
      $SideMenuNames = array ();

      // dependiendo del estado del usuario, mostramos cosas u otras
      if ($situation == NOT_LOGGED_IN) {
        $topMenuNames = $this->TOPMENU_NOT_LOGGED_IN_NAMES;
        $topMenuLinks = array ('users/login', 'users/register');
        $MainMenuNames = $this->MAINMENU_NOT_LOGGED_IN_NAMES;
        $MainMenuLinks = $this->MAINMENU_NOT_LOGGED_IN_LINKS;
        $SideMenuLinks = $this->SIDEMENU_NOT_LOGGED_IN_NAMES;
        $SideMenuNames = $this->SIDEMENU_NOT_LOGGED_IN_LINKS;
      }
      else if ($situation == LOGED_IN) {
        $topMenuNames = $this->TOPMENU_LOGGED_IN_NAMES;
        $topMenuLinks = $this->TOPMENU_LOGGED_IN_LINKS;
        $MainMenuNames = $this->MAINMENU_LOGGED_IN_NAMES;
        $MainMenuLinks = $this->MAINMENU_LOGGED_IN_LINKS;
        $SideMenuLinks = $this->SIDEMENU_LOGGED_IN_NAMES;
        $SideMenuNames = $this->SIDEMENU_LOGGED_IN_LINKS;
      }
      else if ($situation == DESIGNER) {
        $topMenuNames = $this->TOPMENU_DESIGNER_NAMES;
        $topMenuLinks = $this->TOPMENU_DESIGNER_LINKS;
        $MainMenuNames = $this->MAINMENU_DESIGNER_NAMES;
        $MainMenuLinks = $this->MAINMENU_DESIGNER_LINKS;
        $SideMenuLinks = $this->SIDEMENU_DESIGNER_NAMES;
        $SideMenuNames = $this->SIDEMENU_DESIGNER_LINKS;
      }
      var_dump ($topMenuLinks);
      $this->setHeader ($topMenulinks, $topMenuNames, $MainMenuLinks, $MainMenuNames, $SideMenuLinks, $SideMenuNames);
    }

    public function setHeader ($topMenuLinks, $linkNames, $menus, $menusNames, $sideMenuLinks, $sideMenuNames) {
      var_dump ($topMenuLinks);
      $enlaces = $this->generateTopMenu ($linkNames, $topMenuLinks);
      $data['enlaces'] = $enlaces;
      $menus = $this->generateMenus ($menusNames, $menus);
      $data['menus'] = $menus;
      $sideMenus = $this->generateSideMenu ($sideMenuLinks, $sideMenuNames);
      $data['sideMenus'] = $sideMenus;

      $this->controller->load->helper('html');
      $this->controller->load->view('static/header.php', $data);
    }
  [...]
  }

全部読まないでください。それは必要はありません。2 つのvar_dump呼び出しを見てください。最初のvar_dump出力:

array (size=2)
  0 => string 'users/login' (length=11)
  1 => string 'users/register' (length=14)

2番目のもの:

array (size=0)
  empty

変数が初期化されていない理由がわかりません。残りの変数はすべて問題ありません。

コードを簡素化しました:

<?php
  class FooterHeader {

    function FooterHeader($controller) {
      $this->controller = $controller;
    }

    public function setDefaultHeader($situation) {
      $topMenulinks = array();
      // dependiendo del estado del usuario, mostramos cosas u otras
      $topMenuLinks = array('users/login', 'users/register');
      var_dump($topMenuLinks);
      $this->setHeader($topMenulinks);
    }

    public function setHeader($topMenuLinks) {
      var_dump($topMenuLinks);
    }
  }
?>

しかし、問題はまだ発生しています。

呼び出しを行うコードは次のとおりです。

<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
  require_once('utils/footerHeader.php');
  require_once('utils/defineMenus.php');

  class WelcomePage extends CI_Controller {

    var $fh;

    function WelcomePage() {
      parent::__construct();
      $this->fh = new footerHeader($this);

      $this->load->helper('url');
    }

    public function index()
    {
      // seteamos el header (el defecto)
      $this->fh->setDefaultHeader(NOT_LOGGED_IN);

      $this->load->view('subirDisenyoEjemplo.php');

      //$this->fh->setFooter();
    }
  }

  /* End of file welcomePage.php */
  /* Location: ./application/controllers/welcomePage.php */
?>
4

2 に答える 2

1

大文字の使用に注意してください:

var_dump($topMenuLinks);
$this->setHeader($topMenulinks);

$topMenu Lインクと $topMenu Lインク。サーバーで試してみたところ、初期化されていない変数としてすぐにポップアップしました。

元は:

配列の内容は、if-else ifコンストラクトの結果によって異なります。この場合のみ

if ($situation == NOT_LOGGED_IN) {

最初の のように、配列にその値が割り当てられますvar_dump()。そうしないと、次のように初期化されるため、空の配列になってしまいます。

$topMenulinks = array();

またはsituationでカバーされていないものがある場合。Gの欠落に 注意してください。LOGED_INDESIGNERLOGED_IN

于 2013-05-19T19:59:09.397 に答える
1

呼び出しコードがないと判断するのはちょっと難しいですが、私はこれを見つけました:

$situation == LOGED_IN
$situation == LOGGED_IN
于 2013-05-19T20:01:33.657 に答える