【问题标题】:codeigniter include common file in viewcodeigniter 在视图中包含公共文件
【发布时间】:2013-05-08 17:00:22
【问题描述】:

大家好,我有一个用 codeigniter 开发的网站,我想将一些我在许多页面中使用的 javascript/PHP 函数存储到一个名为 common.php 的文件中。 我试过这种模式:

require(base_url().'application/libraries/common.php'); //I have tried also include

这会返回这个错误:

A PHP Error was encountered

Severity: Warning

Message: require() [function.require]: http:// wrapper is disabled in the server configuration by allow_url_include=0

我要去我的 php.ini 并打开 allow_url_include,重新启动 apache,当我尝试加载页面时,现在返回这个错误:

A PHP Error was encountered

Severity: Warning

Message: require() [function.require]: http:// wrapper is disabled in the server configuration by allow_url_include=0

Filename: backend/hotel_view.php

Line Number: 6

A PHP Error was encountered

Severity: Warning

Message: require(http://demo.webanddesign.it/public/klikkahotel.com/application/libraries/common.php) [function.require]: failed to open stream: no suitable wrapper could be found

Filename: backend/hotel_view.php

Line Number: 6


Fatal error: require() [function.require]: Failed opening required 'http://demo.webanddesign.it/public/klikkahotel.com/application/libraries/common.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/public/klikkahotel.com/application/views/backend/hotel_view.php on line 6

如何在我的页面中包含一个简单的文件?

【问题讨论】:

  • 下面给出了这么多的答案,但它取决于你的公共文件的大小是要制作辅助函数还是直接查看。但根据我的说法,你应该始终保持 js 和 php 不同良好做法的文件!

标签: php codeigniter


【解决方案1】:

使用$this->load->view('common'); 将其拉入您想要的任何视图中您可以包含来自控制器或视图的其他视图。

示例 1

your_controller.php

public function index() {
   $this->load->view('homepage');
}

views/homepage.php

<?php
$this->load->view('common');
?>

<body>
  <!-- html -->
</body>

示例 2

your_controller.php

public function index() {
  $this->load->view('common');
  $this->load->view('homepage');
}

【讨论】:

  • 阅读 MVC 代表什么。这就是 CodeIgniter 的构建方式。如果我们所有人都可以在不知道自己做什么的情况下构建我们想要的一切,那么使用 MVC 标准或框架有什么意义?
  • 这是一种不好的做法,你不能一直为所有请求加载相同的视图,你应该使用帮助器
  • @saurabh2836:没有必要一直为每个请求拉取它。如果您看到我的示例,则仅在需要时才包含视图(无论是通过视图还是通过控制器)。
  • @xbonez 根据问题,在整个项目中都需要通用视图,因此您必须在我认为正确的每个函数中加载此文件!!!!
  • 不是在每个函数中,只是在你需要的函数中。如果这是作为助手完成的,你是否也需要多次调用助手?
【解决方案2】:

您可以使用任何软件来添加

<?php $this->load->view('file'); ?>

【讨论】:

    【解决方案3】:

    您应该使用APPPATHBASEPATH,或者只输入文件的完整路径。

    为了安全起见,require_once 应该传递一个本地文件,而不是 URL。我真的不建议在 CodeIgniter 中使用require_once()。使用起来可能会更好:

    $this -&gt; load -&gt; view('common_file');

    【讨论】:

      【解决方案4】:

      您可以在帮助文件中编写php函数 步骤 - 在 application/helperfolder 中创建一个帮助文件名 common_helper - 并创建一个类似

      的函数
          function getBoosters($id){
              $ci=& get_instance();
              $ci->load->database(); 
      
              $sql = "select * from boosters where id ='".$id."' "; 
              $query = $ci->db->query($sql);
              return $query->result();
         }
      

      通过加载此帮助程序,您可以在任何地方使用此常用功能。

      假设你想在 FrontController 中使用这个方法,只需通过这一行加载 helper

      $this->load->helper('common');
      

      现在您可以调用该方法了。在footer.php添加你的js代码,所有功能都在每个页面上都可以使用,你可以轻松使用它们

      【讨论】:

      • 调用load-&gt;view()时不要输入.php
      【解决方案5】:

      如何在 CodeIgnitor 中制作全局函数

      要创建全局函数,请在 CodeIgnitor Helper 文件中定义它们并自动加载它们。方法如下:

      创建你的助手

      要创建 [helpers][2],请在 application/helpers/ 文件夹中创建一个 .php 文件并将您的函数保存在那里。

      注意:最好使用以下格式,以避免函数名冲突:

      if ( ! function_exists('my_function_name'))
      {
          function my_function_name($arg)
          {
              /* Your code here */
      
          }
      }
      

      让他们全球化

      如果您一直使用这些功能(全局),请自动加载它们。

      1. 打开文件:/config/autoload.php
      2. 找到$autoload['helper'] = array();的部分
      3. 添加帮助文件的名称(不包括 .php 扩展名)。

      例如,如果您创建了一个名为 myhelper.php 的帮助文件,它应该如下所示:

      $autoload['helper'] = array('myhelper');

      使用您的全局函数

      现在您的功能将在整个站点中可用。就叫他们批发吧:

      my_sample_function('argument');

      【讨论】:

        【解决方案6】:
        1. base_url() 指的是 Web 路径,例如 http://localhost/myproject/。您不能包含远程文件,实际上您不应该包含。这是一个安全风险。见Can't include file on remote server

        2. 构建自定义库是一个不错的选择,如果您在您的网站中经常使用它,您可以将它包含在 application/config/autoload.php 部分的 $autoload['libraries'] 下。每次您根据 codeigniter 重新加载应用程序/网站时,它都会自动加载。示例:$autoload['libraries'] = array('common'); 如果您的库名为 common.php 并且位于 application/libraries/

        3. 不要将函数放入查看器中,这就是库和助手存在的原因。查看器应该只包含用户应该看到的内容。示例:视图是模型的某种可视化形式。

        【讨论】:

        • 好的,但是如果我想在某些页面而不是每个页面中加载此功能?因为例如我有一个 jQuery 函数并且不希望这个函数在其他页面中工作
        • 你的这个库是否是构建 javascript 函数的 php 助手(如 this)?还是一个简单的javascript函数?
        • 这个文件包含jQuery函数,里面有一些PHP代码,不是助手,只是纯函数
        • 通常,javascript 函数会在 标记和文档准备就绪之间进行,例如 this
        • 我知道,但是我有很多常用功能,在每个页面中重复是不正确的
        【解决方案7】:

        您应该使用 APPPATH 或 BASEPATH 或者只键入文件的完整路径。 require_once(APPPATH.'libraries/common.php');

        【讨论】:

          【解决方案8】:

          为了更有效地解决这个问题,我这样做了:

          您创建一个新的助手(在 application/helpers 中),名称为(例如 common_helpers.php,下划线很重要)。在这个文件中,你把所有的功能,例如构建 html 片段放在一起。

          <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
          
              function getHead(){
              require_once(APPPATH."views/common/head.php");
              }   
          
              function getScripts(){
              require_once(APPPATH."views/common/scripts.php");
              }
          
              function getFooter(){
              require_once(APPPATH."views/common/footer.php");
              }
          

          在您的控制器中,您只调用一个关于 MVC 的视图,并从您的自定义帮助程序中调用函数。

          class Hello extends CI_Controller {
          
             public function index(){
                 $this->load->helper('common');
                 $this->load->view('index');   
             }
          
          }
          

          【讨论】:

            猜你喜欢
            • 2014-08-24
            • 1970-01-01
            • 2010-12-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-02
            • 2022-11-17
            相关资源
            最近更新 更多