链接到另一个动作

时间:2012-09-01 22:33:03

标签: php .htaccess zend-framework hyperlink zend-framework-routing

我没有看到zend框架。我有一个链接到控制器的视图,home,

这样:

application>controllers>HomeController.php

application>views>scripts>home>index.phtml

在index.phtml页面中,我有一个指向同一控制器中某个动作的链接:

application>views>scripts>home>add.phtml

链接的代码是:

<a href="../application/controllers/home/add">add</a>

这不仅不起作用,而且我确信它不是在zend框架中执行此操作的最佳方式。

请注意我正在使用wamp

http://localhost/sites/url/public/home/add

使用时:

<?php
    echo '<a href="' . $this->url(array('controller' => 'home', 'action' => 'add')) . '">Add Job</a>';  
?>

我收到此错误消息:

Message: Invalid controller specified (sites)

这是我的htaccess中的最新内容

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

3 个答案:

答案 0 :(得分:3)

使用url helper:

http://framework.zend.com/manual/en/zend.view.helpers.html

<a href="<?php echo $this->url(array('controller' => 'index', 
                                     'action' => 'index', 
                                     'module' => 'module1')); ?>" title="test">

<强>更新

这是您的.htaccess应该如何:

SetEnv ENVIRONMENT development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt)$
RewriteRule ^.*$ index.php [NC,L]

答案 1 :(得分:2)

在ZF中使用相对和绝对链接时,它与ZF外部的工作方式非常相似 除了所有请求通过index.php路由,所以你实际上没有路由到目录,你只是告诉路由器链接的位置:

<a href="/home/add">add</a>

<a href="http://mysite.com/home/add">add</a>

url helper将是执行此操作的首选方法,应该可以使用。在你的情况下,我怀疑localhost路径操作系统会给你的网址造成困难,我知道它总是与我的网站有关。

为每个项目设置vhost将使此问题消失。如果您需要有关vhost设置的帮助,可以在SO上找到一些很好的资源。

http://blog.srmklive.com/2010/12/27/how-to-create-virtual-hosts-using-zend-server-ce/

答案 2 :(得分:0)

您不必在链接中引用application文件夹,因为该文件夹可以位于htdocs / www / public_html文件夹之外。< / p>

该链接应如下所示:http://yourdomain.com/home/addhttp://localhost/home/add,具体取决于您安装应用的位置。

在我看来,最好的方法是使用$this->baseUrl()方法(仅适用于视图,而不是控制器),或者你可以在bootstrap.php中定义一个常量,它保​​存你的baseUrl。 / p>