OK I went with my original idea, changed the url and created 1 function to
update everything individually. The problem I am running into now is when
the form is displayed the options are no longer selected for each section.
function update($slug, $modelName)
{
$user = $this->User->findBySlug($slug);
if ($this->RequestHandler->isAjax()) {
$this->set('user', $this->User->read(null, $id));
if (!empty($this->data)) {
if ($this->User->save($this->data)) {
//$this->view_$modelName($slug);
}
}
$model_name = Inflector::classify($modelName);
$options = $this->User->$model_name->find('list',
array('fields' => 'name', 'order' => 'name ASC'));
$this->set(compact('options'));
debug(array($slug, $modelName, $id, $model_name));
}
if (empty($this->data)) {
$this->data = $this->User->read(null, $id);
}
}
When I debug I get the correct info.
$modelName = educations
$model_name - Education
$slug = the name on the account
$id = the user id
Just not sure why no info is being displayed on the form. (I have options
selected in the original rendered view, when I click edit the form appears
with all the options to choose from but the ones that were selected are now
blank)
Ideas?
Thanks,
Dave
-----Original Message-----
From: Walther [mailto:[email protected]]
Sent: April-10-09 1:49 PM
To: CakePHP
Subject: Re: DRY function
Your idea is the what I believe is the correct solution.
Instead of calling $this->User->Skills->find... You'd call $this->User-
>$modelName->find
You'd need to do something with the view_skills and view_educations type
functions. Assuming they are similar you could do $this->view ($slug,
$modelName), otherwise perhaps move them into the model and call
$this->User->$modelName->view($slug);
Walther.
On Apr 10, 5:34 pm, "Dave Maharaj :: WidePixels.com"
<[email protected]> wrote:
> I was hoping for some info on how to take 4 functions and make the
> into 1.They all do the same thing except its a different model that they
use.
> They simply update a users options thru a select check box form,
> that's the only thing being edited. Basically I took the edit view and
> broke it up into
> 4 different Ajax edits and each has its own function but since they
> are all the same except for the model call I was hoping someone could
> give me some advice on creating 1 standard function.
>
> They all get called from the same page users/profile, the link in the
> view is users/profile/[user slug]/update_eductions or
> users/profile/[user slug]/update_skills. I am still very new with cake
> but was thinking if I modified the link url used an additional
> variable based on the link action to get users/profile/[user
> slug]/educations/update I could then use 1 function called update and
> set the "educations" in the url to define what model to update and
> pass that into the function. the update function would be something
> like function update ($slug, $modelName) then in the old function replace
the model name with $modelName ?
>
> function update_eductions($slug = null)
> {
> $this->User->recursive = 1;
> if ($this->RequestHandler->isAjax()) {
> $user = $this->User->findBySlug($slug);
> $id = $user['User']['id'];
> $this->set('user', $this->User->read(null, $id));
> if (!empty($this->data)) {
> if ($this->User->save($this->data)) {
> $this->view_educations($slug);
> }
> }
> $educations= $this->User->Educations->find('list',
> array('fields' => 'name', 'order' => 'name ASC'));
> $this->set(compact('educations'));
> }
> if (empty($this->data)) {
> $this->data = $this->User->read(null, $id);
> }
> }
>
> or to update skills
>
> function update_skills($slug = null)
> {
> $this->User->recursive = 1;
> if ($this->RequestHandler->isAjax()) {
> $user = $this->User->findBySlug($slug);
> $id = $user['User']['id'];
> $this->set('user', $this->User->read(null, $id));
> if (!empty($this->data)) {
> if ($this->User->save($this->data)) {
> $this->view_skills($slug);
> }
> }
> $skills= $this->User->Skills->find('list',
> array('fields' => 'name', 'order' => 'name ASC'));
> $this->set(compact('skills'));
> }
> if (empty($this->data)) {
> $this->data = $this->User->read(null, $id);
> }
> }
>
> Ideas? Suggestions?
>
> Thanks,
>
> Dave
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---