如果要将日志数据存储在数据库中,并且正在使用某些MVC,则可以简单地覆盖每个控制器基类,如下所示:
class DefaultController extends LogController
{
public function update($objectId)
{
// do stuff like check POST values and update query
$this->log('Object with ID: '.$objectId.' has been updated successfuly', 1);
}
public function delete($objectId)
{
// mysql query to delete the object
$this->log('Object with ID: '.$objectId.' has been removed!', 1);
}
}
Run Code Online (Sandbox Code Playgroud)
和LogController:
abstract class LogController extends BaseController // if you use any, just like Symfony does
{
public function log($message, $status)
{
$user = $_SESSION['userId']; // I assume you keep online user info somewhere
// get connection to a database and...
$connection->query('INSERT INTO logs (message, user_id, status) VALUES ("'.$message.'", '.$user.', '.$status.')');
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您不使用MVC结构或任何其他面向对象的模板,请执行以下简单的日志功能:
function logAction($message, $status, $connection)
{
$user = $_SESSION['userId'];
$connection->query(/* insert query */);
}
Run Code Online (Sandbox Code Playgroud)
我建议您将$ connection传递给数据库的原因是,如果您只是使用一个,则不要打开新连接。logAction()
如果已建立连接,则始终可以执行简单的签入功能,如果尚未建立连接,则可以创建一个新的功能。
编辑:
啊,忘了..您在这里通过MySQL查询创建日志表:
CREATE TABLE IF NOT EXISTS `logs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`status` tinyint(1) NOT NULL,
`message` text NOT NULL,
`user_id` int(11) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)