更改控制器名称的大小写

时间:2013-12-23 13:59:44

标签: php autoload case-sensitive phalcon

我在自己的电脑上有一个应用程序(Kubuntu 13.10)。

当我使用单独的类来定义路线时,一切都很完美。例如,我有url backend/dictionaries,它由模块后端,DictionariesController和indexAction处理。该网址的观点位于views / dictionaries / index.phtml。

然后我切换到Phalcon \ Mvc \ Router \ Annotations()并挂载模块的路由,如$router->addModuleResource('backend', 'MyApp\Backend\Controller\Dictionaries');

从那一点开始,直到我使用大写D将视图/词典重命名为views / Dictionaries,我的视图才会呈现。

然而,当我将项目转移到生产服务器(Debian 7)以查看我的视图时,我不得不将视图文件夹重命名为小写。

因此,在我的计算机上,操作视图位于Controllername / acitonname.php(例如Dictionaries / index.php)中,但在生产时它应该是controllername / actionname.php(dictionaries / index.php)

我已经从调度员打印了控制器名称 - 在我的机器上它以大写字母开头,但在生产时它是小写的。

问题是为什么它会发生以及如何在不处理'dispatch:beforeDispatchLoop'的情况下修复它?

增加:

开发和生产的问题在于不同的phalcon版本。在开发中我使用1.2.4,在生产 - 1.2.3

但是仍然存在路径与注释路由定义的错误(或功能)。如果我使用注释,则控制器名称为大写,而如果我使用$route->add('/:controller/:action')定义,则控制器名称为小写。

1 个答案:

答案 0 :(得分:2)

你面临一个世纪的问题:在localhost工作,但在服务器上工作。解决方案很简单,就像使用服务器环境进行开发一样。

例如,我有3台计算机,一台是Mac,一台是Windows,一台上帝知道什么。有一天,Ubuntu,另一个kubuntu或任何其他名为操作系统的花哨。如果您的服务器是Debian 7,无论您在工作机器上使用什么操作系统,您的代码总是必须由Debian 7处理,PHP配置应该与您的真实机器一样接近。那么你将不会有像不同的文件路径,不同的行尾符号和其他一些疯狂的东西这样的错误。

我建议你尝试Vagrant表格https://www.vagrantup.com/downloads.html

