【发布时间】:2013-12-25 14:57:40
【问题描述】:
class FrontController extends AbstractActionController {
public function indexAction() {
$this->layout()->setting_data = $this->getSetting()->getSettingContent(1);
return array();
}
}
public function getSetting() {
return $this->getServiceLocator()->get('Front/Model/Setting');
}
类设置扩展 AbstractTableGateway {
public function __construct($adapter) {
$this->table = 'setting';
$this->adapter = $adapter;
}
public function fetchAll() {
return $this->select();
}
public function getSettingContent($id){
$id = (int) $id;
$rowset = $this->select(array('id'=>$id));
if (!$row = $rowset->current()){
throw new \Exception ('Row not found');
}
return $row;
}
}
我的 Module.php 文件在您重播之后是:
namespace Front;
/*use Zend\ModuleManager\ModuleManager;*/
class Module
{
public function onBootstrap($e)
{
$event = $e->getApplication()->getEventManager();
$event->attach('render', function($e) {
$serviceManager = $e->getApplication()->getServiceManager();
$dbadapter = $serviceManager->get('Zend\Db\Adapter');
/*
* Through this adapter make sql-request and
* fetch data that you need and give it to
* $setting_data variable
*/
$e->getViewModel()->setVariable('setting_data', $setting_data);
});
}
public function getAutoloaderConfig()
{
return array('Zend\Loader\StandardAutoloader' =>
array('namespaces' =>
array(__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,),
),
);
}
/* public function init(ModuleManager $moduleManager)
{
$sharedEvents = $moduleManager->getEventManager()->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
// This event will only be fired when an ActionController under the MyModule namespace is dispatched.
$controller = $e->getTarget();
$controller->layout('layout/frontlayout');
}, 100);
}
*/
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
// Add this method:
public function getServiceConfig()
{
return array(
'Zend\Db\Adapter' => function($sm){
$global_config = $sm->get('Configuration');
$db_params = $global_config['db'];
return new Adapter($db_params);
},
'factories' => array(
'Front\Model\AlbumTable' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new \Front\Model\AlbumTable($dbAdapter);
return $table;
},
'Front\Model\Cms' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new \Front\Model\Cms($dbAdapter);
return $table;
},
'Front\Model\Setting' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new \Front\Model\Setting($dbAdapter);
return $table;
},
'Front\Model\Slider' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new \Front\Model\Slider($dbAdapter);
return $table;
},
'Front\Model\Schedule' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new \Front\Model\Schedule($dbAdapter);
return $table;
},
),
);
}
}
?>
在我的控制器(前面)中,我可以从数据库中获取数据并在布局中设置。(此处为 Setting_data)。
如果我的操作/方法完美,我可以轻松获取设置数据索引视图页面。
但我想在错误页面中设置数据也意味着如果我的操作/方法未找到页面。
我怎样才能得到这些数据?
我不想设置静态数据我想调用动态数据并将其设置在一个变量中(此处为setting_data)。我想在我的错误页面布局中访问这个变量。
或
哪个控制器调用错误页面?
【问题讨论】:
-
感谢您的重播。我已经看到了两个链接,但两者都是针对静态变量而不是针对其中的动态数据集。哪个控制器调用了错误页面?所以我已经更新了我的问题,请查看并给我答案。
-
这取决于错误。例如,当您请求与任何路由不匹配的 url 时,不会触发任何控制器。当错误在控制器内部手动抛出时,您可以像在正常请求处理中那样呈现错误页面。您要处理的具体错误是什么?
-
我在页脚内容中使用了此 setting_data 变量的值,如果找到页面则没有问题,但如果找不到页面,则我想在页脚布局中获取此 setting_data 变量的值,但我得到了未定义的变量 setting_data。我该如何解决这个错误。
-
好的,我知道如何实现您需要的,但请告诉我您如何从数据库中获取这些数据(显示控制器的方法
getSettingContent())
标签: php zend-framework2