2

こんにちは、私のコードはCakePHPフレームワークで機能しておらず、エラーメッセージが表示されています。

URL:

http://domainname.com/About/param1/param2

コード:

class AboutController extends AppController {

    public $name = 'About';
    public $helpers = array('Html');

    public function index($arg1, $arg2)
    {
        print_r($this->request->params['pass']);
        $this->set('title_for_layout','Sarasavi Bookshop - About Sarasavi Bookshop');
        $this->set('nameforfiles','about');
    }
}

エラーメッセージ:

Missing Method in AboutController    
Error: The action param1 is not defined in controller AboutController
Error: Create AboutController::param1() in file: app\Controller\AboutController.php.

<?php
class AboutController extends AppController {


    public function param1() {

    }

}

Notice: If you want to customize this error message, create app\View\Errors\missing_action.ctp

関数を作成した後、param1取得できますが、別のアクションを作成せずに、関数で取得param2する必要があります。param1param2index

助けてください、ありがとう

4

2 に答える 2

3

http://domainname.com/About/index/param1/param2にアクセスすると、元のコードが機能します。

私が想定しているように、URLにを含めたくない場合はindex、ルートを定義する必要があります。

これをルートに追加します。

Router::connect(
    '/About/*',
    array('controller' => 'About', 'action' => 'index')
);

アクションを指定していないが、アクションに移動するためのパラメーターがあるリクエストを自動的にルーティングしますindex。ただし、新しいアクションのルートを追加してAbout、それらのリクエストがデフォルトでインデックスに登録されないようにする必要があります。

于 2013-02-20T10:26:19.120 に答える
2

次のように、アクション名 (インデックス) を指定せずにこの URL にアクセスする可能性があります。

/について/param1/param2

Cake はコントローラー名の後にアクション名が表示されることを想定しているため、これは機能しません。この場合、param1 はアクション名として扱われます。URLでアクションにアクセスできます

/について/インデックス/param1/param2

この状況を克服するには、ルーターに新しいルールを作成します。

Router::connect(
    '/about/:param1/:param2',
    array('controller' => 'about', 'action' => 'index'),
    array('param1', 'param2')
);
于 2013-02-20T10:32:46.860 に答える