You don't need to have the user ID in the form. Not unless you might
have an admin creating songs for another user. You can remove the
user_id hidden field and do this:

function add()
{
        /* create var here so it's only read once but
         * there's no need to set it for the view
         */
        $user_id = $this->Session->read('Auth.User.id');

        if (!empty($this->data))
        {
                /* add current User's ID to data here
                 */
                $this->data['Song']['user_id'] = $user_id;
                $this->Song->create();
                
                if ($this->Song->save($this->data))
                {
                        $this->Session->setFlash(__('The Song has been saved', 
true));
                        $this->redirect(array('action'=>'index'));
                }
                else
                {
                        $this->Session->setFlash(__('The Song could not be 
saved. Please,
try again.', true));
                }
        }
        
        $catalogs = $this->Song->Catalog->find(
                'list',
                array(
                        'conditions' => array(
                                'Catalog.user_id' => $user_id
                        )
                )
        );
        $this->set(compact('catalogs'));
}

I'm assuming that Catalog has a user_id field. If that's not the case,
post your Catalog and Song models.

On Mon, Apr 27, 2009 at 1:36 PM, Teedaddy <[email protected]> wrote:
>
> Here is my add function for my song_conntroller:
>
> function add() {
>                if (!empty($this->data)) {
>                        $this->Song->create();
>                        if ($this->Song->save($this->data)) {
>                                $this->Session->setFlash(__('The Song has been 
> saved', true));
>                                $this->redirect(array('action'=>'index'));
>                        } else {
>                                $this->Session->setFlash(__('The Song could 
> not be saved. Please,
> try again.', true));
>                        }
>                }
>                $this->set('user_id', $this->Session->read('Auth.User.id'));
>                //$users = $this->Song->User->find('list');
>                $catalogs = $this->Song->Catalog->find('list');
>                $this->set(compact('catalogs'));
>        }
>
>
> I was able to get the User ID to pass to the Add Form with your help
> but where I am confused, is how to get the $catalogs = find array to
> return only the current Auth.User.id related records.
>
> I think if I can get this down, I will be well on my way to finishing
> my project (crossing fingers)!
>
> I appreciate your help greatly....
>
> On Apr 27, 12:27 pm, Teedaddy <[email protected]> wrote:
>> Sorry, I am assuming it is a similar method since the htlmlink for
>> "New Song" would need to contain the user_id for which I create a new
>> song record. Maybe this is just my old procedural way of thinking
>> hanging on here.
>>
>> Am I assuming correctly that all these user id dependencies need to be
>> programmed into the controllers and not the views or links?
>>
>> I know enough PHP to be dangerous and am not that far along with just
>> a procedural approach but I love the concept of MCV and cakePHP so I
>> want to learn this way of developing from this point forward.
>>
>> Maybe my lack of PHP mastery is making this much harder for me than it
>> should be.
>>
>> Thanks again.
>>
>> On Apr 27, 12:19 pm, brian <[email protected]> wrote:
>>
>> > OK, well that's different than adding the User.id to links. For what
>> > you want to do, you need only add it to the conditions of your find.
>> > There's no need for it to be in the link.
>>
>> > Ditto for editing a record: just check the session and compare it to
>> > the user_id in your data. If it doesn't match, throw up a flash msg
>> > and redirect.
>>
>> > When in the controller, use $this->Session->read(...) and, in the
>> > view, $session->read(...)
>>
>> > On Mon, Apr 27, 2009 at 1:07 PM, Teedaddy <[email protected]> wrote:
>>
>> > > I basically want all my controller actions to be user specific once a
>> > > user is logged in. I'm getting close and these suggestions have been
>> > > very helpful.
>>
>> > > The main task would be to assure that all related records that are
>> > > returned, found, added, etc, are tied to a specific user.id.
>>
>> > > For instance, the project I am working on is a song catalog. The
>> > > hierarchy is UserGroups -> Users -> Catalogs -> Songs.
>>
>> > > Individual users can have many Catalogs but when the view for Songs is
>> > > displayed or one tries to add a new song, all the records in the DB
>> > > are displayed or all Catalogs from all Users are available in the
>> > > Catalog dropdown form item. I only want the selection choices for
>> > > Catalog to be those of the logged in user. Right now (with Baked views
>> > > and controllers) every Catalog belonging to every user is displayed as
>> > > a possible choice. I also need to make sure only related records
>> > > (keyed by user.id) are shown in all cases.
>>
>> > > Please forgive me if I am not making this as understandable as it
>> > > needs to be. Thanks so much for your help.
>>
>> > > On Apr 27, 10:17 am, brian <[email protected]> wrote:
>> > >> Are you using Auth? What's the route for this URL? This should work:
>>
>> > >> $html->link(
>> > >>         'edit profile',
>> > >>         array(
>> > >>                 'controller' => 'users',
>> > >>                 'action' => 'edit',
>> > >>                 'user_id' => $session->read('Auth.User.id')
>> > >>         ),
>> > >>         array('title' => 'whatever')
>> > >> )
>>
>> > >> If you don't have a route that specifically passes user_id, you can 
>> > >> also do:
>>
>> > >> $html->link(
>> > >>         'edit profile',
>> > >>         array(
>> > >>                 'controller' => 'users',
>> > >>                 'action' => 'edit',
>> > >>                 $session->read('Auth.User.id')
>> > >>         ),
>> > >>         array('title' => 'whatever')
>> > >> )
>>
>> > >> On Mon, Apr 27, 2009 at 10:34 AM, Teedaddy <[email protected]> 
>> > >> wrote:
>>
>> > >> > Thanks for the response, but this still doesn't answer my question of
>> > >> > how to include this variable in a $htmlhelper link, mainly need to
>> > >> > know the syntax. thanks so much
>>
>> > >> > On Apr 26, 10:36 pm, NegoBlack® <[email protected]> wrote:
>> > >> >> I use to do this on my app_controller.php:
>>
>> > >> >> public function beforeFilter(){
>>
>> > >> >>     if ($this->Auth->user()){
>> > >> >>         $this->set("userInfo", $this->Auth->user())
>> > >> >>     }
>>
>> > >> >> }
>>
>> > >> >> Then I can use this var on my views...
>>
>> > >> >> On Apr 25, 7:57 pm, Teedaddy <[email protected]> wrote:
>>
>> > >> >> > Could someone be so kind to tell me the easiest way to pass the
>> > >> >> > current logged in "Auth" user id in $htmlhelper links?
>>
>> > >> >> > Thank you so much, just learning all this MVC method and have been
>> > >> >> > through Auth tutorials numerous times but I am missing this 
>> > >> >> > somehow.
>>
>> > >> >> > Bret
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to