Nenalezení dané Class NiftyGrid\Grid
- Nevinho
- Člen | 77
Zdravím, naimportoval jsem si novou vezri nette a trošku se ztrácím v namespaces.
Mám Elektro → app/model/ProductGrid
<?php
use NiftyGrid\Grid;
class ProductGrid extends Grid
{
protected $products;
public function __construct($products)
{
parent::__construct();
$this->product = $products;
}
protected function configure($presenter)
{
$source = new \NiftyGrid\DataSource\NDataSource($this->product->select('product.ID,Title,Price,Description'));
$this->setDataSource($source);
$this->setWidth("600px");
$this->addColumn('Title', 'Název produktu', '190px')
->setTextFilter()
// ->setSelectEditable($presenter->context->database->table('firmy')->fetchPairs('id','nazev_firmy'),"-Vybrat firmu-")
->setAutocomplete(5);
$this->addColumn('Price', 'Cena', '100px')
->setNumberFilter()
->setTextEditable()
->setAutocomplete(5);
$this->addColumn('Description', 'Popis produktu', '200px')
->setTextFilter()
->setTextEditable()
->setAutocomplete(5);
$self = $this;
$this->setRowFormCallback(function($values) use ($self, $presenter){
$produkt=array('id'=>$values['id'],'Title'=>$values['title'],'Price'=>$values['typ'],'Description'=>$values['Description']);
if(isset($values['id'])){
$presenter->database->table('product')->where("id", $values["id"])->update($produkt);
$self->flashMessage("Pobočka byla editována!", "grid-successful");
}
else{
$presenter->database->table('product')->insert($produkt);
$self->flashMessage("PoboÄŤka byla vloĹľena!", "grid-info");
}
}
);
$this->addButton(Grid::ROW_FORM, "Editace")
->setClass("fast-edit");
$this->addGlobalButton(Grid::ADD_ROW, 'Přidat novou pobočku');
$this->addButton("delete", "Smazat")
->setClass("delete")
->setAjax(FALSE)
->setLink(function($row) use ($self){return $self->link("delete!", $row['id']);})
->setConfirmationDialog(function($row){return "UrÄŤitÄ› chcete smazat tuto poboÄŤku?";});
}
function handleDelete($id) {
$this->pobocky->where('id',$id)->delete();
$this->flashMessage("Pobočka byla smazána","grid-info");
$this->redirect('this');
}
}
Dále mám Elektro->app\presenters\DataPresenter
<?php
namespace App\Presenters;
/**
* Description of DataPresenter
*
* @author Jirka
*/
class DataPresenter extends BasePresenter {
protected function startup()
{
parent::startup();
if (!$this->user->isLoggedIn()) {
$this->redirect('Sign:in', array('backlink' => $this->storeRequest()));
}
}
protected function createComponentProductGrid()
{
return new \ProductGrid($this->context->database->table("product"));
}
}
Data:product.latte
{block #content}
<h1>Products</h1>
{control productGrid}
a config neon:
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
parameters:
php:
date.timezone: Europe/Prague
# zlib.output_compression: yes
nette:
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
services:
- App\RouterFactory
- App\Users
router: @App\RouterFactory::createRouter
authenticator: Authenticator
Jinak NiftyGrid\Grid je ulozen v Elektro->vendor\NiftyGrid\Grid
Problém je že když chci přistoupit k tomu productGrid tak mi to hodí hlášku Class ‚NiftyGrid\Grid‘ not found, vím že bude někde chyba v namespaces, ale nevím jak na to, vyzkoušel jsem už mnoho kombinací a nemůžu na to dojít :-(. Poradí někdo? Díkec.
- amik
- Člen | 118
Sice jsi sem hodil kilometr kódu :) , což není na fóru úplně žádané (navíc, jak by s tím mohl souviset data presenter, případně config?), ale zdroják té třídy NiftyGrid ne :) Pokud tu třídu skutečně máš a je definovaná v namespace NiftyGrid, bude to spíš nějaký problém s autoloadingem.
Pro příště, než se zeptáš na fóru, zkus chybu lépe izolovat, na dotazy typu „tady máte tisíc řádků kódu, někde mám chybu a neumím jí najít“, obvykle nikdo neodpovídá.