0

私は初めて CakePHP を学ぼうとしています (私は通常、PHP を直接コーディングするだけです)。彼らがホストする「公式」ブログチュートリアルから始めています: http://book.cakephp.org/1.3/en/The -マニュアル/チュートリアル-例/Blog.html

これまでのところ、仮想ホスト (OS X 10.8.2 上) をセットアップし、CakePHP のデフォルトのインデックス ページを使用して、データベースから正しく読み取っていることを確認しました。 app/tmp フォルダーは Apache に対して再帰的に書き込み可能です。

最初の投稿ビューがセットアップされた直後にブログをフォローしようとすると問題が発生し、「www.example.com」をローカル サーバー名に調整して、「cakeblog/posts/index」で投稿を表示できるようになったと表示されます。 '。なんらかの mod_rewrite の問題があると確信していますが、何が原因かわかりません。これが発生したときの私のApacheエラーログは次のとおりです。

[Thu Feb 14 09:18:10 2013] [error] [client 127.0.0.1] File does not exist: /Users/bailey/Sites/cakeblog/posts

[Thu Feb 14 09:18:10 2013] [error] [client 127.0.0.1] File does not exist: /Users/bailey/Sites/cakeblog/favicon.ico

/Users/bailey/Sites/cascade/extranet-cake/app/webroot の webroot フォルダーにファビコンが存在することはわかっています。ルーティング権を理解していれば、cakeblog/posts/indexPost PostsController のコントローラーで、/index が PostsController "index()" のアクション/メソッドである必要があります。それで、コントローラーを認識していないようですか?

ブログチュートリアルに従ってセットアップしたコードは次のとおりです。

(アプリ/モデル/Post.php):

<?php

    /*
        Model: represents a data model (object).
            Examples -> a blog, a post, a comment on a post
    */
    class Post extends AppModel
    {

    }

?>

(アプリ/コントローラー/PostsController.php):

<?php
    /*
        Plays with Posts Model and gets work done.

        - function "foo()" means that the function is accessed by
            going to DOMAIN/posts/foo
    */
    class PostsController extends AppController
    {
        public $helpers = array('Html', 'Form');

        // An action!
            // www.example.com/posts/index => listing of all posts
        /*
            Sets the view variable called ‘posts’ equal to the return 
            value of the find('all') method of the Post model.
        */
        public function index()
        {
            $this->set('posts', $this->Post->find('all'));
        }
    }

?>

(アプリ/ビュー/投稿/index.ctp):

<!-- /app/View/Posts/index.ctp -->

    <h2> Blog Posts </h2>
    <table>
        <tr>
            <th> ID </th>
            <th> Title </th>
            <th> Date Created </th>
        </tr>
        <!-- Output the actual posts -->
        <?php
            foreach ($posts as $post)
            {
                /* Data ~ $post[ModelName][VariableName] */
                $id = $post['Post']['id'];
                /*
                    "$this->Html" ~ a Helper
                        link() generates an HTML link with given title and URL
                */
                $titleLink = 
                    $this->Html->link($post['Post']['title'],
                                        array('controller' => 'posts', 'action' => 'view', $post['Post']['id']));

                $dateCreated = $post['Post']['created'];


                $out = "<tr>
                            <td>$id</td>
                            <td>
                                $titleLink
                            </td>
                            <td>$dateCreated</td>
                        </tr>";

                echo $out;
            }

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

私が実際に CakePHP を見たのはこれが初めてであり、mod_rewrite の問題を疑う状況的な理由を除いて、他のどの投稿でも解決策を見つけることができません。私が見逃しているものについて誰かアイデアがありますか? リクエストに応じて、httpd.conf ファイルも投稿できます。

4

1 に答える 1

0

[解決済み]

ばかげた間違い -- webroot として app/webroot 以外のサブフォルダーを使用していたことが判明しました。これを変更したら、うまくいきました。

デフォルトとは異なる webroot を使用したい場合の代替手段は、上記のコメントで JeremyHarris によって提供され、CakePHP ドキュメントでサポートされています。

http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Installation.html

助けてくれてありがとう、みんな!

于 2013-02-27T01:45:56.153 に答える