0

我正在努力加快 CakePHP 的速度。我以前用过MVC模式,对这个想法很熟悉。我试图按照 CakePHP 的 2.* 版本的博客教程进行操作,但没有运气。

如果我导航到http://localhost/posts/index,我会看到:

未找到

在此服务器上找不到请求的 URL /Posts。

如果我只是加载,一切看起来都很好http://localhost/

我不明白的另一件事是控制器如何调用: $this->Post->find(’all’));

findPost 模型上没有调用任何方法。该模型完全裸露:

class Post extends AppModel {
}

我不知道该怎么做。框架是否生成了一个查找方法,或者教程的编写省略了其中一个非常重要的部分?

编辑 - 更多细节 在文件夹 app/Controller 中有一个控制器,名为 PostsController:

class PostsController extends AppController {
public $helpers = array(’Html’, ’Form’);

public function index() {
    $this->set(’posts’, $this->Post->find(’all’));
}

public function view($id = null) {

    if (!$id) {
        throw new NotFoundException(__(’Invalid post’));
    }

    $post = $this->Post->findById($id);

    if (!$post) {
        throw new NotFoundException(__(’Invalid post’));
    }

    $this->set(’post’, $post);
}       

}

/app/View/Posts/里面有一个索引视图

<!-- File: /app/View/Posts/index.ctp -->
<h1>Blog posts</h1>
<table>
<tr>
    <th>Id</th>
    <th>Title</th>
    <th>Created</th>
</tr>
<!-- Here is where we loop through our $posts array, printing out post info -->
<?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post[’Post’][’id’]; ?></td>
        <td>
            <?php echo $this->Html->link($post[’Post’][’title’],
            array(’controller’ => ’posts’, ’action’ => ’view’, $post[’Post’][’id’])); ?>
        </td>
        <td><?php echo $post[’Post’][’created’]; ?></td>
    </tr>
<?php endforeach; ?>

<?php unset($post); ?>
</table>

该模型如上面的原始帖子中所述。

在数据库中,我在教程中使用了以下数据:

/* First, create our posts table: */
CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
/* Then insert some posts for testing: */
INSERT INTO posts (title,body,created)
VALUES (’The title’, ’This is the post body.’, NOW());
INSERT INTO posts (title,body,created)
VALUES (’A title once again’, ’And the post body follows.’, NOW());
INSERT INTO posts (title,body,created)
VALUES (’Title strikes back’, ’This is really exciting! Not.’, NOW());
4

2 回答 2

2

我不知道该怎么做。框架是否生成了一个 find 方法,还是教程的编写省略了其中一个非常重要的部分?

是的,框架负责 ORM 部分..我猜你对这个“超级”新手..即使我是 cakephp 的新手......我只是 CakePHP 中的 5 个旧项目,所以即使我是新手......

行...

回到你的问题:

您需要有一个“发布”控制器和一个“索引”操作。

确保你“使用”模型,你也可以从这样的动作中调用它:

$this->loadModel('Post');

$this->set($variable, $this->Post->find('all'));

然后在你看来

做一个:

<?php pr($variable) ?>

需要的不是“短期”鱼,而是自己钓鱼的能力……我上面给出的示例将使您了解 CakePHP 的工作原理。

问题?:)

编辑:您对 mod-rewrite 有疑问,仅此而已!

做这个:

打开app/Config/core.php

找到该行并取消注释:

Configure::write('App.baseUrl', env('SCRIPT_NAME'));

从所有文档根目录、应用程序差异、webroot 目录中删除全部、.htaccess ...

解决了?

于 2013-03-11T02:39:47.443 回答
1

第一个问题听起来像是 mod_rewrite 的问题,请查看说明书中的URL 重写章节。

框架是否生成了一个 find 方法,还是教程的编写省略了其中一个非常重要的部分?

没有也没有。这是简单的PHP 功能,您只需遵循继承层次结构即可找到find方法的来源:Postextends AppModelextends Model。如果您检查API,您将看到Model定义了find您的Post模型继承的方法。

于 2013-03-11T06:12:55.987 回答