Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在HMVC结构中将Ion Auth用作单独的模块_Php_Codeigniter_Hmvc - Fatal编程技术网

Php 在HMVC结构中将Ion Auth用作单独的模块

Php 在HMVC结构中将Ion Auth用作单独的模块,php,codeigniter,hmvc,Php,Codeigniter,Hmvc,我对在HMVC模式上运行的我的一个项目使用ion auth感兴趣。应用程序是用Codeigniter编写的 我面临的问题是,一旦ion auth被放置在/app/modules/auth文件夹中,当我尝试访问该模块时,会出现以下错误: HTTP错误500(内部服务器错误): 服务器尝试完成请求时遇到意外情况 请帮我解决一下,我确信我遇到了某种配置/路径问题,但就是不知道在哪里 我只是从github下载了ion_auth文件,并将提取的文件原样放在模块文件夹中。我删除了加载库(如数据库、会话)的所

我对在HMVC模式上运行的我的一个项目使用ion auth感兴趣。应用程序是用Codeigniter编写的

我面临的问题是,一旦ion auth被放置在/app/modules/auth文件夹中,当我尝试访问该模块时,会出现以下错误:

HTTP错误500(内部服务器错误)
服务器尝试完成请求时遇到意外情况

请帮我解决一下,我确信我遇到了某种配置/路径问题,但就是不知道在哪里

我只是从github下载了ion_auth文件,并将提取的文件原样放在模块文件夹中。我删除了加载库(如数据库、会话)的所有行,因为我使用了配置自动加载它们。但是我离开了ion_auth库的加载

在模块文件夹modules/auth中,我有一个与模块特定的配置、库等文件夹类似的应用程序结构


让我知道我哪里做错了,如果我运气好,我会继续搜索并修复此问题并发布。

我看不出有任何理由它不起作用。 退房

他们正在将ionauth与hmvc一起使用

如果你不让它工作, 只需上传普通ci目录中的文件,并检查其是否正常工作。

