找不到PostsController :: index() - CakePHP

时间:2014-01-02 17:35:25

标签: php apache cakephp wamp autoload

我正试图抓住cakephp。所以我开始使用cakephp演示博客应用程序。我按照本教程的前几个步骤进行操作,当我尝试加载posts控制器时,它说

Missing View
Error: The view for PostsController::index() was not found.

Error: Confirm you have created the file: T:\Project Folders\NetBeans\cakeBlog\app\View\Posts\index.ctp

我在stackoverflow,cakephp论坛甚至googlegroups中搜索过很多关于这个问题,但是没有一个解决方案似乎对我有用。发布的大部分解决方案如下:

  1. 检查mod_rewrite是否已启用 - 是的我启用了它。

  2. 检查您是否将index.ctp命名为index.ctp而不是index.cpt,Index.ctp或任何其他变体。 - 是的我已将索引放置如下app / views / Posts / index.ctp(使用netbeans向导)

  3. 使用标签代替php短标签 - 我使用传统的标签

  4. 开发环境

    Web服务器 - WAMP 我创建了一个名为cakeblog的别名,并将其指向cakephp_folder/app/webroot/

    cakeblog.conf

    Alias /cakeblog/ "T:\Project Folders\NetBeans\cakeBlog\app\webroot/" 
    
    <Directory "T:\Project Folders\NetBeans\cakeBlog\app\webroot/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
            Order allow,deny
        Allow from all
    </Directory>
    

    应用程序/根目录/ htaccess的

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /cakeblog
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

    我还加载了本地化和debugkit插件。我只是将已安装的文件夹放入app / plugin并在bootstrap.php中添加以下内容

    bootstrap.php中

    CakePlugin::load('DebugKit'); //Loads a single plugin named DebugKit
    CakePlugin::load('Localized');
    

    core.php中

    Configure::write('debug', 1);
    

    我能够启动应用程序,我看到欢迎页面很好。我在startup.png中附上了它的快照

    startup

    现在,让我粘贴代码,我只需从教程中复制粘贴:

    应用/模型/ post.php中

       <?php
        class Post extends AppModel {
            //put your code here
        }
        ?>
    

    应用/控制器/ PostsController.php

    <?php
    
      class PostsController extends AppController {
        //put your code here
        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);
        }
    }
    
    ?>
    

    应用/视图/页/帖子/ index.ctp

    <!-- 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>
    

    请检查附件output.png,查看我收到的http://localhost/cakeblog/posts输出的快照:

    output

2 个答案:

答案 0 :(得分:3)

更改目录app / View / Pages / Posts / to app / View / Posts /

每个控制器都有自己的dir和视图文件。

答案 1 :(得分:0)

视图文件存储在/ app / View /中,以使用这些文件的控制器命名的文件夹中存储,并以与其对应的操作命名。在您的示例中,Post控制器的“index()”操作的视图文件通常位于/app/View/Posts/index.ctp中。