나는 토마스 Fejfar 비슷한 않았다;이 도움이
<?php
class FunkceController extends Controller_Crud
{
protected $_url = '/admin/funkce/';
protected $_modelClass = 'Admin_Functions';
protected $_formClass = 'Form_Admin_Functions';
protected $_filterFormClass = 'Form_Admin_FilterFunctions';
protected $_viewKey = 'funkce';
protected $_title = 'Funkce';
}
희망 : 다음
<?php
abstract class Controller_Crud extends Controller
{
/* definované v dalších třídách */
protected $_viewKey = '';
protected $_url = 'admin/';
protected $_modelClass;
protected $_formClass;
protected $_filterFormClass = null;
protected $_title = 'Untitled';
/* pro vnitřní potřebu */
protected $_model;
protected $_form;
protected $_filterForm;
private $_defaultViewKey = 'crud';
/*
* Inicializace třídy, vytvoření instancí modelů a formulářů
* @see Tul/Controller/Tul_Controller_Admin#init()
*/
public function init()
{
parent::init();
$this->_model = new $this->_modelClass();
$this->_form = new $this->_formClass();
$this->view->indexUrl = $this->_url;
$this->view->viewKey = $this->_viewKey;
$this->view->title = $this->_title;
}
public function postDispatch()
{
// Po provedení akce je nastaven titlek
$this->view->headTitle($this->_title);
}
/**
* základní akce zabezpečující výpis záznamů a filtrování
* @return void
*/
public function indexAction()
{
if(null !== $this->_filterFormClass){
$this->_filterForm = new $this->_filterFormClass;
}
$filter = null;
if(null !== $this->_filterFormClass){
if($this->_getParam('filter') && $this->_filterForm->isValid($this->_getAllParams())){
$filter = $this->_filterForm->getValues();
}
$this->_filterForm->populate($this->_getAllParams());
}
/* @var Tul_Paginator */
$paginator = $this->_model->getAllPaginator($filter);
$paginator->setCurrentPageNumber($this->_getParam('page',1));
$this->view->data = $paginator;
$this->view->form = $this->_filterForm;
}
/*
* Načte ID záznamu a pokud není nalezeno přesměruje s chybovou hláškou na hlavní stránku
* @see Tul/Controller/Tul_Controller_Admin#getId()
*/
public function getId()
{
$id = $this->_getParam('id', false);
if(false === $id){
$this->addFlashMessage('error','Neplatné ID.');
$this->_gotoUrl($this->_url);
}
return $id;
}
/**
* akce pro přidání nového záznamu
* @return void
*/
public function pridatAction()
{
$this->view->headTitle('Přidat');
if ($this->_request->isPost()) {
if ($this->_form->isValid($_POST)) {
$data = $this->_form->getValues();
try {
$this->_beforeAdd($data);
$result = $this->_model->insert($data);
$this->_afterAdd($data, $result);
$this->addFlashMessage('success','Úspěšně přidáno. ');
} catch (Exception $e){
$this->addFlashMessage('error','Došlo k chybě při přidávání:<br />' . htmlspecialchars($e->getMessage()));
}
$this->_gotoUrl($this->_url);
} else {
$this->_form->populate($_POST);
}
}
$this->view->form = $this->_form;
$this->_renderView('pridat.phtml');
}
/**
* Akce pro smazání záznamu
* @return void
*/
public function smazatAction()
{
$id = $this->getId();
try{
$this->_beforeDelete($id);
$result = $this->_model->delete($this->_model->quoteInto('id = ?',$id));
$this->_afterDelete($id, $result);
$this->addFlashMessage('success','Úspěšně smazáno. ');
} catch (Exception $e){
$this->addFlashMessage('error','Došlo k chybě při mazání:<br />'.htmlspecialchars($e->getMessage()));
}
$this->_gotoUrl($this->_url);
}
/**
* akce pro úpravu záznamu
* @return void
*/
public function upravitAction()
{
$this->view->headTitle('Upravit');
$id = $this->getId();
$item = $this->_model->getById($id);
if ($this->_request->isPost()) {
if ($this->_form->isValid($_POST)) {
$data = $this->_form->getValues();
try {
$this->_beforeUpdate($data, $item);
$result = $this->_model->update($data, $this->_model->quoteInto('id = ?',$id));
$this->_afterUpdate($data, $result);
$this->addFlashMessage('success','Úspěšně upraveno. ');
} catch (Exception $e){
$this->addFlashMessage('error','Došlo k chybě při úpravě:<br />'.htmlspecialchars($e->getMessage()));
}
$this->_gotoUrl($this->_url);
} else {
$this->_form->populate($_POST);
}
} else {
$this->_form->populate((array)$item);
}
$this->view->form = $this->_form;
$this->_renderView('upravit.phtml');
}
/**
* Pokud existuje načte pohled zděděné třídy, pokud neexistuje použije interní
* @param $name string název pohledu
* @return void
*/
private function _renderView($name)
{
$completeName = $this->_viewKey . '/' . $name;
/* @var Zend_View_Abstract */
foreach ($this->view->getScriptPaths() as $dir) {
if (is_readable($dir . $completeName)) {
return $this->renderScript($completeName);
}
}
return $this->renderScript($this->_defaultViewKey . '/' . $name);
}
/**
* Metoda, která je zavolaná těsně před přidáním záznamu.
* Umožňuje upravit data podle potřeby před vložením do databáze.
* Vyhozením vyjímky přidání záznamu skončí chybou
* @param $data array data, která budou přidána
* @return void
*/
protected function _beforeAdd(&$data){}
/**
* Metoda, která je zavolaná těsně po přidání záznamu.
* Umožňuje upravit data podle potřeby ještě po vložení do databáze.
* Vyhozením vyjímky přidání záznamu skončí chybou
* @param $data array data, která budou přidána
* @param $result mixed primární klíč přidaného záznamu
* @return void
*/
protected function _afterAdd(&$data, $result){}
/**
* Metoda, která je zavolaná těsně před úpravou záznamu.
* Umožňuje upravit data podle potřeby ještě před úpravou v databázi.
* Vyhozením vyjímky uprava záznamu skončí chybou
* @param $data array data, která budou upravena
* @param $item mixed původní data
* @return void
*/
protected function _beforeUpdate(&$data,$item){}
/**
* Metoda, která je zavolaná těsně po úpravě záznamu.
* Umožňuje upravit data podle potřeby po úpravě v databázi.
* Vyhozením vyjímky uprava záznamu skončí chybou
* @param $data array data, která budou upravena
* @param $result integer počet ovlivněných záznamů
* @return void
*/
protected function _afterUpdate(&$data,$result){}
/**
* Metoda, která je zavolána před smazáním záznamu.
* Vyhozením vyjímky smazání záznamu skončí chybou
* @param $id id mazaného záznamu
* @return void
*/
protected function _beforeDelete($id){}
/**
* Metoda, která je zavolána po smazání záznamu.
* Vyhozením vyjímky smazání záznamu skončí chybou
* @param $id id mazaného záznamu
* @param $result počet smazaných řádků
* @return void
*/
protected function _afterDelete($id, $result){}
}
과) 구체적인 구현, 일부 버그가있을 수 있습니다 기본 CRUD 컨트롤러 및 CRUD 메서드가있는 기본 모델 클래스가 있습니다. 기본 CRUD 템플릿의 모든 콘텐츠 유형에 사용할 수있는 일반보기 스크립트를 사용할 수도 있습니다.
각 컨트롤러에는 필요한 부분을 변경하기 위해 상단에 몇 개의 변수 만 있으면됩니다.
-object, 개체가 디렉토리 경로와 같은 환경에 의해 결정되는 경우 또는 메서드의 매개 변수로 전달할 때 – ajreal
@AJreal은 컨트롤러 동작이며, 실제로는 나는 내 컨트롤러에 개인 메소드를 만들고 PHP 마법 ($ className = 'Application_Model_')을 사용하여 일종의 템플릿 함수를 만들려고한다. $ object_type; $ o = 새 $ className(); – RageZ