尝试以下方法:

  • 获取:codeigniter.zip(CI2.0)
  • 提取,确保它正在运行,设置config/config.php
  • 获取模块化扩展:
  • 安装-将MY_Loader和MY_Router复制到/core,将MX复制到第三方文件夹 不要复制MY_控制器-这是用于模块分离,而不是扩展
  • 得到
  • 为Ion_auth安装SQL
  • 将Ion_auth放入模块文件夹/应用程序/模块/用户
  • 在config/routes.php中添加路由:
    $route['auth/(.*)]=“users/auth/$1”

  • 自动加载ion_-auth-
    $Autoload['libraries']=array('database','session','users/ion_-auth')

  • 在modules/users/library/ion_auth.php中编辑以下路径:

    $this->ci->load->config('users/ion_auth', TRUE);
    $this->ci->load->library('email');
    $this->ci->load->library('session');
    $this->ci->lang->load('users/ion_auth');
    $this->ci->load->model('users/ion_auth_model');
    

  • 这是我按照ciuser的指导方针所做的,但有一些变化:

  • 清洁安装Codeigniter。设置config.php、database.php等
  • 安装模块化扩展:
    将第三方/MX移动到CI/应用程序/第三方
    将core/MY_Loader.php和core/MY_Router.php移动到CI/application/core
  • 安装离子验证:
    将以下Ion Auth文件夹移动到CI/application/modules/Auth文件夹:配置、控制器、语言、库、模型
    将Ion Auth/views文件夹下的文件移动到CI/application/modules/Auth/views。(没有一个额外的auth层 如Ion Auth。)
    在数据库中运行Ion Auth sql
  • 在yourbaseurl/index.php/auth上检查它

  • 我得到了CI 2.1+模块扩展5.4+离子认证2的所有工作

    因为,我没有看到任何关于这方面的确切信息,我确实看到了一些东西,比如路由和一些我无法按照他们的方式工作的东西,我决定分享我为实现这一点所做的事情

    一开始我很挣扎,但后来我不得不坐下来思考到底发生了什么

    在那之后,它实际上是相当直截了当的,只有两个陷阱

    我使用CodeIgniter+MX HMVC获得ION AUTH的步骤
  • 安装CodeIgnter(我实际上使用了我正在处理的一个现有项目,因此它不是一个全新的安装。我删除了“index.php”,并且我已经用推荐的方式安装了HMVC。无论如何,这是关于Ion Auth的。)

  • 获取最新版本的Ion Auth

  • 不要在
    application/third\u party
    中安装Ion Auth,而是将其解压缩,然后将生成的目录重命名为
    Auth
    。将其放入
    application/modules
    中,结果是
    application/modules/auth

  • 运行Ion Auth的sql来设置表

  • application/config/autoload.php中,将行更新为:

    $autoload['libraries'] = array('database','session');
    
  • modules/auth/libraries/Ion\u auth.php
    中,将
    \u construct
    中的行更新为:

    $this->ci->load->config('auth/ion_auth', TRUE);
    $this->ci->load->library('email');
    $this->ci->load->library('session');
    $this->ci->lang->load('auth/ion_auth');
    $this->ci->load->model('auth/ion_auth_model')
    
    $this->load->config('auth/ion_auth', TRUE);
    $this->load->helper('cookie');
    $this->load->helper('date');
    $this->load->library('session');
    $this->lang->load('auth/ion_auth');
    
  • modules/auth/models/ion\u auth\u model.php中
    \u construct
    中的行更新为:

    $this->ci->load->config('auth/ion_auth', TRUE);
    $this->ci->load->library('email');
    $this->ci->load->library('session');
    $this->ci->lang->load('auth/ion_auth');
    $this->ci->load->model('auth/ion_auth_model')
    
    $this->load->config('auth/ion_auth', TRUE);
    $this->load->helper('cookie');
    $this->load->helper('date');
    $this->load->library('session');
    $this->lang->load('auth/ion_auth');
    
  • 更改
    auth
    控制器(
    modules/auth/controllers/auth.php
    )以扩展
    MX\u控制器
    ,而不是默认的
    CI\u控制器

  • 现在,在
    auth.php
    中,确保将所有
    $this->data
    更改为
    $data
    -(确保阅读下面的内容!!)

  • modules/auth/views/auth
    中的文件和目录移动到
    modules/auth/views
    中,结果是
    modules/auth/views
    中没有更低级别的
    auth
    目录-(请务必阅读下面的内容!!)

  • 将routes.php文件添加到modules/auth/config中,并添加以下行:

    $route['auth/(:any)'] = "auth/$1";
    
  • 现在,转到
    http://yoursite/auth
    一切都应该很好

  • 戈查斯 首先。。不要在
    application/config/AUTOLOAD.php
    文件中自动加载库或模型。在模块中使用
    $this->load->library(“任意”)
    等显式执行这些操作

    那件事让我难堪了好一阵子

    我忘了提到,在我当前的安装中,我已经从URL中删除了index.php,并且在安装的基础中有一个.htaccess文件。如果事情不顺利,可能是因为这里的基础不好。这是我使用的.htaccess: 为了解决这个错误,我将
    auth.php
    controller`中的所有
    $this->data
    更改为
    $data

    解决此问题后,当我转到
    auth
    时,会出现如下错误:

    Unable to load the requested file: auth/login.php
    
    显然,它找不到vie
    #! /bin/bash
    
    echo "
    
    This will install Codeigniter 2, Modular Extensions 5.4 and Ion Auth 2!
    
    This script will TRY to download the packages for you.
    -----------------------------------------------------
    The resulting CodeIgniter install is already configured to remove the index.php
    from the URL and should ALMOST be ready to run!  Make sure to read the
    steps at the end of this.
    
    
    Good luck..
    
    
    Hit a key to continue or Ctrl-c to cancel now."
    
    
    read
    
    ## Download the files
    echo "Get CodeIgniter"
    wget -O CodeIgniter.zip http://codeigniter.com/download.php
    
    echo "Get Ion Auth"
    wget --no-check-certificate -O benedmunds-ion-auth.zip https://github.com/benedmunds/CodeIgniter-Ion-Auth/zipball/2
    
    echo "Get Modular Extensions"
    wget --no-check-certificate -O wiredesignz.zip https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/get/tip.zip
    
    ## Unpack all the files
    echo "Unpack Files"
    unzip CodeIgniter.zip
    rm CodeIgniter.zip
    unzip benedmunds-ion-auth.zip
    rm benedmunds-ion-auth.zip
    unzip wiredesignz.zip
    rm wiredesignz.zip
    
    ## Get the Dirs
    echo "Find Dirs"
    CI_DIR=`ls -c1 | grep ^CodeIgniter_`
    ME_DIR=`ls -c1 | grep ^wired`
    IA_DIR=`ls -c1 | grep ^ben`
    
    ## Make Modules Dir
    echo "Make Modules Dir"
    mkdir $CI_DIR/application/modules
    
    ## Move the Modular Extensions Files Into Place
    echo "Move Modular Extensions files"
    mv $ME_DIR/third_party/MX $CI_DIR/application/third_party
    mv $ME_DIR/core/* $CI_DIR/application/core/
    
    ## Remove the Modular Extension Dir
    echo "Remove ME Install Dir"
    rm -rf $ME_DIR
    
    ## Make Welcome Module Dir
    echo "Make Modular Welcome Dir"
    mkdir -p $CI_DIR/application/modules/welcome/controllers
    
    ## Move default welcome controller to the modules dir
    echo "Move Welcome Controller into Modules"
    mv $CI_DIR/application/controllers/welcome.php $CI_DIR/application/modules/welcome/controllers/
    
    
    ## Make Welcome Views Dir
    echo "Make Welcome Views Dir"
    mkdir -p $CI_DIR/application/modules/welcome/views
    
    ## Move Welcome View into modular dir
    echo "Move Welcome views into modular Welcome Dir"
    mv $CI_DIR/application/views/welcome_message.php $CI_DIR/application/modules/welcome/views/
    
    ## Rename Ion Auths Dir to Auth
    echo "Rename Ion Auth Dir to Auth"
    mv $IA_DIR $CI_DIR/application/modules/auth
    
    ## Update the Welcome Controller to extend MX_Controller instead of CI_Controller
    echo "Update Welcome Controller to extend MX_Controller"
    sed -i -e "s/CI_Controller/MX_Controller/" $CI_DIR/application/modules/welcome/controllers/welcome.php
    
    ## Update the default autoload file to include database and session libraries
    echo "Update autoload file to include the database and session libraries"
    sed -i -e "s/\$autoload\['libraries'] = array()/\$autoload['libraries'] = array('database','session')/" $CI_DIR/application/config/autoload.php
    
    ## Update the config file to remove index.php
    echo "Update config file to remove index.php"
    sed -i -e "s/\$config\['index_page'] = 'index.php';/\$config['index_page'] = '';/" $CI_DIR/application/config/config.php
    
    ## Update the Ion Auth libraries to use the auth resource
    echo "Update Ion Auth Lib to use the Auth Resources"
    sed -i -e "s/\$this->ci->load->config('ion_auth', TRUE);/\$this->ci->load->config('auth\/ion_auth', TRUE);/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php
    sed -i -e "s/\$this->ci->lang->load('ion_auth');/\$this->ci->lang->load('auth\/ion_auth');/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php
    sed -i -e "s/\$this->ci->load->model('ion_auth_model');/\$this->ci->load->model('auth\/ion_auth_model');/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php
    
    ## Update the Ion Auth model to use the auth resource
    echo "Update the Ion Auth Model to use the Auth Resources"
    sed -i -e "s/\$this->load->config('ion_auth', TRUE);/\$this->load->config('auth\/ion_auth', TRUE);/" $CI_DIR/application/modules/auth/models/ion_auth_model.php
    sed -i -e "s/\$this->lang->load('ion_auth')/\$this->lang->load('auth\/ion_auth')/" $CI_DIR/application/modules/auth/models/ion_auth_model.php
    
    ## Update the Auth Controller to extend MX_Controller instead of CI_Controller
    echo "Update Auth Controller to extend MX_Controller"
    sed -i -e "s/CI_Controller/MX_Controller/" $CI_DIR/application/modules/auth/controllers/auth.php
    
    ## Update the Auth Controller so "$this->data" will be "$data"
    echo "Update the Auth Controller to change \$this->data to \$data"
    sed -i -e "s/\$this->data/\$data/" $CI_DIR/application/modules/auth/controllers/auth.php
    
    ## Move auth/views files up 1 level
    echo "Move auth/views files up 1 level"
    mv $CI_DIR/application/modules/auth/views/auth/* $CI_DIR/application/modules/auth/views/
    
    ## Remove the auth/views/auth dir
    echo "Remove the auth/views/auth dir"
    rmdir $CI_DIR/application/modules/auth/views/auth
    
    ## Make the routes.php file
    echo "Write the modules/auth/config/routes.php file"
    echo "<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    /*
    | -------------------------------------------------------------------------
    | URI ROUTING
    | -------------------------------------------------------------------------
    */
    
    \$route['auth/(:any)'] = \"auth/\$1\";
    
    /* End of file routes.php */
    /* Location: ./application/config/routes.php */
    
    
    " > $CI_DIR/application/modules/auth/config/routes.php
    
    echo "Creating the $CI_DIR/.htaccess file"
    echo "## Set up mod_rewrite
    
    <IfModule mod_rewrite.c>
    Options +MultiViews +FollowSymLinks
    DirectoryIndex index.php index.html
    
    # Enable Rewrite Engine
    # ------------------------------
    RewriteEngine On
    
    # UPDATE THIS TO POINT TO where you installed this FROM YOUR DOC ROOT.
    # If this is in the DOC ROOT, leave it as it is
    #---------------------
    RewriteBase /
    
    # In case your hosting service doesn't add or remove 'www.' for you, you can
    # do it here by uncommenting and updating the 'Rewrite*'s below.
    #
    # Add or remove 'www.'  Whichever you prefer.  
    # This one removes the 'www.' which seems to be the favorable choice these days. 
    # ------------------------------
    #RewriteCond %{HTTP_HOST} ^www.<sitename>.com
    #RewriteRule (.*) http://<sitename>.com/\$1 [R=301,L]
    
    # Redirect index.php Requests
    # ------------------------------
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteCond %{THE_REQUEST} !/system/.*
    RewriteRule (.*?)index\.php/*(.*) \$1\$2 [R=301,L]
    
    
    # Standard ExpressionEngine Rewrite
    # ------------------------------
    RewriteRule modules/(.+)/controllers/(.+)\.php\$ /index.php?/\$1/\$2 [L,R=301]
    RewriteRule controllers/(.+)\.php\$ /index.php?/\$1 [L,R=301]
    
    RewriteCond \$1 !\.(css|js|gif|jpe?g|png) [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\$ index.php/\$1 [L]
    
    </IfModule>" > $CI_DIR/.htaccess
    
    echo "
    
    *********** DON'T FORGET THESE STEPS ***********
    ====================================================================
    
    6 more steps:
    ==================
    1) Update the \$config['base_url'] var in application/config/config.php
    2) Update the \$config['encryption_key'] var in application/config/config.php
    3) Update your application/config/database.php file to work with your database,
    4) Run the Ion Auth SQL file located in application/modules/auth/sql.
    5) Now rename or move everything from $CI_DIR into where you set \$config['base_url']
    
    If you put your CodeIgniter files anywhere other than DOC ROOT you need to do step 6:
    6)Update the 'RewriteBase' in the .htaccess file in your CodeIgniter Directory to where your CodeIgniter files are.
    
    If your CodeIgniter files ARE IN the DOC ROOT of your webserver, you should be able to run from there like this:
    ---------------
    yourdomain.com
    yourdomain.com/auth
    
    
    If your CodeIgniter files AREN'T IN the DOC ROOT:
    Remember to update the RewriteBase to point to "your_ci_dir" (see below) in the .htaccess file and you should be able to run like this:
    --------------------------
    yourdomain.com/your_ci_dir
    yourdomain.com/your_ci_dir/auth
    
    ====================================================================
        YOU SHOULD BE DONE AFTER FOLLOWING THOSE STEPS!
    
    I think you should be up and running!
    
    
    Hope this all works!
    
    
    Please let me know if this worked for you or not!
    Edmund - edmundchaniii AT gmail.com
    
    C'ya!
    
    "