0

刚开始使用 Zend Framework,我想知道如何处理我拥有的奇怪类。我非常想知道设置所有内容的最佳实践。

我刚刚启用了布局,并且我有包装 html 头部、正文、页脚等。

在我之前的应用程序中,我创建了一个捆绑器脚本,您可以在其中按特定顺序传递 CSS 文件和 JS 脚本的列表。如果它处于开发模式,那么它只会遍历文件名并将它们打印出来,如下所示:

foreach ($CSS_Scripts as $file) {
    echo '<link src="' . $file . '" ref="stylesheet" />';
}

foreach ($JS_Scripts as $file) {
    echo '<script type="text/javascript" src="' . $file . '"></script>';
}

如果是开发模式,那么它可能会打印出 10 个单独的 CSS 和 JS 文件。如果它在生产中,那么它会将它们捆绑在一起,因此只有 1 个 CSS 和 1 个 JS 文件。

有了这个在模板中......我不太确定逻辑应该去哪里。这是每个页面都应该存在的逻辑,所以它在 layout.phtml 中,但我打算把我的类放在哪里,我打算如何运行它们?我是否将它们放入projectname/library并在内部运行捆绑器逻辑,Bootstrap.php然后将它们分配给视图并在内部调用视图layout.phtml

layout.phtml另外...假设我想在我假设的内部注销时,在每个页面的顶部都可以使用登录表单。我已经创建了表单Application_Form_Login,但要允许登录,我需要在Controller? 我是否也应该在其中播放登录操作,Bootstrap以便可以从每个页面登录并且我不会loginAction在每个页面上重复?

但话又说回来,还有 Zend_Auth 可以提供更多的灵活性,对吧?也许这是在内部启动Bootstrap,然后在整个过程中启动layout.phtml,如果您已登录,我可以为任何视图做条件?

对于在 URL 中有 SEO 标签的登录页面...我猜它是为每个关键字创建一个单独的控制器/视图的情况,例如(只是示例)... stack-overflow/computer-questions/digital-clocks / 然后这些里面的内容Views

谢谢...当一切都分开时,我很困惑,因为它是一种不同的思维方式:D我习惯于在任何地方都拥有完全的控制权,并且可以在任何地方做我想做的事,但这会导致意大利面条代码-.-

4

1 回答 1

2

以下是您的一些问题的一些答案...

Bootstrap 用于设置您的应用程序和资源。您真的不希望引导程序中有任何特定于应用程序的代码。使用引导程序来设置您的视图、注册插件、确保设置了类似的数据库和资源,如果绝对必要,可能在引导程序中初始化您的会话。

您的捆绑过程应该在 layout.phtml 文件中完成。如果您正确利用 Zend Framework 提供的一些占位符助手,您可以轻松完成您想要的。

这是一个示例,此代码将在您的 layout.phtml 文件中:

<?php
$this->headScript()
     ->prependFile($this->baseUrl('js/importantCode.js'), 'text/javascript');

echo $this->headScript();

使用 headScript 助手,我们将文件 'js/importantCode.js' 添加到要包含在布局中的脚本列表中。通过在布局中执行此操作,可以保证importantCode.js 文件始终包含在您的页面中。现在假设您有一个特殊页面,它使用了一些您不会在任何地方使用的附加 javascript,在您的视图脚本中,您可以简单地执行以下操作:

<?php
$this->headScript()->appendFile($this->baseUrl('js/calendar.js'))
                   ->appendFile($this->baseUrl('js/tooltips.js'));
?>

这将为您的标签添加另外两个 javascript 文件,但仅适用于此特定视图。如果您发现自己在很多页面上重复此逻辑,您可以使用插件或视图助手来简化将这些文件添加到视图中,但关键是您不需要引导程序来执行此操作。也有类似的帮助程序用于包含 CSS 或内联样式。

放置一些您自己的自定义类的常见位置是在library/My文件夹中。然后,您可以按照 Zend 的类和目录结构,将您的类命名为My_Custom_Class(library/My/Custom/Class.php),您可以根据需要自动加载它们。

从您的任何 Zend 应用程序代码中,您可以简单地说$obj = new My_Custom_Class()Zend 将从 library/My/Custom/Class.php 自动加载该类,因此您不必在任何地方包含或要求它。通过仅在需要时实例化它,它无需在不需要时始终包含它。

对于您的登录过程,我将创建一个操作来处​​理登录。它可以在专用控制器中,或者您可以找到合适的控制器来包含登录过程(例如 IndexController)。您可以使用View Partial将其包含在您的布局中以显示登录表单,它始终指向您的登录操作来处理登录,并且您可以使用隐藏值将用户重定向到他们登录的控制器和操作如果你希望。

至于您的 SEO 网址,自定义路由在您的情况下可能很有用,或者您可以只构建您的 URL,因此大多数 SEO 只是 URL 参数。取网址http://yoursite.com/product/view/category/Digital-Clocks/cid/1234。Product 是控制器,view 是动作,参数类别是 Digital-Clocks,cid(类别 id)是 1234。您可以通过自定义路由实现更短、更友好的 URL。

希望对一些人有所帮助。

于 2011-10-20T17:40:51.183 回答