/**
  * Prepare execute hook.
  *
  * @throws \UnexpectedValueException
  * @return void
  */
 protected function prepareExecute()
 {
     parent::prepareExecute();
     $this->user = $this->container->get('user');
     $this->lang = $this->container->get('language');
     $this->model = $this->getModel($this->viewItem);
     $this->table = $this->model->getTable($this->viewItem, $this->prefix . 'Table');
     // Determine model
     if (!$this->model instanceof CrudModel) {
         throw new \UnexpectedValueException(sprintf('%s model need extend to CrudModel', $this->name));
     }
     // Determine the name of the primary key for the data.
     if (empty($this->key)) {
         $this->key = $this->table->getKeyName();
     }
     // To avoid data collisions the urlVar may be different from the primary key.
     if (empty($this->urlVar)) {
         $this->urlVar = $this->key;
     }
 }
 /**
  * Method to get a model object, loading it if required.
  *
  * @param   string  $name     The model name. Optional.
  * @param   string  $prefix   The class prefix. Optional.
  * @param   array   $config   Configuration array for model. Optional.
  * @param   boolean $forceNew Force get new model, or we get it from cache.
  *
  * @return  object  The model.
  */
 public function getModel($name = null, $prefix = null, $config = array(), $forceNew = false)
 {
     return parent::getModel($name, $prefix, array('ignore_request' => true), $forceNew);
 }