0

私はCakePHPを理解しようとしています。私は以前にMVCパターンを使用したことがあり、そのアイデアに精通しています。CakePHPの2.*バージョンのブログチュートリアルに従おうとしましたが、うまくいきません。

に移動するとhttp://localhost/posts/index、次のように表示されます。

見つかりません

要求されたURL/Postsがこのサーバーで見つかりませんでした。

ロードするだけですべて問題ないように見えますhttp://localhost/

私が得られない他のことは、コントローラーがどのように呼び出しているかです: $this->Post->find(’all’));

findPostモデルで呼び出されるメソッドはありません。モデルは完全に裸です:

class Post extends AppModel {
}

どうしたらいいのかわからない。フレームワークはfindメソッドを生成しますか、それともチュートリアルの記述でその非常に重要な部分が省略されていますか?

編集-詳細 PostsControllerというフォルダーapp/Controllerにコントローラーがあります。

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 に慣れていません...

Ok...

質問に戻る:

「Post」コントローラーと「index」アクションが必要です。

モデルを「使用」していることを確認してください。次のようにアクションから呼び出すこともできます。

$this->loadModel('Post');

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

そしてあなたの見解で

する:

<?php pr($variable) ?>

必要なのは「短期的な」魚ではなく、自分で釣りをする能力です... 上記の例は、CakePHP の動作を理解するのに役立ちます。

質問?:)

EDIT:mod-rewriteに問題があります。それだけです!

これを行う:

開けるapp/Config/core.php

行を見つけてコメントを外します。

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

すべてのドキュメントルートディレクトリ、アプリ差分、ウェブルートディレクトリから.htaccessをすべて削除します...

解決しましたか?

于 2013-03-11T02:39:47.443 に答える
1

最初の問題は mod_rewrite の問題のように思えます。クックブックのURL 書き換えの章を確認してください。

フレームワークは find メソッドを生成しますか、それともチュートリアルの記述で非常に重要な部分が省略されていますか?

いいえ、いいえ。これは単純なPHP 機能findです。継承階層に従って、メソッドがどこから来たのかを見つけるだけです: Postextends AppModelextends ModelAPIを確認すると、モデルが継承するメソッドがModel定義されていることがわかります。findPost

于 2013-03-11T06:12:55.987 に答える