在ZF1中,您不必在URL中包含该模块; 如果未提供,则默认为...默认模块.如何在ZF2中实现这一目标?我已经使用了骨架应用程序来启动和运行,但似乎我总是需要包含模块名称,例如/application/controller/action.
我想我可以通过创建一个包含两个"占位符"的路线来解决这个问题; 控制器和操作,然后将默认模块设置为"应用程序".然后我会将其放入/config/autoload/global.php(或者可能/config/application.config.php),以便路由适用于我的所有应用程序.但是,我收到错误消息,即URL无法通过路由匹配,即使我将路由硬编码为类似的东西/user/index.
我试过下面的代码.
return array(
'router' => array(
'routes' => array(
'nomodule' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/:controller/:action',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*'
),
'defaults' => array(
'module' => 'Application' // Not sure of the syntax here
)
)
),
)
)
);
Run Code Online (Sandbox Code Playgroud)
正如我写了一个评论,我不知道如果我的问题是默认的语法,但我不这么认为作为同样的情况,如果我硬编码的路径,并删除所有默认值.我还试图根据骨架应用程序中的示例进行实验,但没有运气.我是以错误的方式去做的吗?有更好的方法吗?或者我只是犯了一个错误?
提前致谢.
编辑:要使代码生效,请参阅答案.为了说明如何它的工作原理,请阅读这篇文章.
我是 C++ 程序员,我是 C# 新手,我写了一个小程序来测试继承,所以这里是源代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lesson3_Class_inherit_
{
public class Personne
{
public string Name;
public int Age;
public Personne() { }
public Personne(string _Name, int _Age)
{
Name = _Name;
Age = _Age;
Console.WriteLine("Constrcut Personne Called\n");
}
~Personne()
{
Console.WriteLine("Destruct Personne Called\n");
}
};
class Humain : Personne
{
public string Langue;
public Humain(string _Name, int _Age,string _Langue)
{
Console.WriteLine("Constrcut Humain Called\n");
Name = _Name;
Age = _Age;
Langue =_Langue;
} …Run Code Online (Sandbox Code Playgroud) 在提交和验证我的Zend Framework 2表单时,我遇到的是奇怪的行为.我已将表格缩减为三个元素以证明我的意思,但问题也存在于其他元素中.
我有两个要素; 电子邮件和性别.我没有InputFilter为我的表单指定一个,所以我的逻辑告诉我我的表单是有效的.但是,当我提交表单并进行验证检查时,电子邮件和性别元素会Value is required and can't be empty出错.但是,我没有明确表示他们是必需的,也不能是空的.
我的电子邮件元素类型Zend\Form\Element\Email,我怀疑它可能与它有关,因为如果我改变它Zend\Form\Element\Text,一切都很好.但是,如果我想要一个不需要的电子邮件字段呢?
接下来,我的性别选择元素给了我同样的错误.我设置了空选项,但我认为这只是用于使用默认值,例如"选择您的性别",但它没有添加必需的约束.看来,如果我删除这个空选项,那么我不会收到此错误.这个错误也很奇怪的是,如果我不选择性别并提交我的表单,那么在回发的下拉列表中会选择不同的选项.在这种情况下,我使用空选项("选择您的性别")提交表单,但是在刷新表单时,所选选项将更改为"女性"."Female"选项的值为0,但是如果我将值更改为3,则可以正常工作.但是,如果我需要在其中一个选项中使用值0,该怎么办?也许它' 由类型转换或其他东西引起的.我真的不知道.
以下是我的代码.我写了一些评论,因此可能更容易理解.
表格类摘录:
// E-mail (generates "Value is required and can't be empty" - but what if the field should be optional? Where is this validator added?
$email = new Element\Email('email'); // If I change to "Element\Text", there are no problems
$email->setLabel('E-mail address');
$email->setLabelAttributes(array(
'for' => $email->getName(),
'class' => 'some class'
));
$email->setAttributes(array(
'id' => $email->getName(),
'placeholder' => …Run Code Online (Sandbox Code Playgroud) 在Zend Framework 2中发送电子邮件时,我想使用视图脚本模板,以便我可以利用各种电子邮件模板的布局.我的想法是,我有一个具有共享标记的布局,并在某处回应内容.究竟布局如何工作.为了实现这一点,我试图将一个子视图模型添加到我的布局视图模型并使用它来渲染它PhpRenderer.
public function someMethod() {
$child = new ViewModel();
$child->setTemplate('test-template');
$layout = new ViewModel();
$layout->setTemplate('email-layout');
$layout->addChild($child, 'content');
$phpRenderer = new \Zend\View\Renderer\PhpRenderer();
$phpRenderer->setCanRenderTrees(true);
$resolver = new \Zend\View\Resolver\TemplateMapResolver();
$resolver->setMap($this->serviceLocator->get('ViewTemplateMapResolver'));
$phpRenderer->setResolver($resolver);
$output = $phpRenderer->render($layout);
}
Run Code Online (Sandbox Code Playgroud)
布局视图脚本:
Hello from the e-mail layout script!
<?php echo $this->content; ?>
Run Code Online (Sandbox Code Playgroud)
发生的事情是只有布局的内容存储在布局视图脚本中$output和$this->content内部NULL.
我想要做的是将HTML存储在一个字符串中,以便我可以通过电子邮件发送它.我实例化一个子视图模型,它表示我想在布局中呈现的视图脚本.然后我实例化布局视图模型并添加子视图模型.然后我创建一个PhpRenderer并添加一个TemplateMapResolver它,以便它将使用模板映射解析模板.最后,我调用render的方法PhpRenderer,这需要ViewModel作为第一个参数.我已将两个模板添加到我的template_map配置中,并使用正确的名称和正确的路径正确设置模板映射.
问题是我在其render方法中没有看到任何子视图的处理.这让我想到如果我PhpRenderer错误地使用了这个类,也许这就是为什么它不起作用.我已经检查了嵌套视图模型的文档,我正在做同样的事情,除了不从控制器动作返回视图模型.如果我$layout从控制器动作返回,它可以工作.
如果我看Zend\View\View的渲染 …
我正在尝试使用Spring Security添加数据库查找的登录功能,我真的很挣扎.我想通过实现UserDetailsService界面来查找用户.我已经阅读了大量的文档和谷歌搜索了几个小时,但我仍然卡住了.我能找到的大多数示例都使用XML,因此我的问题可能与将它们转换为Java配置有关.
的UserDetailsService
@Service
public class AccountServiceImpl implements AccountService { // AccountService implements UserDetailsService
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
// The email variable is always ''
List<GrantedAuthority> authList = new ArrayList<>();
authList.add(new Role("ROLE_USER")); // Role implements GrantedAuthority
return new User("test@example.com", "password", true, true, true, true, authList);
}
}
Run Code Online (Sandbox Code Playgroud)
安全配置
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private LogoutSuccessHandler logoutSuccessHandler;
@Autowired
private AccountService accountService;
@Override
@Bean
protected AuthenticationManager authenticationManager() throws Exception …Run Code Online (Sandbox Code Playgroud) 我正在考虑使用布尔逻辑与我的bean验证使用Hibernate验证器在AND约束不足的情况下.我发现可以通过使用文档中描述的@ConstraintComposition注释创建新注释来更改此默认行为.该文档提供了以下示例.
@ConstraintComposition(OR)
@Pattern(regexp = "[a-z]")
@Size(min = 2, max = 3)
@ReportAsSingleViolation
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Constraint(validatedBy = { })
public @interface PatternOrSize {
String message() default "{org.hibernate.validator.referenceguide.chapter11." +
"booleancomposition.PatternOrSize.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
Run Code Online (Sandbox Code Playgroud)
使用这种@PatternOrSize验证约束意味着输入字符串或者小写或具有2和3之间的尺寸现在,这引发了几个问题:
AND和OR同时?我找不到任何暗示这是可能的东西,但也许我错过了一些东西.@Pattern和@Size约束动态化?因为否则我想我必须为我需要的每个参数组合定义一个新的注释.仅仅为了更改参数而定义一个新的注释@Size似乎不可行,但可能是必要的?先感谢您.
php ×3
java ×2
validation ×2
c# ×1
constructor ×1
inheritance ×1
spring ×1
spring-mvc ×1
zend-form ×1
zend-view ×1