- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我所有的 Controller 都在命名空间 MyApp\Controllers
下因此,正如文档所推荐的那样,我已将默认命名空间设置为:
$dispatcher->setDefaultNamespace('MyApp\Controllers');
/features/featureX/
和
/wizards/featureX/
.所以从那个例子中我得到了
MyApp\Controllers\Features\FeaturesX
和
MyApp\Controllers\Wizards\FeaturesX
.
$router->add("/:namespace", ["namespace" => 1]);
)LoginController
,应保留在 MyApp\Controllers
命名空间。 最佳答案
好吧,在使用 Phalcon 一段时间后,我可以说有时当您决定使用与我们在项目文档中找到的方法不同的方法时,它并不那么灵活。 namespace 的使用是这些情况之一。
框架不能很好地处理多个命名空间级别,但它仍然设计良好且可扩展。您几乎可以覆盖任何内容,并且通过一些自定义,您可以实现您想要的任何行为。
以下是我为在文件夹/命名空间中组织我的所有内容并仍然使用整个框架所做的工作。
其中一些信息可能对您的上下文有用,因此这是迄今为止我的传奇旅程的报告......
Phalcon 与命名空间
好的,所以如果您决定将 PHP 源代码组织在文件夹和命名空间内,请准备好调整几乎所有主要功能,并准备好 更多在您的实现中明确(即在任何地方使用完整的类路径)。
基本上,您将丢弃框架必须提供的一些最酷的自动化,因为它们是基于约定的,并且这些约定似乎是在没有考虑 namespace 的情况下定义的。
但是,尽管有这些额外的工作要做,我还是决定保留这个设计决定;毕竟,我们选择 MVC 框架是有原因的,对吧?!我们想让事情井井有条。特别是在大型项目中,将源代码稀释到多个命名空间/文件中以提高可维护性非常重要。
目录结构
首先,您应该了解我选择的目录结构,以了解我在下面谈论的内容。相信我,我已经花了几个小时来调整这个结构并阅读其他 MVC 框架推荐的结构,毕竟我个人的建议非常简单:选择问题较少的!通常,这意味着更加解耦/碎片化的一个。
这是我目前使用的结构,它已经为我服务了将近两年,并且适合我需要抛出的任何类型的代码:
清楚地了解您的目录/命名空间结构可以在实现新内容时消除大量猜测,并帮助您在不知不觉中编写解耦代码。如果你在一开始就“浪费”了一些时间来关心这个,这意味着将来你的重构不会那么痛苦。
类加载器
你注意到 source/
文件夹及其内容或多或少地组织为 PSR Standards需要?!
造成这种情况的原因是 Phalcon's Class Loader符合 PSR-0;
所以基本上我只需要注册 source/
文件夹到加载器:
$phLoader = new PhLoader();
// Considering the public folder as your current __DIR__
$phLoader->registerDirs(['../source/']);
$phLoader->register();
……瞧!您只需引用该类(需要时使用完整路径),PHP 和 Phalcon 内部实现都会找到它。例如,要在我的 DI 容器中注册我的组件之一:
// At the first time the service 'foo' is needed
// Phalcon will read the file at 'source/MyApp/Components/Foo.php'
// and then call Foo's constructor
$di->set('foo', 'MyApp\Components\Foo');
$router->setDefaultNamespace('MyApp\Controllers');
好的!
MyApp\Controllers\Foo\BarController
下有一个 Controller 怎么办? ?!
Foo
部分作为另一个命名空间级别。
:namespace/index/index
仅定义命名空间时
:namespace/:controller/index/
仅定义命名空间和 Controller 名称时
:namespace/:controller/:action/
定义命名空间、 Controller 和 Action 名称时
:namespace/:controller/:action/:params
当一切都被定义并包括参数时
:namespace
正则表达式占位符与另一个匹配所有可能命名空间的正则表达式,并实现了一个“转换器”,将路由转换为正确的命名空间(即 "/foo/bar/baz"-->
['namespace' => 'MyApp\Controllers\Foo', 'controller' => 'bar', 'action' => 'baz']
)。
namespace MyApp\Controllers\Foo;
class BarController
{
public function bazAction()
{
// The path is relative to the views dir you've set before
$this->view->pick('configurations/subscriptions/index.volt')
...
很高兴您可以利用该事件
beforeExecuteRoute根据您自己的约定自动选择 View 。
关于phalcon - 使用 Phalcon 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22591508/
当我想从另一个页面切换到一个页面时,我可以同时找到$this->dispatcher->forward()和 $this->response->redirect() .两者似乎都可以正常工作。 它们之
我在 Ubuntu 15 中运行并安装了 Phalcon v3,但我对我们当前使用 Phalcon v2 的 API 有问题,有没有办法将我安装的 Phalcon 的当前版本降级到以前的 v2? 最佳
我上下搜索,但找不到 Phalcon\Tag 或 Phalcon\Forms 哪一个更适合创建表单。 这两个类都具有创建表单元素的功能。但我发现 Phalcon\Tag 中有一些方便的标签,例如 Ph
我所有的 Controller 都在命名空间 MyApp\Controllers 下因此,正如文档所推荐的那样,我已将默认命名空间设置为: $dispatcher->setDefaultNamespa
我正在使用 Phalcon PHP 制作项目。我已经使用 phalconphp.com 中的说明安装了 Phalcon 和 Phalcon devtools . 我已成功创建我的项目,但 PhpSto
是否可以从 Phalcon 中的查询构建器实例中提取原始 sql 查询?像这样的东西? $queryBuilder = new Phalcon\Mvc\Model\Query\Builder(); $
我正在用 php Phalcon 开发一个项目。 我正在使用 Xampp 服务器。我遵循的安装过程位于此链接上: http://docs.phalconphp.com/en/latest/refere
我有一个 location 表,其中包含该点的 lat、lng 和 geohash 列,以及关联的位置 Phalcon 模型。在 MySQL 中,我有一个 before insert 类型触发器函数,
我正在为我的 PhalconPHP 应用程序使用“多模块”MVC 结构。 我想弄清楚的一个问题是如何将我的“主布局” View 配置为位于模块 View 文件夹之上。 换句话说,我想要一个主“主布局”
我需要知道如何使用 phalcon 模型进行子查询类型选择? 例如,我想选择所有查看过我的用户,它们存储在 UserView 表中,列为“id”、“user_from”、“user_to”(由用户表
我正在尝试安装 Phalcon4与 php7.4-fpm我看到 phalcon 的 ini 文件已加载到我的 phpinfo() 中。这里 但我仍然收到以下错误 Problem 1 - pha
我需要在变量中呈现电子邮件模板以便稍后发送它们(它们存储在 .phtml 文件中),而且我真的不想实现我的特殊类来处理这个问题。 是否可以不渲染 Controller Action View ,而是渲
我在指定的框架上有一个小型应用程序。如果我的应用程序失败,我想控制用户看到的内容。这不应是标准的Web服务器响应,不同的浏览器会以不同的方式显示该响应。在这方面,我想使用Falcon \ Debug。
我正在将 Phalcon 与 Angular JS 一起使用,但遇到了问题,Phalcon 正在捕获我所有的 Angular 路由。目标是首先调用路由/dashboard 来加载 Angular、jQ
几天前我安装了Phalcon PHP,我对它越来越兴奋了。现在我想试用 Phalcon Devtools。我刚刚像在 installation manual via Composer 中一样安装了它(
我必须建立数据库,即 master 和 xyz,因为我需要在应用程序中连接这两个数据库。 那么是否可以在一个应用程序中连接多个数据库,是的,那么如何。? 最佳答案 在 DI 中设置您的连接: //Th
后来我和一起工作symfony 框架。在这个框架中,我们可以使用 轻松构建多语言项目。 FOSUserBundle .但我不知道在 做什么法尔康 !在 Phalcon 文档( multi-lingua
我不明白为什么开发人员会使用 Phalcon 的 Volt 模板引擎。 最后,在编译之后,生成了相同的 PHP 文件,我必须首先手动编写这些文件。对我来说,它看起来只会对性能有害。 答案是“这样您就可
做完$this->dispatcher->forward()之后我理解正确吗?或 $this->response->redirect()我需要手动确保其余代码不会被执行?如下所示,还是我错过了什么?
我正在尝试像这样为我的模板创建宏: {%- macro bField(form, name, attributes) %} {{ form.label(name) }}
我是一名优秀的程序员,十分优秀!