Cakephp配置文件视图查找错误的控制器
我有一个用于编辑以前存在的用户配置文件的函数这里是控制器Cakephp配置文件视图查找错误的控制器,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,我有一个用于编辑以前存在的用户配置文件的函数这里是控制器 class PeoplesController extends AppController { public $name = "peoples"; public $helpers = array('Html', 'form', 'Js'); public $components = array('RequestHandler'); public function viewPerson($id = NUL
class PeoplesController extends AppController
{
public $name = "peoples";
public $helpers = array('Html', 'form', 'Js');
public $components = array('RequestHandler');
public function viewPerson($id = NULL) {
$this->set('person', $this->people->read(NULL, $id));
}
public function editPerson($id = NULL)
{
if(empty($this->data)) {
$this->data = $this->people->read(NULL, $id);
}
else {
if($this->people->save($this->data)) {
$this->Session-setFlash('The profile has been updated');
$this->redirect(array('action'=>'viewPerson', $id));
}
}
}
}
视图输出预先填充了先前数据的表单
<h2>Edit Profile</h2>
<?php
echo $this->Form->create('people', array('action'=>'edit'));
echo $this->Form->input('firstName');
echo $this->Form->input('secondName');
echo $this->Form->input('addressOne');
echo $this->Form->input('addressTwo');
echo $this->Form->input('city');
echo $this->Form->input('county');
echo $this->Form->input('country');
echo $this->Form->input('postCode', array(
'label' => 'Zip Code',
));
echo $this->Form->input('dob', array(
'label' => 'Date of birth',
'dateFormat' => 'DMY',
'minYear' => date('Y') - 70,
'maxYear' => date('Y') - 18,
));
echo $this->Form->input('homePhone');
echo $this->Form->input('mobilePhone');
echo $this->Form->input('email', array(
'type' => 'email'
));
$goptions = array(1 => 'Male', 2 => 'Female');
$gattributes = array('legend' => false);
echo $this->Form->radio('gender',
$goptions, $gattributes
);
echo $this->Form->input('weight');
echo $this->Form->input('height');
echo $this->Form->input('referedBy');
echo $this->Form->input('id', array('type'=>'hidden'));
echo $this->Form->end('Edit Profile');
?>
但是当我点击submit时,url更改被提交到
http://localhost/Cake/people/edit/2
所以我改变了
echo $this->Form->create('people', array('action'=>'edit'));
到
我尝试将create函数的第一个参数改为people,但由于它指的是模型,而不是控制器,所以应该是people,所以我将它改回了原来的值
我得到的错误是
Error: PeopleController could not be found.
因此,它正在寻找错误的控制器,但我不确定在哪里寻找控制器
我确实曾经将控制器类名取消资本化,但是我遵循了一些关于约定的建议并将其资本化,但是我以前使用的其他函数仍然可以正常工作,所以我认为这不是问题所在
你知道为什么要更改url并查找错误的控制器吗?表单操作被设置为编辑操作
无论当前url如何-表单操作将被覆盖为显式操作:
echo $this->Form->create(
'people',
array('action'=>'edit') // <-
);
指定表单操作url的步骤
使用url
键,而不是只更改操作的action
键:
echo $this->Form->create(
'people',
array(
'url'=>'/submit/here/please/' // <- or specify as an array
)
);
在问题中,情况并非如此,模型是复数,控制器是令人困惑的复数(实际上可以使用people,但它的意思是)
不要不必要地定义属性
在这个问题上,还有一个问题:
class PeoplesController extends AppController
{
public $name = "peoples";
这充其量也没什么作用,但由于name属性被定义为小写,而cake希望它是CamelCased,这可能会导致不一致的行为
最好遵循惯例,命名控制器人员
,型号人员
,并且根本不指定名称
不要重复你自己
并遵循惯例,以获得更轻松的乘坐体验
函数命名与单词“person”重复
而不是:
public function viewPerson($id = NULL) {
(那么……代码使用person、people和people?)
建议使用:
public function view($id = NULL) {
毕竟,在人员控制器中,还有什么其他类型的东西可以查看(如果答案是很多东西,那么这是另一个需要解决的问题)
这使得URL变得简单(/peoples/view/1
,而不是/peoples/viewPeople/1
),并且使代码本身更易于阅读(peoplecontroller::view
而不是peoplecontroller::viewPerson
)
如果您不想更改操作方法的名称,那么使用它们至少意味着URL的大小写是一致的,而不是
/lower\u case\u controller/camelCasedAction/args
当Iw刚开始时,我在阅读cakes约定之前就已经创建了表,所以我就这样做了。其他人向我建议,这可能是问题所在,如果这很好,但如果是这样,我想知道为什么其他功能可以正常工作?谢谢,我将进行这些更改,以更好地遵循约定,使人/人的事情不那么混乱,并看看我如何再次上岸,我按照惯例修改了thigns并重新命名了它,使它更有意义,因此我不得不在我的其他函数中修改了很多东西,令人惊讶的是,我现在比仅仅遵循教程更好地理解了它是如何流到一起的
Model | Controller
Singular Plural
Person People
class PeoplesController extends AppController
{
public $name = "peoples";
public function viewPerson($id = NULL) {
public function view($id = NULL) {