我在我的项目中使用URL重写规则和URL管理器。这是我的URLManager规则的代码:
'rules' => [
'/'=>'site/index',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<type:(admin|driver|user)>' => '<module>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<type:(admin|driver|user)>/<id:\d+>' => '<module>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<type:(admin|driver|user)>/<_:\w+>' => '<module>/<controller>/<action>',
],
问题是DataTables正在使用URL ?_=1474714889055
中的额外参数发送数据,这会搞乱一切。我添加了最后一行代码以允许此参数或Datatable添加的任何其他垃圾数据。
如何删除此代码或允许它在URL中而不影响路由?
此致
编辑:
public function actionVerified()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$expression = new \yii\db\Expression('CONCAT(`driver_details`.`first_name`, " ", `driver_details`.`last_name`) as `driver_name`');
$bookings = \app\models\Bookings::find()
->select(["bookings.*",
"TIME_FORMAT(booking_start, '%h:%i %p') as booking_start",
"TIME_FORMAT(booking_end, '%h:%i %p') as booking_end",
"users_main.name as verified_by_name",
"user_details.name as booked_by",
"user_details.contact as contact",
new \yii\db\Expression("CONCAT('STARWAY-BKNG-',bookings.id) as id_show"),
$expression
])->joinWith('userDetail')
->joinWith('driverDetail')
->joinWith('usersMain')
->where(['verified'=>1, 'canceled'=> 0, 'completed'=>0])->asArray()->all();
foreach ($bookings as $key => $booking) {
unset($booking['userDetail']);
unset($booking['driverDetail']);
unset($booking['usersMain']);
$booking_send[] = $booking;
}
if(!isset($booking_send)){
$booking_send = [];
}
return $booking_send;
}
答案 0 :(得分:1)
我想我知道你为什么会收到404错误。它是最后一个&#39; /&#39;部分,就在之前&#39;?_ = 147471488 9055&#39;,这导致了404.
根据Yii2,这两个网址不同:
// these two are not same
http://domain.com/controller/action
http://domain.com/controller/action/
如果只是使用trailing slash
进行搜索,您会在Yii Github Issues页面上找到几个讨论。
我不知道最后/
来自哪里,所以我检查了DataTables Documentation,但没有找到任何最后的&#39} /&#39;在他们的示例代码或ajax url:
// their ajax code
$(document).ready(function() {
$('#example').DataTable( {
"ajax": '../ajax/data/arrays.txt'
} );
} );
// ajax url being called in their example page
https://datatables.net/examples/ajax/data/arrays.txt?_=1474729703286
所以我猜测你的源代码上可能有一个类型,即最后添加/
。解决这个问题应该解决你的问题。
如果不是这样,您可以尝试在配置中使用以下规则:
'rules' => [
'/'=>'site/index',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<type:(admin|driver|user)>' => '<module>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<type:(admin\/|driver\/|user\/)>' => '<module>/<controller>/<action>', // allow the trailing slash
'<module:\w+>/<controller:\w+>/<action:\w+>/<type:(admin|driver|user)>/<id:\d+>' => '<module>/<controller>/<action>',
],
虽然您当前的解决方案有效,但我不建议
'<module:\w+>/<controller:\w+>/<action:\w+>/<type:(admin|driver|user)>/<_:\*?>' => '<module>/<controller>/<action>'
此规则因为它不正确。 <_:\*?>
部分表示还允许使用以下网址:
// .......................................^ these are definitely not valid.
YOUR_DOMAIN/module/controller/action/type/*
YOUR_DOMAIN/module/controller/action/type/?
YOUR_DOMAIN/module/controller/action/type/*?
YOUR_DOMAIN/module/controller/action/type/?*
我希望你明白我的观点。
最后,我只是使用像.htaccess
文件这样的标准wordpress。这是以下情况:
# BEGIN WordPress
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
# END WordPress