我在cakephp3面临问题。在routes.php
中我使用了
Router::prefix('admin', function ($routes) {
$routes->connect('/', ['controller' => 'TblUsers', 'action' => 'index']);
});
我已将TblUsers
放在Admin
文件夹
在app控制器代码中:
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'username',
//'password' => 'password'
],
'scope' => ['role' => '1']
]
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'admin'=>true,
'prefix'=>true
],
'redirectUrl' => [
'controller' => 'TblUsers',
'action' => 'index',
'admin'=>true,
],
'loginRedirect' => [
'controller' => 'TblUsers',
'action' => 'index',
'admin'=>true,
]
]);
现在,当我访问users / login时,它给出了我的错误:
错误:路由匹配“数组('controller'=>'用户','操作'=>'登录','admin'=> true,'前缀'=> true,'插件' => NULL,'_ ext'=> NULL,)“无法找到。
OR
在像cakephp2这样的cakephp3中是否有任何方法可以访问任何控制器内部的函数admin_functionname
,并调用admin_functionname.ctp
文件并在网址中添加管理员。
由于
答案 0 :(得分:2)
您需要将前缀更改为实际前缀,而不是true
。
所以改变这个;
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'admin'=>true,
'prefix'=>true
对此;
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'prefix'=> 'admin'
您需要对loginRedirect和redirectUrl
执行相同的操作您可以在http://book.cakephp.org/3.0/en/development/routing.html#prefix-routing
找到更多信息答案 1 :(得分:0)
此示例适用于带管理员面板的简单页面:
结构fodlers和文件:
src
_Controller
_admin
__AppController.php
__UsersController.php
__OtherAdminController.php
_AppController.php
_UsersController.php
_OtherPublicController.php
_Template
_admin
__Users
_login.ctp
_add.ctp
_etc.ctp
__OtherAdminTemplate
_Users
_Pages
_etc
<强>配置/ routes.php文件强>
Router::prefix('admin', function (RouteBuilder $routes) {
$routes->connect('/',['controller' => 'Users', 'action' => 'login']);
$routes->connect('/:controller',['action' => 'index'],['routeClass' => 'DashedRoute']);
$routes->connect('/:controller/:action/*',[], ['routeClass' => 'DashedRoute']);
});
<强>控制器/管理/ AppController.php 强>
<?php
namespace App\Controller\Admin; // <---- Name your admin folder
use App\Controller\AppController as Controller;
use Cake\Event\Event;
use Cake\Core\Configure;
/**
* App Controller
*
* @property \App\Model\Table\AppTable $App
*/
class AppController extends Controller
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', array(
'authenticate' => array(
'Form' => array('fields' => array('username' => 'email', 'password' => 'password'))
),
'loginRedirect' => array(
'controller' => 'Users',
'action' => 'index'
),
'logoutRedirect' => array(
'prefix' => false,
'controller' => 'Pages',
'action' => 'home',
),
));
$this->Auth->deny();
}
public function beforeFilter(Event $event)
{
// If you want use admin.ctp layout
if ($this->request->params['prefix'] === 'admin') {
$this->viewBuilder()->layout('admin');
}
//Autorized acctions without registration
$this->Auth->allow(['forgotPassword', 'resetPassword']);
}
}
<强>控制器/管理/ UsersController.php 强>
<?php
namespace App\Controller\Admin; // <---- Name your admin folder
use App\Controller\Admin\AppController; // <---- Name your admin folder
use Cake\Mailer\Email;
use Cake\Routing\Router;
use Cake\Core\Configure;
/**
* Users Controller
*
* @property \App\Model\Table\UsersTable $Users
*/
class UsersController extends AppController
{
public function login()
{
//Admin Login function
}
//Rest of Users admin functions
}