CodeIgniterを使用してさまざまなフォームタイプにアクセスしています
私はこのようなディレクトリを持っています:
-views
--resources
---app1
----form.php
---app2
----form.php
---app3
----form.php
---app4
----form.php
私のクラスは現在非常に基本的ですが、これは
class Resources extends CI_Controller {
public function app1($page = '')
{
$data['title'] = ucfirst($folder); // Capitalize the first letter
$this->load->view('templates/header', $data);
$this->load->view('resources/app1/form.php', $data);
$this->load->view('templates/footer', $data);
}
public function app2($page = '')
{
$data['title'] = ucfirst($folder); // Capitalize the first letter
$this->load->view('templates/header', $data);
$this->load->view('resources/app2/form.php', $data);
$this->load->view('templates/footer', $data);
}
}
これは非常に冗長であり、すべてのフォームにメソッドを用意する必要はありません。ただし、新しいメソッドを作成せずにディレクトリを変更する方法が見つかりません。理想的には、$ pageのような引数として新しいディレクトリを渡すことができるメソッドが必要です。例えば:
class Resources extends CI_Controller {
public function view($page = '')
{
$data['title'] = ucfirst($folder); // Capitalize the first letter
$this->load->view('templates/header', $data);
$this->load->view('resources/'. $folder. '/form.php', $data);
$this->load->view('templates/footer', $data);
}
}
ただし、CodeIgniterではこれが許可されていないようです。誰かがこれが機能する方法を提案できますか?
実際にできます。
フォルダbase_controller
内に作成してcore
呼び出し、MY_Controller.php
拡張CI_Controller
してメソッドを作成し、任意のMY_Controller
名前を付けrender, render_view, view
ます。その関数内で、パーシャルとテンプレートをレイアウトし、ビューを渡すだけです。application/core/MY_Controller.php
class MY_Controller extends CI_Controller {
protected $data = array();
public function render_view($view = '')
{
$this->load->view('templates/header', $this->data);
$this->load->view('view_path/'. $view, $this->data);
$this->load->view('templates/footer', $this->data);
}
}
そして、あなたのアプリケーション内のすべてのコントローラのためにそれを拡張させるMY_Controller
と、ビューの使用をレンダリングしたい時はいつでもrender_view($view)
、あなたはあなただheader
とfooter
プリロードし、それはそれDRYを作る最も簡単な方法です。
最後に、コントローラーでは次のようになります。
class Resources extends CI_Controller {
public function app1($page = '')
{
// $data array in my_controller, it will automatically be passed inside render_view
$this->data['title'] = ucfirst($folder); // Capitalize the first letter
$this->render_view('app1/form');
}
public function app2($page = '')
{
$this->data['title'] = ucfirst($folder); // Capitalize the first letter
$this->render_view('app2/form');
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加