GVKun编程网logo

php – 从Zend Framework 2中的路由获取$_GET参数(php如何获取url参数)

9

对于想了解php–从ZendFramework2中的路由获取$_GET参数的读者,本文将提供新的信息,我们将详细介绍php如何获取url参数,并且为您提供关于apache–ZendFramework:

对于想了解php – 从Zend Framework 2中的路由获取$_GET参数的读者,本文将提供新的信息,我们将详细介绍php如何获取url参数,并且为您提供关于apache – Zend Framework:从路由获取子域参数、php – Zend Framework 2:获取应用程序根目录的路径、php – 从Zend Framework中的现有控制器类扩展控制器、php – 从Zend Framework应用程序获取所有模块,控制器和操作的有价值信息。

本文目录一览:

php – 从Zend Framework 2中的路由获取$_GET参数(php如何获取url参数)

php – 从Zend Framework 2中的路由获取$_GET参数(php如何获取url参数)

Zend Framework 1有一种非常简单的方法来解析URL路由并在$_GET超全局中设置找到的params以便于访问.当然,你可以在控制器中使用 – > getParam($something),但如果在URL中找到了param,它也可以通过$_GET访问.

url mypage.com/mymodule/mycontroller/myaction/someparam/5的示例:

ZF1

$this->getParam('someparam'); // 5
$_GET['someparam']; // 5

ZF2

$this->getEvent()->getRoutematch()->getParam('someparam'); // 5
$_GET['someparam'] // undefined index someparam

显然,区别在于ZF2不会将路径参数放入$_GET超全局.

我如何将解析后的参数放入$_GET超全局,因为扩展控制器只是定义一个构造函数,这是不可能的(因为RouteMatch还不是一个对象,不能从控制器的构造函数调用)?

调用$_GET = $this-> getEvent() – > getRoutematch() – > getParam(‘someparam’);在我的每一个控制器都可以工作,但我不希望这样.

换句话说,按照上面的示例URL,我希望能够执行$_GET [‘someparam’]并仍然在应用程序的任何组件中获得值“5”.

编辑:看起来我不够清楚,所以我会尝试澄清一些.我希望我通过/ key / value格式在URL中输入的任何参数立即在$_GET中可用.获取参数时我真的没有问题,我知道如何获得它并且我扩展了Zend的控制器,所以我可以像ZF1一样再次调用$this-> getParams,现在所有控制器都扩展了那个,我只是希望URL中的参数自动也在$_GET中,因此我可以在本地使用$_GET的第三方组件中轻松访问它们.

编辑2:更新为对Samuel Herzog的回答:
在这种情况下,我真的不介意使SRP无效,因为库的构建方式需要它们直接访问$_GET – 它们自己进行过滤并直接依赖于这个超全局.他们还直接获取$_FILES和$_POST进行处理,这就是他们的代码工作方式.

我在抽象控制器中做了以下方法:
$这 – > mergeGet();这基本上使$_GET吸收所有路由匹配的参数,一切都按预期工作,但看到每个控制器/动作都需要库,每次调用该方法可能会很繁琐.如果只有控制器有一个像ZF1那样的init()方法……

首先,如果您正在构建面向对象的堆栈,则不应直接使用$_GET或任何其他超全局. SRP以这种方式失效.

如果你没有可能改变你的(第三方?)图书馆的方式来改变你可能想要挂钩到MvcEvent,听–event–然后得到RouteMatch,你可以用一个简单的循环来填充$_GET .

对于性能最佳的答案,您应该知道每个操作是否需要命名库,仅针对一个模块,还是仅针对某些控制器/操作.
如果最新版本是你的用例,你应该编写一个控制器插件.

第一种方法的一些示例代码:

namespace YourModule;
use Zend\EventManager\EventInterface as Event;
use Zend\Mvc\MvcEvent;

class Module
{
    ...

    public function onBootstrap(Event $ev)
    {
        $application = $e->getApplication();
        $eventManager = $application->getEventManager();

        $eventManager->attach('route',function(MvcEvent $mvcEvent) {
            $params = $mvcEvent->getRoutematch()->getParams();

            foreach ( $params as $name => $value )
            {
                if ( ! isset($_GET[$name]) 
                {
                    $_GET[$name] = $value;
                }
            }
        });
    }
}

apache – Zend Framework:从路由获取子域参数

apache – Zend Framework:从路由获取子域参数

UPD:
解决了.问题是因为我们使用Nginx作为前端.所以Nginx没有将HTTP_HOST传递给apache.

嗨,您好!

我在生产服务器上的基本控制器中获取子域参数时遇到问题,而在本地主机上则没问题.来自url的其他参数,如controller,action应该返回.

这在生产时返回null:

$agencyName = (string) $this->_getParam('agency');

没有对.htaccess所做的更改:

RewriteEngine On
RewriteRule ^main - [L,NC]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$- [NC,L]
RewriteRule ^.*$index.PHP [NC,L]

这是我的vhost设置:

<VirtualHost *:8080>
        ServerName  agencies.domain.com
        ServerAlias *.agencies.domain.com

        ErrorLog /var/log/apache2/agencies.domain_errors.log

        DocumentRoot /var/www/agencies.domain.com/public/

