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) {