Come sviluppatore PHP procedurale semi-esperto, il mio OOP ha ancora bisogno di molto lavoro. Sto ancora lavorando con i principi SOLID e altre teorie e linee guida di OOP, e sono bloccato con qualcosa che sembra a dir poco UGLY, e sicuramente non conferma a SOLID.
Sono occupato a ripristinare il CMS interno, utilizzando CodeIgniter 3.0.x e MaterializeCSS per il front-end.
Ecco il bit di codice in questione che semplicemente non funziona per me:
public function add($uid)
{
$data['userdata'] = $this->usercontact_model->get_user($uid);
if (empty($data['userdata']))
{
return false;
}
else
{
$temp = $this->usercontact_model->get_contact_types();
$temp_options = array();
if (!empty($temp))
{
foreach ($temp as $tk => $tv)
{
$temp_options[$tk]['value'] = $tv['id'];
$temp_options[$tk]['display'] = $tv['name'];
}
}
$data['sidebar'] = array(
0 => array(
'type' => 'accordion',
'content' => array(
0 => array(
'icon' => 'settings',
'active' => 'active',
'heading' => 'Page actions',
'prompt' => lang('user_contacts_page_actions_head') . '<br /> <br />',
'body' => '
» <a href="' . base_url('user/usercontact/list_contacts') . '/' . $this->session->userdata('id') . '">' . lang('user_contacts_return_contacts') . '</a><br />
» <a href="' . base_url('user/login/control_panel') . '">' . lang('user_contacts_return_cpanel') . '</a><br />
'
)
)
)
);
$data['open_data'] = array(
'action' => '',
'method' => 'post',
'hidden' => array(
'user_id' => $this->session->userdata('id')
)
);
$data['close_data'] = array(
'datepicker_init' => 'true',
'select_months' => 'true',
'select_years' => 15,
'format' => 'yyyy-mm-dd',
'clockpicker_init' => 'true'
);
$data['contact_type_data'] = array(
'id' => 'contact_type_select',
'heading' => 'user_contact_type',
'options' => $temp_options
);
$data['active_data'] = array(
'id' => 'active_select',
'heading' => 'user_contact_active',
'options' => array(
0 => array(
'value' => 'Yes',
'display' => lang('user_contact_yes')
),
1 => array(
'value' => 'No',
'display' => lang('user_contact_no')
)
)
);
$data['value_data'] = array(
'id' => 'value',
'validate' => 'validate',
'placeholder' => 'Content',
'label' => 'user_contact_label_value'
);
$data['vacation_from_data'] = array(
'id' => 'vacation_from',
'placeholder' => 'Select vacation start date',
'label' => 'user_contact_vacation_from'
);
$data['vacation_to_data'] = array(
'id' => 'vacation_to',
'placeholder' => 'Select vacation end date',
'label' => 'user_contact_vacation_to'
);
$data['time_from_data'] = array(
'id' => 'time_from',
'placeholder' => 'Select available start time',
'label' => 'user_contact_time_from'
);
$data['time_to_data'] = array(
'id' => 'time_to',
'placeholder' => 'Select available end time',
'label' => 'user_contact_time_to'
);
$data['submit_data'] = array(
'id' => 'submit_add',
'label' => lang('user_contact_save'),
);
$posts = $this->input->post();
if (empty($posts))
{
$this->core->render_view('template_admin', 'usercontact/add', $data);
}
else
{
$this->core->render_view('template_admin', 'usercontact/add', $data);
preint($posts);
}
}
}
Ora - Non ho ancora convalidato questo concetto, ma ciò renderà questo sicuramente più brutto usando il mio attuale approccio a funzioni singole.
preint()
è solo una funzione che ho creato che fa un print_r avvolto in <pre></pre>
Domande specifiche:
- In che modo, utilizzando CI 3.0.x, posso rendere questo più compatibile con SOLID?
- Come posso renderlo più leggibile?
- Come posso accorciare questo? Spostare elementi come la convalida e la creazione degli array di campi e sidebar per separare funzioni / classi?
Le risposte o i suggerimenti a uno o tutti i precedenti potrebbero essere molto apprezzati.