你的步骤是这样的:

  1. 下载https://www.virtualbox.org并安装
  2. 下载https://www.vagrantup.com/downloads.html并安装
  3. 根据您的需要配置vagrant。 Debian 7带有一些php扩展或你生产服务器上的任何东西。
  4. 只需使用终端,命令行或windows power shell导航到您的vagrant文​​件所在的目录,然后输入“vagrant up --provision”
  5. 编辑你的主要操作系统主机文件(大多数linux应该在这里:/ etc / hosts)添加行:xxx.xxx.xx.xxx domain.vm(xxx.xxx.xxx.xxx - 你的虚拟机箱地址来自vagrant配置文件.domain.vm是您的域名,适用于您的本地开发。输入您想要的任何内容,我只想使用.vm tld用于虚拟机)
  6. 现在vagrant将读取您的配置文件,下载所需的虚拟框,安装php,与虚拟框文件夹保持同步主OS的文件夹。您将像往常一样编辑文件,vagrant将确保,在虚拟框中您拥有相同的文件。

    您应该能够转到http://domain.vm/,并在您的kubuntu,windows,mac ...操作系统上本地使用debian 7在虚拟机上运行您的网站。什么是最好的 - 您不必担心本地和服务器上使用的操作系统之间的差异。

    此外,如果您要将所有这些内容添加到git版本控制中,您将能够在±15分钟内使用您的项目的任何计算机(取决于互联网速度下载1次虚拟机操作系统)。

    也许我应该制作关于所有这些事情的视频教程..但你应该能够在Youtube上找到一个。

    为了让您的生活更轻松,这是我工作的Vagrant配置。我使用ubuntu + PhalconPHP框架+ MongoDb和Mysql。有2个文件。一个用于流浪的主要事物:下载操作系统,安装同步文件夹等,以及一个 - 用于启动流浪者后的安装。如果要重新运行安装脚本,只需键入vagrant provision

    即可

    Vagrantfile文件(文件名只是“Vagrantfile”)

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
    VAGRANTFILE_API_VERSION = "2"
    
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    
      # Base Box
      # --------------------
      config.vm.box = "precise32"
      config.vm.box_url = "http://files.vagrantup.com/precise32.box"
    
      # Connect to IP
      # --------------------
      config.vm.network :private_network, ip: "192.168.5.0"
    
      # Forward to Port
      # --------------------
      #config.vm.network :forwarded_port, guest: 80, host: 8080
    
      # Optional (Remove if desired)
      config.vm.provider :virtualbox do |v|
        # How much RAM to give the VM (in MB)
        # -----------------------------------
        v.customize ["modifyvm", :id, "--memory", "700"]
    
        # Uncomment the Bottom two lines to enable muli-core in the VM
        #v.customize ["modifyvm", :id, "--cpus", "2"]
        #v.customize ["modifyvm", :id, "--ioapic", "on"]
      end
    
      # Provisioning Script
      # --------------------
      config.vm.provision "shell", path: "init.sh"
    
      # Synced Folder
      # --------------------
      config.vm.synced_folder "./", "/var/www/", :mount_options => [ "dmode=775", "fmode=644" ], :owner => 'www-data', :group => 'www-data'
    
    end
    

    和安装文件(文件名是“init.sh”):

    #!/bin/bash
    # Using Precise32 Ubuntu
    # to use closest ubuntu mirror by geographic location
    echo 'deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiverse' | cat - /etc/apt/sources.list > temp && mv temp /etc/apt/sources.list
    echo 'deb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main restricted universe multiverse' | cat - /etc/apt/sources.list > temp && mv temp /etc/apt/sources.list
    echo 'deb mirror://mirrors.ubuntu.com/mirrors.txt precise-backports main restricted universe multiverse' | cat - /etc/apt/sources.list > temp && mv temp /etc/apt/sources.list
    echo 'deb mirror://mirrors.ubuntu.com/mirrors.txt precise-security main restricted universe multiverse' | cat - /etc/apt/sources.list > temp && mv temp /etc/apt/sources.list
    
    sudo apt-get update
    sudo apt-get update
    
    #
    # For PHP 5.5
    #
    
    sudo apt-get install -y python-software-properties
    sudo add-apt-repository ppa:ondrej/php5
    sudo apt-get update
    
    #
    # MySQL with root:<no password>
    #
    export DEBIAN_FRONTEND=noninteractive
    apt-get -q -y install mysql-server
    
    #
    # PHP
    #
    sudo apt-get install -y php5 php5-dev apache2 libapache2-mod-php5 php5-mysql php5-curl php5-mcrypt php5-gd php5-imagick
    
    #
    # Redis
    #
    sudo apt-get install -y redis-server
    
    #
    # MongoDB
    #
    sudo apt-get install mongodb-clients mongodb-server
    
    #
    # Utilities
    #
    sudo apt-get install -y curl htop git-core gcc autoconf
    sudo apt-get install -y libpcre3-dev
    
    #
    # Redis Configuration
    # Allow us to Remote from Vagrant with Port
    #
    sudo cp /etc/redis/redis.conf /etc/redis/redis.bkup.conf
    sudo sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /etc/redis/redis.conf
    sudo /etc/init.d/redis-server restart
    
    #
    # MySQL Configuration
    # Allow us to Remote from Vagrant with Port
    #
    sudo cp /etc/mysql/my.cnf /etc/mysql/my.bkup.cnf
    # Note: Since the MySQL bind-address has a tab character I comment out the end line
    sudo sed -i 's/bind-address/bind-address = 0.0.0.0#/' /etc/mysql/my.cnf
    
    #
    # Grant All Priveleges to ROOT for remote access
    #
    mysql -u root -Bse "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION;"
    sudo service mysql restart
    
    
    
    #
    # Composer for PHP
    #
    sudo curl -sS https://getcomposer.org/installer | php
    sudo mv composer.phar /usr/local/bin/composer
    
    #
    # Apache VHost
    #
    cd ~
    echo '<VirtualHost *:80>
            DocumentRoot /var/www/public
            SetEnv APPLICATION_ENV "development"
    </VirtualHost>
    
    <Directory "/var/www/public">
            Options Indexes Followsymlinks
            AllowOverride All
            Require all granted
    </Directory>
    ErrorLog /var/www/logs/error.log
    ' > vagrant.conf
    
    sudo mv vagrant.conf /etc/apache2/sites-available
    sudo a2enmod rewrite
    
    #
    # Install PhalconPHP
    # Enable it
    #
    cd ~
    git clone --depth=1 git://github.com/phalcon/cphalcon.git
    cd cphalcon/build
    sudo ./install
    
    echo "extension=phalcon.so" > phalcon.ini
    sudo mv phalcon.ini /etc/php5/mods-available
    sudo php5enmod phalcon
    sudo php5enmod curl
    
    #
    # Install PhalconPHP DevTools
    #
    cd ~
    echo '{"require": {"phalcon/devtools": "dev-master"}}' > composer.json
    composer install
    rm composer.json
    
    sudo mkdir /opt/phalcon-tools
    sudo mv ~/vendor/phalcon/devtools/* /opt/phalcon-tools
    sudo ln -s /opt/phalcon-tools/phalcon.php /usr/bin/phalcon
    sudo rm -rf ~vendor
    
    
    #
    # PHP.ini params edits
    #
    sudo echo "; ######### PHP.ini modifications from vagrant init.sh #######" >> /etc/php5/apache2/php.ini
    sudo echo "error_reporting = E_ALL | E_STRICT" >> /etc/php5/apache2/php.ini
    sudo echo "display_errors = On" >> /etc/php5/apache2/php.ini
    
    #
    # Reload apache
    #
    sudo a2ensite vagrant
    sudo a2dissite 000-default
    sudo service apache2 reload
    sudo service apache2 restart
    sudo service mongodb restart
    
    #echo -e "----------------------------------------"
    #echo -e "To create a Phalcon Project:\n"
    #echo -e "----------------------------------------"
    #echo -e "$ cd /var/www"
    #echo -e "$ phalcon project projectname\n"
    #echo -e
    #echo -e "Then follow the README.md to copy/paste the VirtualHost!\n"
    
    #echo -e "----------------------------------------"
    #echo -e "Default Site: http://192.168.5.0"
    #echo -e "----------------------------------------"
    
    ####### writable Volt directory
    sudo mkdir /vagrant/cache/volt/
    sudo chmod 777 /vagrant/cache/volt/
    

    当然,如果您需要Debian 7,安装脚本应该根据您的需要进行调整,并将关于ubuntu的Vagrantfile行编辑到您的操作系统。以下是所有支持的操作系统列表:http://www.vagrantbox.es

    在Vagrant文​​件中更改这两行:

      config.vm.box = "precise32"
      config.vm.box_url = "http://files.vagrantup.com/precise32.box"
    

    并且还更改安装脚本,我不使用Debian,也说不出可能出错的地方。