0

私が投稿したコードは問題なく動作し、ページは正しく表示されます。

コントローラ:

class Articles extends Frontend_Controller {

    public function __construct() {
        parent::__construct();
        $this->homeMetaTags = $this->configOptionsModel->get(1);
        $this->bgimage = $this->configOptionsModel->get(2);
        $this->db->where('catid = "1"');
        $this->services = $this->articlesModel->get();
        $this->projects = $this->projectsModel->get();
    }

    public function displayArticle()
{

        $data['default_metatags'] = $this->homeMetaTags;
        $data['bgimage'] = $this->bgimage;
        $data['services'] = $this->services;
        $data['projects'] = $this->projects;
        $this->load->model('articlesModel');
        $artid = $this->uri->segment(3);
        $this->db->where('artid ='.$artid);
        $data['article'] = $this->articlesModel->get();
        $data['main_content'] = 'articles';
        $this->load->model('articlesImagesModel');
        $this->db->where('artid ='.$artid);
        $data['artimg'] = $this->articlesImagesModel->get();
    $this->load->view('frontEnd/template',$data);       
}
}

意見:

<?php echo $article[0]['title'];?>
<?php echo $article[0]['articletext'];?>

アドレス バーに次の URL が表示されます。

www.mysite.com/articles/displayArticle/3 ここまでは順調です。

しかし... アドレスバーに入力すると: www.mysite.com/articles/displayArticle/3546666

カスタム 404 エラー ページにリダイレクトされる代わりに、次のエラーが表示されます。

A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 0
Filename: frontEnd/articles.php
Line Number: 12

A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 0
Filename: frontEnd/articles.php
Line Number: 48

案の定、これらの 12 行目と 48 行目は、ビューのコードが配置されている 2 行です。

これらのエラーを表示する代わりに、誰かが存在しない ID を入力して 404 ページにリダイレクトされるようにしたいと思います。

よろしく、ゾラン

4

3 に答える 3

1
class Articles extends Frontend_Controller {

    public function __construct() {
        parent::__construct();
        $this->homeMetaTags     =   $this->configOptionsModel->get(1);
        $this->bgimage          =   $this->configOptionsModel->get(2);
        $this->db->where('catid',1);// What is this doing here. This should be in model
        $this->services         =   $this->articlesModel->get();
        $this->projects         =   $this->projectsModel->get();
    }

    public function displayArticle()
    {
        $this->load->model('articlesModel');
        $this->load->model('articlesImagesModel');

        $data['default_metatags']   =   $this->homeMetaTags;
        $data['bgimage']            =   $this->bgimage;
        $data['services']           =   $this->services;
        $data['projects']           =   $this->projects;

        $artid = $this->uri->segment(3);

        $this->db->where('artid',$artid);// What is this doing here. This should be in model

        $data['article']            =   $this->articlesModel->get();
        $data['main_content']       =   'articles';
        /*  What is it doing here */
        $this->db->where('artid ='.$artid);

        $data['artimg']             =   $this->articlesImagesModel->get();

        $this->load->view('frontEnd/template',$data);       
    }
}

あなたが電話しているときは、代わりに$this->articlesModel->get()戻ってき ていると思います。関数は、オブジェクトの配列ではなくオブジェクトを返しています。モデルをビューに変更するrow_array()result_array()row_array()result_array()

<?php echo $article['title'];?>
<?php echo $article['articletext'];?>

これはうまくいくはずです

于 2013-04-22T09:03:51.053 に答える
0

View Model Controller モデルを適切に使用するようにしてください。現在、コントローラーでデータベース アクセスを取得しています。これを見て始めることをお勧めします。 http://www.youtube.com/watch?v=mWsAruzW3Jw

とにかく、404 ページを表示するには、これを使用します。

show_404(); 

404 ハンドラ:

 /**
* 404 Page Handler
*
* This function is similar to the show_error() function above
* However, instead of the standard error template it displays
* 404 errors.
*
* @access public
* @return void
*/
 function show_404($page = '', $log_error = TRUE)
 {
  $_error =& load_class('Exceptions', 'core');
  $_error->show_404($page, $log_error);
  exit;
 }  
于 2013-04-22T09:06:08.477 に答える
0

1) コードをリファクタリングする必要があります。モデル コードは、(get 関数、where 関数) のようなコントローラーをいじってはいけません。いくつかの値を渡すことにより、モデル自体でこれを処理する必要があります。

2) この行で '$this->db->where('artid ='.$artid);' この関数を渡す前に $artid を検証する必要があります。

3) このようなエラー メッセージが表示された場合は、try catch ステートメントを使用して 404 ページを表示します。

4) 404 ページにリダイレクトする場合は、エラーを適切にログに記録して後で修正する必要があります。

5) 共通の機能が必要な場合は、ヘルパーに保持し、関数名を呼び出します。コンストラクト関数にコード全体を保持しないでください。これがベストプラクティスです。

他に何か必要な場合は、私に尋ねてください。ありがとう。これがお役に立てば幸いです。

于 2013-04-22T09:08:20.077 に答える