Zend Framework 1.11布局类等

时间:2011-10-20 16:08:37

标签: php model-view-controller zend-framework zend-form zend-layout

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

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

在我之前的应用程序中,我创建了一个bundler脚本,您可以按特定顺序传递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标签的登陆页面...我猜它是一个创建一个单独的Controller / View每个关键字的例子(只是例子)... stack-overflow / computer-questions /数字时钟/然后是这些Views

中的内容

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

1 个答案:

答案 0 :(得分:2)

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

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

您的捆绑过程应在layout.phtml文件中完成。如果您正确使用了一些placeholder helpers 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将从库/ My / Custom / Class.php自动加载该类,这样你就不必在任何地方包含或要求它。通过仅在需要时对其进行实例化,可以节省在不需要时始终包含它的过程。

对于您的登录过程,我会创建一个操作来处​​理登录。它可以在专用控制器中,或者您可以找到一个适当的控制器来包含登录过程(例如IndexController)。您可以使用View Partial包含在您的布局中以显示登录表单,它总是指向您的登录操作来处理登录,您可以使用隐藏值将用户重定向到控制器并执行操作如果你愿意,请登录。

至于你的SEO网址,自定义路线可能在你的情况下很有用,或者你可以只构建你的URL,所以大多数SEO只是URL参数。获取网址http://yoursite.com/product/view/category/Digital-Clocks/cid/1234。产品是控制器,视图是动作,参数类别是数字时钟,而cid(类别ID)是1234.您可以使用自定义路径获得更短,更友好的URL。

希望有所帮助。