1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Passing parameters to links

Discussion in 'XenForo Development Discussions' started by euantor, May 13, 2014.

  1. euantor

    euantor Well-Known Member

    I'm trying to create an extension for the ACP that requires a URL such as the following:

    Code:
    item/edit
    
    I have the following in my ItemController:

    Code:
      public function actionEdit()
      {
        if (!$this->hasAdminPermission('xd_items_mod_edit')) {
          return $this->responseNoPermission();
        }
    
        $itemId = $this->_input->filterSingle('item_id', XenForo_Input::UINT);
    
        var_dump($itemId);
      }
    
    My index template has the following code:

    Code:
      <ol class="FilterList">
         <xen:foreach loop="$items" key="$itemId" value="$item">
           <xen:listitem id="{$item.id}"
             href="{xen:if $canEditItems, {xen:adminlink 'items/edit', $item}}"
             label="{$item.title}"
             snippet="{$item.blurb}"
             delete="{xen:adminlink 'items/delete', $item}"
             deletehint="{xen:phrase xd_items_mod_delete}">
           </xen:listitem>
         </xen:foreach>
       </ol>
    
    My Route prefix class has the following code:

    Code:
    <?php
    
    class Test_Route_PrefixAdmin_Items implements XenForo_Route_Interface, XenForo_Route_BuilderInterface
    {
      /**
      * Method to be called when attempting to match this rule against a routing path.
      * Should return false if no matching happened or a {@link XenForo_RouteMatch} if
      * some level of matching happened. If no {@link XenForo_RouteMatch::$controllerName}
      * is returned, the {@link XenForo_Router} will continue to the next rule.
      *
      * @param string  $routePath Routing path
      * @param Zend_Controller_Request_Http $request  Request object
      * @param XenForo_Router  $router  Router that routing is done within
      *
      * @return false|XenForo_RouteMatch
      */
      public function match($routePath, Zend_Controller_Request_Http $request, XenForo_Router $router)
      {
      $action = $router->resolveActionWithIntegerParam($routePath, $request, 'item_id');
    
      return $router->getRouteMatch('Test_ControllerAdmin_Item', $action, 'items');
      }
    
      /**
      * Method to build a link to the specified page/action with the provided
      * data and params.
      *
      * @see XenForo_Route_BuilderInterface
      */
      public function buildLink($originalPrefix, $outputPrefix, $action, $extension, $data, array &$extraParams)
      {
      return XenForo_Link::buildBasicLinkWithIntegerParam($outputPrefix, $action, $extension, $data, 'item_id');
      }
    }
    
    
    However, when I hit the edit route, $itemId is always 0. Am missing something? Do I need to do something else with the route?
     
  2. euantor

    euantor Well-Known Member

    Whoops, found the issue. The field int eh database is simply "id", not "item_id". Therefore "item_id" isn't available as a parameter. Now I feel stupid...
     

Share This Page