Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, olha eu aqui de novo com mais um problema. Isso que dá aprender coisas novas né. Com códigos mais bem estruturados vem novos erros :v
É o seguinte,
tenho meu controller Index.php para renderizar minhas páginas
<?php
namespace App\Controllers;
use SON\Controller\Action;
use SON\DI\Container;
class Index extends Action
{
public function home()
{
$this->render('home');
}
public function business()$this->render('business');
}
}
Tenho o meu conteúdo que faz a gestão de dependência da conexão com o banco de dados
<?php
namespace SON\DI;
class Container
{
public static function getClass($name)
{
$str_class = "\\App\\Models\\" . ucfirst($name);
$class = new $str_class(\App\Init::getDb());
return $class;
}
}
E por fim a classe Table que faz as consultas e gerencia toda essa comunicação com o banco de dados
<?php
namespace SON\DB;
abstract class Table
{
protected $db;
protected $table;
public function __construct(\PDO $db)$this->db = $db;
}
public function fetchAll()$query = "SELECT * FROM {$this->table}";
return $this->db->query($query);
}
public function find($param, $valueParam)$stmt = $this->db->prepare("SELECT * FROM {$this->table} WHERE {$param} :{$param}");
$stmt->bindParam(":{$param}", $valueParam);
$stmt->execute();
$res = $stmt->fetch();
return $res;
}
}
Eu preciso ir no gastro e esse problema ta me deixando de cabelo em pé.
Ao tentar retornar um dos métodos da minha classe Table no meu controller, ele simplesmente não encontra sugestões para os meus métodos o que me leva a acreditar que deu ruim =/
public function home()
{
$test = Container::getClass("MyClass");
$test->no_sugestions; // Não funciona a chamada de nenhum dos dois métodos da classe Table
$this->render('home');
}
Como disse esse mundo é um pouco novo pra mim, mas não menos fascinante. Posso estar deixando passar alguma coisa aqui ou ali que meus olhos de aprendiz não me deixam ver então conto com a sapiência de vocês pra me ajuda :)
É um mini sistema e se precisarem do restante do código é só falar mas, basicamente, tudo funciona até aqui, com exceção desse problema apresentado.
Fala Heming, eu trabalho como phpStorm. Ela é ótima e sim, tem o autocompletar de todas as linguagens web. Porém nesse caso em específico, ela não encontra sugestões.
O fato da classe ser abstrata não me impede de chamar um método dela através de um objeto, ou impede?
Não impede.
Também pode ser pois dois motivos, a sua estruturação da classe MyClass, pois não está no seu código acima (pode ser a falta do Extends). Ou a IDE não reconheça que o método Container::getClass() retornará a classe passada como parâmetro. Isso também influência.
Tenda da seguinte forma:
$myClass = new MyClass();
Verifique se irá funcionar o autocompletar.
Caso positivo, é o problema de fraca tipagem do PHP que faz com que a IDE não entenda o que está sendo retornado.
Não funcionou dessa forma.
O código da model Home
<?php
namespace App\Models;
use SON\DB\Table;
class Home extends Table
{
protected $table = "artigos";
}
Apenas seta a tabela para pega os dados. E aqui no controller Index deveria fazer a atribuição para ser passado para o View, que é a home.phtml lá em baixo.
public function home()
{
$link = Container::getClass("Home");
$link->view->test = $link->find('id', 1);
$this->render('home');
}
Mas não vai. O phpStorm sempre me retorna o autocomplete de todos os códigos. É nesse trecho em específico que não está retornando.
home.phtml
<?php echo $this->view->test; ?>
Erro
Warning: Creating default object from empty value in D:\Server\public_html\App\Controllers\Index.php on line 12
O autocomplete, ou intellisense, é proveniente da IDE, e não da linguagem de programação.
A melhor IDE que tive o prazer de traabalhar, nessa questão, foi PHPDesigner, mas hoje ela é "abandonware", pois o desenvolvedor, de certa forma, abandonou o projeto e não liberou o fonte (já que é uma IDE paga).
Se não me engano, IDEs como NetBeans, Eclipse e Zend oferecem um bom suporte ao autocomplete. Outras IDEs, como PHPStorm, Aptana e Sublime, eu não possuo essa informação.
No linux eu uso Kate, que o recurso é bem precário mesmo.