我正在创建一个简单的CRUD来添加类别的链接.每个类别都有一个id.我有一个视图,列出了某个类别的所有链接.在该视图中,我有一个添加表单的链接,它是:
http://example.com/link/add/categoryId/3
Run Code Online (Sandbox Code Playgroud)
我目前使用以下语法在视图中构建该链接.
<?php echo $this->baseUrl();?>/link/add/categoryId/<?php echo $this->category['id']; ?>
Run Code Online (Sandbox Code Playgroud)
我认为使用Url View Helper可以更清洁.
<?php echo $this->url(array('controller'=>'link','action'=>'add','categoryId'=>$this->category['id'])); ?>
Run Code Online (Sandbox Code Playgroud)
但这给了我以下网址
http://example.com/link/add/id/3/categoryId/3
Run Code Online (Sandbox Code Playgroud)
..还有一个额外的"id/3".我阅读但没有完全理解Url View Helper的代码.怎么会有额外的id/3在那里?
谢谢!
@Fge给出了正确的答案,下面是我更新的完整语法.
echo $this->url(array('controller'=>'link','action'=>'add','categoryId'=>$this->category['id']),null,true);
Run Code Online (Sandbox Code Playgroud) 我有一个Rails 3帮助器,它需要生成可能在属性值中包含HTML实体的元素.例如:
content_tag(:input, nil, :type => 'button', :value => 'Redo ↻')
Run Code Online (Sandbox Code Playgroud)
我最终得到了这个:<input type="button" value="Redo ↻" />
但我想要的是:<input type="button" value="Redo ?" />.
如何告诉Rails不要在我的内容标记属性中转义HTML实体?
我正在使用Rabl在rake任务中生成XML输出:
xml = Rabl.render @listings, 'feeds/listings', :format => :xml
# do stuff with xml
Run Code Online (Sandbox Code Playgroud)
但是,我需要在引用的rabl视图文件中使用多个辅助方法,并且NoMethodError我会从这个问题的答案中得到一个正如我所期望的那样.
我尝试使用extends,并include在使用的rake任务,但该类我仍然得到的helper方法同样的错误:
require "#{Rails.root}/app/helpers/feeds_helper.rb"
class SerializeData
extends FeedsHelper
def perform
xml = Rabl.render @listings, 'feeds/listings', :format => :xml
# do stuff with xml
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法在这种方式生成的rabl视图文件中使用辅助方法?(或者至少在某种程度上我仍然可以将它们作为rake任务中的字符串渲染?)帮助器方法被用于许多次,以便按照固定的要求正确地格式化各种数据,因此很难完全删除它们.
我正在尝试访问视图助手中的服务定位器,以便我可以访问我的配置.我正在使用此视图助手进行递归功能,因此我不知道在哪里声明服务定位器.
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
use CatMgt\Model\CategoryTable as RecursiveTable;
class CategoryRecursiveViewHelper extends AbstractHelper
{
protected $table;
public function __construct(RecursiveTable $rec)
{
$this->table = $rec;
}
public function __invoke($project_id, $id, $user_themes_forbidden, $level, $d, $role_level)
{
$config = $serviceLocator->getServiceLocator()->get('config');
//So i can access $config['templates']
$this->__invoke($val->project_id, $id, $user_themes_forbidden, $level, $d, $role_level);
}
}
Run Code Online (Sandbox Code Playgroud)
我试过解决方案给这里链接
但它没有帮助,这样做是否可行?
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
use CatMgt\Model\CategoryTable as RecursiveTable;
use Zend\View\HelperPluginManager as ServiceManager;
class CategoryRecursiveViewHelper extends AbstractHelper
{
protected $table;
protected $serviceManager;
public function __construct(RecursiveTable $rec, ServiceManager $serviceManager) …Run Code Online (Sandbox Code Playgroud) 我正在Zend Framework中组建一个模块化应用程序,并且正在努力使模块特定的View Helpers加载.
我的目录结构是这样的......
application
---configs
---controllers
---forms
---layouts
---models
---modules
------user
---------controllers
---------forms
---------modules
---------views
------------filters
------------helpers
---------------currentUser.php
------------scripts
---------Bootstrap.php
---views
---Bootstrap.php
Run Code Online (Sandbox Code Playgroud)
基本上我想访问currentUser.php中包含的视图助手,但是当我放入时
<?php echo $this->currentUser(); ?>
Run Code Online (Sandbox Code Playgroud)
我收到一条错误,指出无法找到该文件.
我需要添加到配置文件中以加载这些帮助程序?
我的配置是这样的......
Autoloadernamespaces[] = "Zend_"
Autoloadernamespaces[] = "Default_"
Autoloadernamespaces[] = "User_"
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view[] =
resources.modules[] =
Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以创建视图助手文件,该文件将可用于命名空间中的所有视图?类似于application_helper.rb,但仅适用于给定的名称空间。
具体来说,我有一个名为“ office”的命名空间。我想设置一个视图助手,“办公室”名称空间中的任何视图都可以访问它。
谢谢。
我有一个项目,我有几个自定义属性和静态方法可用于Razor视图的基础WebPage类...即,我有......
<system.web.webPages.razor>
<pages pageBaseType="myNamespace.WebView">
</pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)
在我的web.config中.这很棒.但是,在我的帮助文件中,它使用现有的基类...
在这种情况下,如果我想访问其中一些方法/属性/ etc ...我必须调用该CurrentPage对象,将其强制转换为我的自定义基类对象,然后获取我想要的方法.为了使助手中的标记更简单,更清晰,我想只定义一些静态属性来获取相关数据......
我已经很好地完成了一个@functions{}块内的一些静态方法和属性,但我想覆盖暴露CurrentPage属性的基类,所以我默认在所有的帮助文件中都可以使用它,我赢了我必须重复代码......
看起来HelperPage实现了WebPageRenderingBase......
查看用于RazorPagesSection配置的MSDN文档,看起来没有其他地方可以修改它...
是否有一个类似的configSection,我可以定义,以覆盖HelperPage基本类型??? 这将是非常有帮助的.谢谢.
在ZF1中,我们在layout.phtml文件中使用partial
$this->partial('header.phtml', array('vr' => 'zf2'));
Run Code Online (Sandbox Code Playgroud)
我们如何在ZF2中做同样的事情?
我试图启用视图编译,以加快我的ASP.NET MVC3网站加载.我的网站托管在AppHarbor上.
但是,我的视图使用了App_Code文件夹中定义的MVC3视图助手.
当我尝试加载我的网站时,我得到:"目录'/ App_Code /'是不允许的,因为应用程序是预编译的."
如何停止将App_Code文件夹部署到Web服务器,但是仍然预编译了App_Code帮助程序?
我已经尝试将帮助程序更改为Content = None,但这会导致AppHarbor构建错误,因为在预编译期间无法找到帮助程序文件.
我有一个MVC4项目,我正在尝试创建一个帮助器.我添加了一个名为"App_Code"的文件夹,在该文件夹中我添加了一个名为MyHelpers.cshtml的文件.以下是该文件的全部内容:
@helper MakeButton(string linkText, string actionName, string controllerName, string iconName, string classes) {
<a href='@Url.Action(linkText,actionName,controllerName)' class="btn @classes">Primary link</a>
}
Run Code Online (Sandbox Code Playgroud)
(我知道有一些未使用的参数,我会在我修复之后再找到它们)
我"清理"并构建解决方案,没有错误.
在使用帮助程序的页面中,我添加了此代码.
@MyHelpers.MakeButton("Back","CreateOffer","Merchant","","btn-primary")
Run Code Online (Sandbox Code Playgroud)
当我尝试运行该项目时,我收到以下错误:
编译器错误消息:CS0103:当前上下文中不存在名称"Url"
我似乎找不到写这个的正确方法 - 我做错了什么?与我在网上看到的例子相比,它似乎是正确的吗?
view-helpers ×10
php ×2
appharbor ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
partials ×1
precompile ×1
rabl ×1
razor ×1
url ×1
xml ×1