XF 2.3 Scratch Pad Thingy

CipherX

New member
Hello,
I have been following Kier tutorial on how to make a scratch pad thingy. I am very new to php coding.I have ran into an issue where I am getting a code error and don't know how to fix it.

Here is the Sever error log:
Code:
LogicException: Unknown relation or alias User accessed on xFaddons_pad_note src\XF\Mvc\Entity\Finder.php:790
Generated by: Webmaster Feb 20, 2025 at 3:54 AM
Stack trace
#0 src\XF\Mvc\Entity\Finder.php(672): XF\Mvc\Entity\Finder->join('User', true, false, false)
#1 src\XF\Mvc\Entity\Manager.php(273): XF\Mvc\Entity\Finder->with(Array)
#2 src\XF\Mvc\Controller.php(1040): XF\Mvc\Entity\Manager->getFinder('xFaddons\\Pad:No...')
#3 src\addons\xFaddons\Pad\Pub\Controller\Note.php(13): XF\Mvc\Controller->finder('xFaddons\\Pad:No...')
#4 src\XF\Mvc\Dispatcher.php(362): xFaddons\Pad\Pub\Controller\Note->actionIndex(Object(XF\Mvc\ParameterBag))
#5 src\XF\Mvc\Dispatcher.php(264): XF\Mvc\Dispatcher->dispatchClass('xFaddons\\Pad:No...', 'Index', Object(XF\Mvc\RouteMatch), Object(xFaddons\Pad\Pub\Controller\Note), NULL)
#6 src\XF\Mvc\Dispatcher.php(121): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(xFaddons\Pad\Pub\Controller\Note), NULL)
#7 src\XF\Mvc\Dispatcher.php(63): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#8 src\XF\App.php(2826): XF\Mvc\Dispatcher->run()
#9 src\XF.php(806): XF\App->run()
#10 index.php(23): XF::runApp('XF\\Pub\\App')
#11 {main}
Request state
array(4) {
  ["url"] => string(17) "/index.php?notes/"
  ["referrer"] => string(36) "http://localhost/index.php?notes/add"
  ["_GET"] => array(1) {
    ["notes/"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}

Here is the Note Controller:
Code:
<?php

namespace xFaddons\Pad\Pub\Controller;

use XF\Mvc\ParameterBag;
use XF\Pub\Controller\AbstractController;

class Note extends AbstractController
{
    public function actionIndex()
    {

        $noteFinder = $this->finder('xFaddons\Pad:Note')
            ->where( 'user_id', \XF::visitor()->user_id)
            ->order('post_date', 'desc');

        $viewParams = [
            'notes' => $noteFinder->fetch()
        ];

        return $this->view('xFaddons\Pad:Note\Index', 'xFaddons_pad_index', $viewParams);
    }

    public function actionTest()
    {
        $postFinder = $this->finder( 'XF:Post')
            ->with('User')
            ->with( 'User.Profile')
            ->with( 'Thread')
            ->where('user_id', '<>', 0);

        /** @var \xFaddons\Pad\Entity\note $note */
        $note = $this->em()->create( 'xFaddons\Pad:Note');
        $note->title ='This is my first note title';
        $note->content = 'This is my first note content';
        $note->save();

        $viewParams = [
            'post' => $postFinder
        ];

        return $this->view('xFaddons\Pad:Note\Test', 'xFaddons_pad_test', $viewParams);
    }

    public function actionAdd()
    {
        $note = $this->em()->create( 'xFaddons\Pad:Note');
        return $this->noteAddEdit($note);
    }

    public function actionEdit(ParameterBag $params)
    {
        $note = $this->assertNoteExists($params->note_id);
        return $this->noteAddEdit($note);
    }

    protected function noteAddEdit(\xFaddons\Pad\Entity\Note $note)
    {
        $viewParams = [
            'note' => $note
        ];

        return $this->view('xFaddons\Pad:Note\Edit', 'xFaddons_pad_edit', $viewParams);
    }

    public function actionSave(ParameterBag $params)
    {
        if ($params->note_id) {
            $note = $this->assertNoteExists($params->note_id);
        } else {
            $note = $this->em()->create('xFaddons\Pad:Note');
        }

        $this->noteSaveProcess($note)->run();

        return $this->redirect($this->buildLink('notes'));
    }

    protected function noteSaveProcess(\xFaddons\Pad\Entity\Note $note)
    {
        $input = $this->filter([
            'title' => 'str',
            'content' => 'str',
        ]);

        $form = $this->formAction();
        $form->basicEntitySave($note, $input);

        return $form;
    }


    /**
     * @param $id
     * @param $with
     * @param $phraseKey
     * @return \xFaddons\Pad\Entity\Note
     * @throws \XF\Mvc\Reply\Exception
     */
    protected function assertNoteExists($id, $with = null, $phraseKey = null)
    {
        return $this->assertRecordExists('xFaddons\Pad:Note', $id, $with, $phraseKey);
    }
}
From the error it looks like it doesn't like this line of code:
Code:
$noteFinder = $this->finder('xFaddons\Pad:Note')

The code is correct from the video. Anyone have an idea as to why it doesn't work?

Thanks,
CipherX
 
I ran this through phpstorm xdebug and this is what the error message says:
Code:
C:\laragon\bin\php\php-8.4.4-nts-Win32-vs17-x64\php.exe C:\laragon\www\src\addons\xFaddons\Pad\Pub\Controller\Note.php

Fatal error: Uncaught Error: Class "XF\Pub\Controller\AbstractController" not found in C:\laragon\www\src\addons\xFaddons\Pad\Pub\Controller\Note.php:8
Stack trace:
#0 {main}
  thrown in C:\laragon\www\src\addons\xFaddons\Pad\Pub\Controller\Note.php on line 8

Any help would be much appreciated.
CipherX
 
Well after 2 days of trying to get this to work. After watching the videos over and over again. It came down to a simple Spelling error. 😭😭😭 I just wish the debugger would have given me more information as to the error and where it was located!
 
Well after 2 days of trying to get this to work. After watching the videos over and over again. It came down to a simple Spelling error. 😭😭😭 I just wish the debugger would have given me more information as to the error and where it was located!
Where was the spelling error? In the code block you shared, I can't detect it...I'm curious now.
 
Back
Top Bottom