[修改]优化了dns地址添加方法,增添了错误提示消息

This commit is contained in:
makotocc0107
2024-10-09 11:10:54 +08:00
committed by Coding
parent 50ca69c958
commit d422735062

View File

@@ -6,10 +6,12 @@ use App\Services\NetworkService;
use App\Settings\NetworkSettings; use App\Settings\NetworkSettings;
use Filament\Forms; use Filament\Forms;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Notifications\Notification;
use Filament\Pages\SettingsPage; use Filament\Pages\SettingsPage;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\TagsInput;
class ManageNetwork extends SettingsPage class ManageNetwork extends SettingsPage
{ {
@@ -44,15 +46,16 @@ class ManageNetwork extends SettingsPage
$set('ip', $interfaces[$state]['ip'] ?? '无IP地址'); $set('ip', $interfaces[$state]['ip'] ?? '无IP地址');
$set('mask', $interfaces[$state]['mask'] ?? '无子网掩码'); $set('mask', $interfaces[$state]['mask'] ?? '无子网掩码');
$set('gateway', $interfaces[$state]['gateway']); $set('gateway', $interfaces[$state]['gateway']);
$set('dns_server_1', $interfaces[$state]['dns'][0] ?? null); // $set('dns_server_1', $interfaces[$state]['dns'][0] ?? null);
$set('dns_server_2', $interfaces[$state]['dns'][1] ?? null); // $set('dns_server_2', $interfaces[$state]['dns'][1] ??
$set('dns_servers', $interfaces[$state]['dns'] ?? []);
error_log('state:' . $state); error_log('state:' . $state);
error_log('dhcp_enabled: ' . $dhcp_status); error_log('dhcp_enabled: ' . $dhcp_status);
error_log("ip " . $interfaces[$state]['ip']); error_log("ip " . $interfaces[$state]['ip']);
error_log("mask " . $interfaces[$state]['mask']); error_log("mask " . $interfaces[$state]['mask']);
error_log("gateway " . $interfaces[$state]['gateway']); error_log("gateway " . $interfaces[$state]['gateway']);
error_log("dns_server_1 " . print_r($interfaces[$state]['dns'], true)); error_log("dns_servers " . print_r($interfaces[$state]['dns'], true));
} }
else{ else{
error_log("未找到接口:" . $state); error_log("未找到接口:" . $state);
@@ -73,6 +76,7 @@ class ManageNetwork extends SettingsPage
TextInput::make('ip') TextInput::make('ip')
->label("IP地址") ->label("IP地址")
->disabled(fn($get) => $get('dhcp_enabled') === 'true') ->disabled(fn($get) => $get('dhcp_enabled') === 'true')
->required()
->reactive(), ->reactive(),
Select::make('mask') Select::make('mask')
->label('子网掩码') ->label('子网掩码')
@@ -108,16 +112,38 @@ class ManageNetwork extends SettingsPage
->reactive(), ->reactive(),
TextInput::make('gateway') TextInput::make('gateway')
->label('网关') ->label('网关')
->disabled(fn($get) => $get('dhcp_enabled') === 'true') ->disabled(fn($get) => $get('dhcp_enabled') === 'true'),
->required(), TagsInput::make('dns_servers')
TextInput::make('dns_server_1')
->label('DNS地址') ->label('DNS地址')
->disabled(fn($get) => $get('dhcp_enabled') === 'true') ->disabled(fn($get) => $get('dhcp_enabled') === 'true')
->required(), ->reactive()
TextInput::make('dns_server_2') ->afterStateUpdated(function ($state, callable $set) {
->label('DNS备用地址') // 保留合法的DNS地址
->disabled(fn($get) => $get('dhcp_enabled') === 'true') $validDns = array_filter($state, function ($dns) {
->required(), // 验证是否是合法的IPv4地址
return filter_var($dns, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
});
// 如果有非法的DNS地址显示提示并移除它们
if (count($validDns) !== count($state)) {
Notification::make()
->title('无效的DNS地址 已自动移除')
->warning() // 设置消息类型为警告
->send();
}
// 限制最多只能有3个合法的DNS地址
if (count($validDns) > 3) {
$validDns = array_slice($validDns, 0, 3);
Notification::make()
->title('最多只能输入3个DNS地址')
->warning()
->send();
}
// 更新字段状态
$set('dns_servers', $validDns);
})
]) ])
->visible(fn($get) => !is_null($get('network_interface'))) // 检查是否有选择的接口 ->visible(fn($get) => !is_null($get('network_interface'))) // 检查是否有选择的接口
->reactive(), ->reactive(),
@@ -128,6 +154,30 @@ class ManageNetwork extends SettingsPage
public function save(): void public function save(): void
{ {
// 获取用户输入的网络配置
$ipAddress = $this->form->getState()['ip'] ?? '';
$gateway = $this->form->getState()['gateway'] ?? '';
// 验证 IP 地址格式
if (!filter_var($ipAddress, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
Notification::make()
->title('无效的 IP 地址格式')
->warning()
->send();
return; // 返回,不执行保存操作
}
// 验证网关地址格式
if (!filter_var($gateway, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
Notification::make()
->title('无效的网关地址格式')
->warning()
->send();
return; // 返回,不执行保存操作
}
// 调用父类的保存方法以持久化设置 // 调用父类的保存方法以持久化设置
parent::save(); parent::save();
@@ -144,11 +194,15 @@ class ManageNetwork extends SettingsPage
error_log('接口名称:' . $networkInterface); error_log('接口名称:' . $networkInterface);
error_log('dhcp' . $dhcpEnabled); error_log('dhcp' . $dhcpEnabled);
$ipAddress = $this->form->getState()['ip_address'] ?? ''; $ipAddress = $this->form->getState()['ip'] ?? '';
$mask = $this->form->getState()['mask'] ?? ''; $mask = $this->form->getState()['mask'] ?? '';
$gateway = $this->form->getState()['gateway'] ?? ''; $gateway = $this->form->getState()['gateway'] ?? '';
$dns1 = $this->form->getState()['dns_server_1'] ?? ''; // $dns1 = $this->form->getState()['dns_server_1'] ?? '';
$dns2 = $this->form->getState()['dns_server_2'] ?? ''; // $dns2 = $this->form->getState()['dns_server_2'] ?? '';
$dnsServers = $this->form->getState()['dns_servers'] ?? [];
$dnsString = implode(',', $dnsServers); // 合并 DNS 地址为字符串
if ($dhcpEnabled=='true') { if ($dhcpEnabled=='true') {
// 如果启用 DHCP设置为使用 DHCP // 如果启用 DHCP设置为使用 DHCP
@@ -176,7 +230,7 @@ class ManageNetwork extends SettingsPage
} else { } else {
// 根据接口和用户输入构建命令 // 根据接口和用户输入构建命令
$commands = [ $commands = [
"nmcli con mod '$networkInterface' ipv4.method manual ipv4.addresses $ipAddress/$mask ipv4.gateway $gateway ipv4.dns '$dns1 $dns2'", "nmcli con mod '$networkInterface' ipv4.method manual ipv4.addresses $ipAddress/$mask ipv4.gateway $gateway ipv4.dns $dnsString",
"nmcli con down '$networkInterface'", "nmcli con down '$networkInterface'",
"nmcli con up '$networkInterface'", // 重新激活连接 "nmcli con up '$networkInterface'", // 重新激活连接
]; ];