我正在尝试转到我的控制器的编辑操作,但我没有成功。以下是我的 module.config.php 文件的内容。我正在使用Zend框架2.我是否需要在控制器中路由每个动作?
<?php
return array(
'controllers' => array(
'invokables' => array(
'Manager\Controller\Index' => 'Manager\Controller\IndexController',
),
),
'router' => array(
'routes' => array(
'manager' => array(
'type' => 'Literal',
'options' => array(
// Change this to something specific to your module
'route' => '/manager',
'defaults' => array(
// Change this value to reflect the namespace in which
// the controllers for your module are found
'__NAMESPACE__' => 'Manager\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// This route is a sane default when developing a module;
// as you solidify the routes for your module, however,
// you may want to remove it and replace it with more
// specific routes.
'default' => array(
'type' => 'Segment',
'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(
),
),
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'Manager' => __DIR__ . '/../view',
),
),
);
答案 0 :(得分:1)
假设您是新手,如果您正在处理某些CRUD的应用程序,则需要了解一些事项,我建议您必须按照ZF2 Skeleton应用程序或相册应用程序中的指导创建新模块,设置为您提供的是正确的,没有任何错误。
让我们假设您已经创建了一个新模块并且您正在处理新模块,并且您正确定义了所有路由,您必须要做的是将Module的名称包含到application.config.php文件中,此文件位于config文件夹下,如果您已经创建了一个bew模块,那么在本节中添加其名称
'modules' => array(
'ZendDeveloperTools',
'DoctrineModule',
'DoctrineORMModule',
'Application,
'newlyCreatedModule'
),
上面是我的1个文件的snipppet的一部分所以不要与它混淆。如需更多参考,请尝试关注ZF2的相册申请。 此外,您不需要在我们必须为每个模块提供的module.config.php文件中的ZF2处理的任何控制器中编写路由。
答案 1 :(得分:0)
可以使用[/:action]作为路径的一部分在您的控制器中路由操作。这将被映射到Controller中匹配相同名称的函数,例如在您的示例中../manager/foo将映射到fooAction函数,.. manager / index将映射到indexAction函数等
通常(至少在我看过的例子中)要编辑的记录的ID作为url中的参数传递。例如。 example.com/manager/edit/1
如果这是你想要达到的目的,你就错过了路线“[/:id]”中的一块(见下面的代码)
将此作为路由器的简化版本(module.config.php)
<?php
namespace Manager;
return array(
'controllers' => array(
'invokables' => array(
'Manager\Controller\Index' => 'Manager\Controller\IndexController',
),
),
'router' => array(
'routes' => array(
'manager' => array(
'type' => 'segment',
'options' => array(
'route' => '/manager[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Manager\Controller\Index',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'Manager' => __DIR__ . '/../view',
),
),
);
还要确保在IndexController类“IndexController.php”中有一个编辑功能,例如
public function editAction()
{
//Some code to edit the record....
}
以及视图目录中的“edit.phtml”文件
答案 2 :(得分:0)
您设置路线的方式如下:
/manager[/:controller[/:action]]
这意味着,您要查找的网址可能是:
/manager/manager/edit
您需要了解儿童路线仅仅是当前路线定义的附录。那么你可以做的就是@Finbarr建议的,或者你选择嵌套路线,它们会更快一点,看起来像这样:
'manager' => array(
'type' => 'Zend\Mvc\Http\Literal',
'options' => array(
'route' => '/manager',
'defaults' => array(
'controller' => 'Manager\Controller\Index',
'action' => 'index'
)
),
'may_terminate' => true,
'child_routes' => array(
'add' => array(
'type' => 'Zend\Mvc\Http\Literal',
'options' => array(
'route' => '/add'
),
'defaults' => array(
'action' => 'add',
),
),
'edit' => array(
'type' => 'Zend\Mvc\Http\Segment',
'options' => array(
'route' => '/edit[/:id]',
'defaults' => array(
'action' => 'edit',
),
'constraints' => array(
'id' => '\d+',
),
)
),
)
)
注意所做的不同。路由manager
和add
都是Literal
类型。这意味着那些网址从未附加任何参数。他们总是可以QueryParameters
,但RouteParameters
不会对他们有效。
然后你得到你的edit
- 路线。现在这个类型为Segment
,意味着有一个部分,一个段,是可变的。此外,该路线由/edit
作为前缀,因此现在,完整网址至少为/manager/edit
,并带有可选的ID /manager/edit[/1234]
。是否可以选择ID。如果您不希望它是可选的,只需删除它周围的括号并创建如下的路径定义:'route' => '/edit/:id'
,但我个人喜欢在没有附加ID的情况下使用'edit-index'。
答案 3 :(得分:0)
谢谢你们,我终于得到了它的工作。我在module.config.php中的代码与Finbarr的答案中的代码完全相同。这是再次。
namespace Manager;
return array(
'controllers' => array(
'invokables' => array(
'Manager\Controller\Manager' => 'Manager\Controller\ManagerController',
),
),
'router' => array(
'routes' => array(
'manager' => array(
'type' => 'segment',
'options' => array(
'route' => '/manager[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Manager\Controller\Manager',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'manager' => DIR . '/../view',
),
),
);