我实际上正在使用“AdminLTE”模板开发应用程序。
“postLink”在添加“Authentification”之前正常工作,因为所有postLink都将我重定向到“../currentpage#”,注意“currentpage”是我当前页面的名称& “#”被添加到链接中,而不是将我重定向到想要的操作。这是我的代码:
index.ctp(部门)
<?= $this->Form->postLink(" ", ['controller' => 'Departments', 'action' => 'delete',$department->id ],['confirm'=> __('Are you sure you want to delete # {0}?', $department->name),'class'=>'btn btn-danger btn-flat fa fa-trash','title'=>__('Delete')],array('escape' => false)) ?>
DepartmentsController.php
public function delete($id = null)
{
$this->request->allowMethod(['post', 'delete']);
echo "Ok";
$department = $this->Departments->get($id);
if ($this->Departments->delete($department)) {
$this->Flash->success(__('The department has been deleted.'));
} else {
$this->Flash->error(__('The department could not be deleted. Please, try again.'));
}
return $this->redirect(['action' => 'index']);
}
AppController.php
class AppController extends Controller
{
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Auth',[
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'display',
'home'
]
]);
}
public function beforeRender(Event $event)
{
if (!array_key_exists('_serialize', $this->viewVars) &&
in_array($this->response->type(), ['application/json', 'application/xml'])
) {
$this->set('_serialize', true);
}
$this->viewBuilder()->theme('AdminLTE');
$this->set('theme', Configure::read('Theme'));
parent::beforeFilter($event);
$this->Auth->allow();
}
}
最后,UsersController.php:
class UsersController extends AppController
{
public function delete($id = null)
{
$this->request->allowMethod(['post', 'delete']);
$user = $this->Users->get($id);
if ($this->Users->delete($user)) {
$this->Flash->success(__('The user has been deleted.'));
} else {
$this->Flash->error(__('The user could not be deleted. Please, try again.'));
}
return $this->redirect(['action' => 'index']);
}
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
public function logout()
{
return $this->redirect($this->Auth->logout());
}
}
谢谢
答案 0 :(得分:1)
如果你想重定向另一个页面,你可以在flash帮助器后面的控制器中放入重定向方法,就像这样......
public function delete($id = null)
{$this->request->allowMethod(['post', 'delete']);
echo "Ok";
$department = $this->Departments->get($id);
if ($this->Departments->delete($department)) {
$this->Flash->success(__('The department has been deleted.'));
return $this->redirect(['action' => 'DIFFERENT PAGE']);
} else {
$this->Flash->error(__('The department could not be deleted. Please, try again.'));
}}
否则,如果您希望重定向发生在同一位置,您可以使用重定向引用方法......
return $this->redirect($this->referer());
查看Cook书的更多内容 - &gt; https://book.cakephp.org/3.0/en/controllers.html#redirecting-to-other-pages
答案 1 :(得分:0)
我在另一个文件中发现了错误,我做的是,我复制了模板的主要内容。此内容未显示,因此产生了混淆,例如计算机不知道点击来源(Postlink / Postlink Duplicated)。
../插件/ AdminLTE / SRC /模板/布局/ default.thtml中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title><?php echo isset($theme['title']) ? $theme['title'] : 'HONOR Delivery System'; ?></title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<!-- Bootstrap 3.3.5 -->
<?php echo $this->Html->css('AdminLTE./bootstrap/css/bootstrap'); ?>
<!-- Font Awesome -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<!-- Ionicons -->
<link rel="stylesheet" href="webroot/favicon.ico">
<!-- Theme style -->
<?php echo $this->Html->css('AdminLTE.AdminLTE.min'); ?>
<!-- AdminLTE Skins. Choose a skin from the css/skins
folder instead of downloading all of them to reduce the load. -->
<?php echo $this->Html->css('AdminLTE.skins/skin-'.(isset($theme['skin']) ? $theme['skin'] : 'blue').'.min'); ?>
<?php echo $this->fetch('css'); ?>
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body class="hold-transition skin-<?php echo isset($theme['skin']) ? $theme['skin'] : 'blue'; ?> sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">
<header class="main-header">
<!-- Logo -->
<a href="<?php echo $this->Url->build('/'); ?>" class="logo">
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini"> <?php echo ("HDS") ?> </span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg"> <?php echo ("HONOR<strong>DSystem</strong>") ?> </span>
</a>
<!-- Header Navbar: style can be found in header.less -->
<?php echo $this->element('nav-top') ?>
</header>
<!-- Left side column. contains the sidebar -->
<?php echo $this->element('aside-main-sidebar'); ?>
<!-- =============================================== -->
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<?php echo $this->Flash->render(); ?>
<?php echo $this->Flash->render('auth'); ?>
<?php echo $this->fetch('content'); ?>
</div>
<!-- /.content-wrapper -->
<div class="footer" style="background-color: #222d32;" >
<?php echo $this->element('footer'); ?>
</div>
<?php echo $this->element('modalOpinions') ?>
<!-- Control Sidebar -->
<?php echo $this->element('aside-control-sidebar'); ?>
<!-- /.control-sidebar -->
<!-- Add the sidebar's background. This div must be placed
immediately after the control sidebar -->
<div class="control-sidebar-bg" style=" background-color: #222d32;"></div>
</div>
<!-- ./wrapper -->
<div class="loginV"> <!-- le Login en dehors de la template(wrapper) -->
<?php echo $this->Flash->render(); ?>
<?php echo $this->Flash->render('auth'); ?>
<?php echo $this->fetch('content'); ?>
</div>
<!-- jQuery 2.1.4 -->
<?php echo $this->Html->script('AdminLTE./plugins/jQuery/jQuery-2.1.4.min'); ?>
<!-- Bootstrap 3.3.5 -->
<?php echo $this->Html->script('AdminLTE./bootstrap/js/bootstrap'); ?>
<!-- SlimScroll -->
<?php echo $this->Html->script('AdminLTE./plugins/slimScroll/jquery.slimscroll.min'); ?>
<!-- FastClick -->
<?php echo $this->Html->script('AdminLTE./plugins/fastclick/fastclick'); ?>
<!-- AdminLTE App -->
<?php echo $this->Html->script('AdminLTE.AdminLTE.min'); ?>
<!-- AdminLTE for demo purposes -->
<?php echo $this->fetch('script'); ?>
<?php echo $this->fetch('scriptBottom'); ?>
<script type="text/javascript">
$(document).ready(function(){
$(".navbar .menu").slimscroll({
height: "200px",
alwaysVisible: false,
size: "3px"
}).css("width", "100%");
var a = $('a[href="<?php echo $this->request->webroot . $this->request->url ?>"]');
if (!a.parent().hasClass('treeview')) {
a.parent().addClass('active').parents('.treeview').addClass('active');
}
});
</script>
</body>
</html>
原创主要内容:
<?php echo $this->Flash->render(); ?>
<?php echo $this->Flash->render('auth'); ?>
<?php echo $this->fetch('content'); ?>
</div>
<!-- /.content-wrapper -->
重复的:
<!-- ./wrapper -->
<div class="loginV"> <!-- le Login en dehors de la template(wrapper) -->
<?php echo $this->Flash->render(); ?>
<?php echo $this->Flash->render('auth'); ?>
<?php echo $this->fetch('content'); ?>
</div>
解决方案:删除重复内容
最后你会:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title><?php echo isset($theme['title']) ? $theme['title'] : 'HONOR Delivery System'; ?></title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<!-- Bootstrap 3.3.5 -->
<?php echo $this->Html->css('AdminLTE./bootstrap/css/bootstrap'); ?>
<!-- Font Awesome -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<!-- Ionicons -->
<link rel="stylesheet" href="webroot/favicon.ico">
<!-- Theme style -->
<?php echo $this->Html->css('AdminLTE.AdminLTE.min'); ?>
<?php echo $this->Html->css('antiLogin'); ?>
<!-- AdminLTE Skins. Choose a skin from the css/skins
folder instead of downloading all of them to reduce the load. -->
<?php echo $this->Html->css('AdminLTE.skins/skin-'.(isset($theme['skin']) ? $theme['skin'] : 'blue').'.min'); ?>
<?php echo $this->fetch('css'); ?>
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body class="hold-transition skin-<?php echo isset($theme['skin']) ? $theme['skin'] : 'blue'; ?> sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">
<header class="main-header">
<!-- Logo -->
<a href="<?php echo $this->Url->build('/'); ?>" class="logo">
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini"> <?php echo ("HDS") ?> </span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg"> <?php echo ("HONOR<strong>DSystem</strong>") ?> </span>
</a>
<!-- Header Navbar: style can be found in header.less -->
<?php echo $this->element('nav-top') ?>
</header>
<!-- Left side column. contains the sidebar -->
<?php echo $this->element('aside-main-sidebar'); ?>
<!-- =============================================== -->
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<?php echo $this->Flash->render(); ?>
<?php echo $this->Flash->render('auth'); ?>
<?php echo $this->fetch('content'); ?>
</div>
<!-- /.content-wrapper -->
<div class="footer" style="background-color: #222d32;" >
<?php echo $this->element('footer'); ?>
</div>
<?php echo $this->element('modalOpinions') ?>
<!-- Control Sidebar -->
<?php echo $this->element('aside-control-sidebar'); ?>
<!-- /.control-sidebar -->
<!-- Add the sidebar's background. This div must be placed
immediately after the control sidebar -->
<div class="control-sidebar-bg" style=" background-color: #222d32;"></div>
</div>
<!-- jQuery 2.1.4 -->
<?php echo $this->Html->script('AdminLTE./plugins/jQuery/jQuery-2.1.4.min'); ?>
<!-- Bootstrap 3.3.5 -->
<?php echo $this->Html->script('AdminLTE./bootstrap/js/bootstrap'); ?>
<!-- SlimScroll -->
<?php echo $this->Html->script('AdminLTE./plugins/slimScroll/jquery.slimscroll.min'); ?>
<!-- FastClick -->
<?php echo $this->Html->script('AdminLTE./plugins/fastclick/fastclick'); ?>
<!-- AdminLTE App -->
<?php echo $this->Html->script('AdminLTE.AdminLTE.min'); ?>
<!-- AdminLTE for demo purposes -->
<?php echo $this->fetch('script'); ?>
<?php echo $this->fetch('scriptBottom'); ?>
<script type="text/javascript">
$(document).ready(function(){
$(".navbar .menu").slimscroll({
height: "200px",
alwaysVisible: false,
size: "3px"
}).css("width", "100%");
var a = $('a[href="<?php echo $this->request->webroot . $this->request->url ?>"]');
if (!a.parent().hasClass('treeview')) {
a.parent().addClass('active').parents('.treeview').addClass('active');
}
});
</script>
</body>
</html>