        <Directory "/var/www/agencies.domain.com/public">
                Options -Indexes FollowSymLinks Includes
                DirectoryIndex index.shtml index.PHP
                AllowOverride All
                # Controls who can get stuff from this server.
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

有谁知道它为什么会发生?

UPD:

Bootstrap中的路由器

public function run()
    {
        $frontController = Zend_Controller_Front::getInstance();
        $router = $frontController->getRouter();

        $plainPathRoute = new Zend_Controller_Router_Route(
                        ':module/:controller/:action/*',
                        array(
                            'module' => 'default',
                            'controller' => 'index',
                            'action' => 'index',
                        )
        );

        $config = $this->getoptions();

        $hostnameRoute = new Zend_Controller_Router_Route_Hostname(
                        ':agency.' . $config['siteUri'],
                        NULL,
                        array(
                            'agency' => '([a-z0-9]+)'
                        )
        );

        $router->addRoute('subdomain', $hostnameRoute->chain($plainPathRoute));

        parent::run();
    }

是的,我确实定义了$config [‘siteUri’],我也尝试使用:agency.domain.com再次遇到同样的问题

解决方法:

使用以下内容:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initRoute()
    {
        $this->bootstrap('FrontController');
        $router = $this->getResource('FrontController')->getRouter();
        $router->removeDefaultRoutes();
        $plainPathRoute = new Zend_Controller_Router_Route(
                        ':module/:controller/:action/*',
                        array(
                            'module' => 'default',
                            'controller' => 'index',
                            'action' => 'index',
                        )
        );
        $router->addRoute('default', $plainPathRoute);
        $config = $this->getoptions();
        $hostnameRoute = new Zend_Controller_Router_Route_Hostname(
                        ':agency.' . $config['siteUri'],
                        NULL,
                        array(
                            'agency' => '([a-z0-9]+)'
                        )
        );
        $router->addRoute('subdomain', $hostnameRoute->chain($plainPathRoute));
    }
}

如果您提供有效的子域名(即仅包含字符a-z0-9),则会在代理商中传递,如果没有,则不会设置代理商. (至少它适用于我使用ZF 1.11.3:p).

php – Zend Framework 2:获取应用程序根目录的路径

php – Zend Framework 2:获取应用程序根目录的路径

如何获取应用程序根目录的路径.在Zend Framework 1中,您可以使用常量APPLICATION_PATH,我们如何在Zend Framework 2中获取它?谢谢.

解决方法:

你不应该这样做.如果你使用骨架应用程序,它会在应用程序根目录中执行chdir();因此,将从该路径创建相对路径.如果需要完全限定的路径,请调用getcwd().

php – 从Zend Framework中的现有控制器类扩展控制器

php – 从Zend Framework中的现有控制器类扩展控制器

早上好,我有经典的应用程序,我想从UserController扩展ArticleController,但是当我尝试时

class ArticleController extends UserController
{
    // ...
}

要么

class ArticleController extends Application_Controllers_UserController
{

}

我得到致命错误:上课……没找到…
如何在Zend Framework中扩展一个控制器?

解决方法

控制器类名称的自动加载不是您在应用程序中可以访问的内容,或者除了在这种情况下有很多需要.

您需要手动包含/要求包含您要扩展的控制器的文件.

<?PHP
require_once 'UserController.PHP'; // no adjustment to this path should be necessary

class ArticleController extends UserController
{
    // ...
}

请注意,您的视图脚本仍将通过views / scripts / article而不是views / scripts / user提供.如有必要,您可以在每个操作中调整视图路径.

如注释中所述,您不必更改require_once语句的路径,但可以根据需要进行更改(例如require_once APPLICATION_PATH.’/ modules / test / console / UserController.PHP’;)

php – 从Zend Framework应用程序获取所有模块,控制器和操作

php – 从Zend Framework应用程序获取所有模块,控制器和操作

我想创建一个用于ACL管理的Zend控制器,所以我的问题是:如何获取Zend应用程序中的所有模块名称,控制名称和操作名称来构建ACL控制?

我使用Zend_Navigation,如果您的ACL中不存在该资源,则Zend_Navigation将抛出异常.而且我想使用数据库来拒绝并允许访问.所以我必须先建立数据库.如果我必须手工做,这样做是一件很痛苦的事情.

这可能是一个旧问题,但这正是我这样做
$front = $this->getFrontController();
    $acl = array();

    foreach ($front->getControllerDirectory() as $module => $path) {

        foreach (scandir($path) as $file) {

            if (strstr($file,"Controller.PHP") !== false) {

                include_once $path . DIRECTORY_SEParaTOR . $file;

                foreach (get_declared_classes() as $class) {

                    if (is_subclass_of($class,'Zend_Controller_Action')) {

                        $controller = strtolower(substr($class,strpos($class,"Controller")));
                        $actions = array();

                        foreach (get_class_methods($class) as $action) {

                            if (strstr($action,"Action") !== false) {
                                $actions[] = $action;
                            }
                        }
                    }
                }

                $acl[$module][$controller] = $actions;
            }
        }
    }

关于php – 从Zend Framework 2中的路由获取$_GET参数php如何获取url参数的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于apache – Zend Framework:从路由获取子域参数、php – Zend Framework 2:获取应用程序根目录的路径、php – 从Zend Framework中的现有控制器类扩展控制器、php – 从Zend Framework应用程序获取所有模块,控制器和操作等相关内容,可以在本站寻找。

本文标签: