Problém s str_replace v presenteru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Carson
- Člen | 35
Ahoj,
Celý den si lámu hlavu nad tím, proč mi funkce která mi má nahradit
při generování proměné %promena%, nenahrazuje vše, ale pouze
1 z nich.
Níže dávám kód.
Presenter
public function handleGenerateConfig()
{
$IpList = array(
'10.250.20.20' => 'SW0010593',
'10.250.20.30' => 'SW0010594',
);
foreach ($IpList as $SwitchIP => $SwitchSysname)
{
$Variables = array(
'%sysname%' => $SwitchSysname,
'%vlan%' => '801',
'%mgmtvlan' => '800',
'%domain%' => 'domain.cz'
);
$File = fopen('../www/switch_config/' . $SwitchSysname . '.txt','w');
$GetBudle = $this->GenerateModel->GetBudle();
$Commands = $this->GenerateModel->GenerateCommands();
foreach ($GetBudle as $BudleOne) {
$Config = $this->replaceString($Variables, $BudleOne->budle);
fwrite($File,$Config . "\n");
foreach ($Commands as $CommandOne => $r_budle_id) {
if ($BudleOne->id == $r_budle_id) {
$Config = $this->replaceString($Variables,$CommandOne );
fwrite($File, $Config . "\n");
}
}
}
fclose($File);
$this->flashMessage('Konfigurační soubor : ' . $SwitchSysname . '.txt Byl úspěšně vygenerován!','alert alert-success');
}
}
public function replaceString($Variables,$String)
{
foreach($Variables as $Variable => $Replace)
{
return str_replace($Variable,$Replace,$String);
}
}
Model
public function GetBudle()
{
$Sql = 'SELECT switch_generate_budle.budle,switch_generate_budle.id, switch_generate_cast_name.priority ';
$Sql = $Sql.'FROM test.switch_generate_budle ';
$Sql = $Sql.'INNER JOIN test.switch_generate_cast_name ';
$Sql = $Sql.'ON switch_generate_budle.r_switch_generate_cast_name = switch_generate_cast_name.id ';
$Sql = $Sql.'ORDER BY switch_generate_cast_name.priority ASC , switch_generate_budle.priority ASC';
$Sql = $this->db->query($Sql);
return $Sql;
}
public function GetCommand($BudleID)
{
$Sql = 'SELECT * ';
$Sql = $Sql.'FROM test.switch_generate_command ';
$Sql = $Sql.'INNER JOIN test.switch_generate_budle ';
$Sql = $Sql.'ON switch_generate_command.r_switch_generate_budle = switch_generate_budle.id ';
$Sql = $Sql.'WHERE r_switch_generate_budle = %i ORDER BY switch_generate_command.priority DESC';
$Sql = $this->db->query($Sql,$BudleID);
return $Sql;
}
public function GenerateCommands()
{
$GetBudle = $this->GetBudle();
$Commands = array();
foreach ($GetBudle as $Budle) {
$GetCommand = $this->GetCommand($Budle->id);
foreach ($GetCommand as $Command) {
$Commands[$Command->command] = $Command->r_switch_generate_budle;
}
}
return $Commands;
}
Aktuálně mi to vypisuje následující
sysname SW0010593
clock timezone 1 add 02:00:00
acl number 2010
rule 10 permit source 1.1.1.0 0.0.0.255
rule 20 permit source 1.1.1.0 0.0.0.255 %domain% %vlan%
acl number 2012
acl number 2013
\--
Editoval Carson (8. 11. 2015 14:28)