Bonjour !
Je viens de terminer le tutoriel et j'ai un soucis à la fin.
lorsque je click sur "lire la suite" d'un article ce message apparait :
Une piste?
C:\Program Files (x86)\EasyPHP-5.3.9\www\site\controller\PostsController.php 23
Notice: Undefined index: file in C:\Program Files (x86)\EasyPHP-5.3.9\www\site\core\function.php on line 10
Notice: Undefined index: line in C:\Program Files (x86)\EasyPHP-5.3.9\www\site\core\function.php on line 10
C:\Program Files (x86)\EasyPHP-5.3.9\www\site\core\Dispatcher.php 11
C:\Program Files (x86)\EasyPHP-5.3.9\www\site\webroot\index.php 11
Array
(
[post] => stdClass Object
(
[id] => 3
[slug] => premier-article
[content] =>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
[name] => Mon premier article
)
)
Ma première page Ma seconde page Actualites
Mon premier article
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Tu as une erreur dans ton fichier function.php dans la function debug car il dit qu'il connait pas index et file donc donne nous ta fonction debug
Il n'y a pas d'errer dans ma fonction debug :s l'erreur venais du fait que j'avais laisser des appels a cette fonctions..
Néanmoins j'ai toujours un soucis.
Lorsque je suis sur mes pages de site, l'url est bonne :
Quand je vais dans Actualités ca me met ca :
Et quand je fais "lire la suite" des articles :
Alors que moi je veux que le détail des articles soit sous la même forme que dans le tuto c'est à dire :
Je met le code ci dessous : !
// ############################################## conf.php ##############################################
<?php
class Conf{
//Si debug = 0, on cache le debug
static $debug = 1;
static $databases = array(
'default' => array(
'host'=>'localhost',
'database' => 'site',
'login' => 'root',
'password' => ''
)
);
}
Router::connect('/','posts/index');
Router::connect('post/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect('blog/:action','posts/:action');
// ############################################## view/post/index.php ##############################################
<?php foreach($posts as $k=>$v): ?>
<h2><?php echo $v->name; ?></h2>
<?php echo $v->content; ?>
<p><a href="<?php echo Router::url("posts/view/id:{$v->id}/slug:$v->slug"); ?>"> Lire la suite →</a></p>
<?php endforeach ?>
<!-- Pour la pagination -->
<div>
<ul>
<?php for($i=1; $i<=$page; $i++ ): ?>
<li <?php if($i==$this->request->page) echo 'class="NumPageActif"'; ?>><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php endfor; ?>
<li></li>
</ul>
</div>
// ############################################## Router.php ##############################################
<?php
class Router{
static $routes = array();
/**
*Permet de parser une url
*@param $url Url à parser
*@return tableau cotnenant les paramètres
*/
static function parse($url,$request){
$url = trim($url,'/');
if(empty($url)){
$url = Router::$routes[0]'url'];
}else{
foreach(Router::$routes as $v){
if(preg_match($v'catcher'],$url ,$match)){
$request->controller = $v'controller'];
$request->action = isset($match'action']) ? $match'action'] : $v'action'];
$request->params = array();
foreach($v'params'] as $k => $v){
$request->params$k] = $match$k];
}
if(!empty($match'args'])){
$request->params += explode('/',trim($match'args'],'/'));
}
return $request;
}
}
}
$params=explode('/',$url);
$request->controller = $params[0];
$request->action = isset($params[1]) ? $params[1] : 'index' ;
$request->params = array_splice($params,2);
return true;
}
/**
* Connect
*/
static function connect($redir,$url){
$r = array();
$r'params'] = array();
$r'url'] = $url;
$r'redir'] = $redir;
$r'origin'] = str_replace(':action','(?P<action>([a-z0-9]+))',$url);
$r'origin'] = preg_replace('/([a-z0-9]+):(^\/]+)/','${1}:(?P<${1}>${2})',$r'origin']);
$r'origin'] = '/^'.str_replace('/','\/',$r'origin']).'(?P<args>\/?.*)$/';
$params = explode('/',$url);
foreach($params as $k => $v){
if(strpos($v,':')){
$p = explode(':',$v);
$r'params']$p[0]] = $p[1];
}else{
if($k == 0){
$r'controller'] = $v;
}elseif($k == 1){
$r'action'] = $v;
}
}
}
$r'catcher'] = $redir;
$r'catcher'] = str_replace(':action','(?P<action>([a-z0-9]+))',$r'catcher']);
foreach($r'params'] as $k => $v){
$r'catcher'] = str_replace(":$k","(?P<$k>$v)",$r'catcher']);
}
$r'catcher'] = '/^'.str_replace('/','\/',$r'catcher']).'(?P<args>\/?.*)$/';
self::$routes] = $r;
}
/**
* url
*/
static function url($url){
foreach(self::$routes as $v){
if (preg_match($v'origin'],$url,$match)){
foreach($match as $k => $w){
if(!is_numeric($k)){
$v'redir'] = str_replace(":$k",$w,$v'redir']);
}
}
return BASE_URL.str_replace('//','/','/'.$v'redir']).$match'args'];
}
}
return BASE_URL.'/'.$url;
}
}
// ############################################## PostsController ##############################################
<?php
class PostsController extends Controller{
function index(){
$perPage = 1; // Définit le nombre d'articles par page !!
$this->loadModel('Post');
$condition = array('online'=>1,'type'=>'post');
$d'posts'] = $this->Post->find(array(
'conditions' => $condition,
'limit' => ($perPage*($this->request->page-1)).','.$perPage
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
function view($id,$slug){
$this->loadModel('Post');
$d'post'] = $this->Post->findFirst(array(
'fields' => 'id,slug,content,name',
'conditions' => array('online'=>1,'id'=>$id,'type'=>'post')
));
//debug($d);
if(empty($d'post'])){
$this->e404('Page introuvable');
}
if($slug != $d'post']->slug){
$this->redirect("posts/view/id:$id/slug:".$d'post']->slug,301);
}
$this->set($d);
}
}
Dans ton fichier Conf, le $debug est égal à 1 ?
L'erreur parle d'elle même il n'existe pas d'index file et line dans la variable $debug.
Voilà ma fonction debug:
<?php
function debug($var){
if (Conf::$debug>0){
$debug = debug_backtrace();
echo '<p> </p><p><a href="#" onclick="$(this).parent().next
(\'ol\').slideToggle(); return false;"><strong>'.$debug[0]'file'].' </strong> l.'.$debug[0]'line'].'</a></p>';
echo '<ol style="display:none;">';
foreach($debug as $k => $v){ if($k>0){
echo '<li><strong>'.$v'file'].'</strong> Ligne.'.$v'line'].'</li>';
}}
echo '</ol>';
echo '<pre>';
print_r($var);
echo '</pre>';
}
}
?>
Oui exact Xtr3me ;)
Par contre est-ce que tu sais comment faire pour que le détail de mes articles soit sous la forme site/blog et non plus site/post ?
Tu peux soit utiliser la réécriture d'url avec un .htaccess en envoyant plus de paramètre dans l'url par exemple au lieu d'envoyer seulement le numéro de la page tu mets aussi le nom:
le .htaccess donnerait un truc du genre:
RewriteEngine on
RewriteRule ^site\/?page=([0-9]+)&name=(.*)$ site\/post\/blog\/$2-$1 [QSA,L]
Sinon si tu veux faire comme grafikart il faut regarder au niveau du code de ta fonction connect, peut être qu'il y a une erreur ou je ne sais quoi.
Voici ma fonction connect qui est assez différente de la tienne:
/**
* Permet de connecter une url à une action particulière.
**/
static function connect($redir,$url){
$r = array();
$r'params'] = array();
$r'url'] = $url;
$r'originreg'] = preg_replace('/([a-z0-9]+):(^\/]+)/','${1}:(?P<${1}>${2})',$url);
$r'originreg'] = str_replace('/*','(?<args>/?.*)',$r'originreg']);
$r'originreg'] = '/^'.str_replace('/', '\/', $r'originreg']).'$/';
//MODIF
$r'origin'] = preg_replace('/([a-z0-9]+):(^\/]+)/',':${1}:',$url);
$r'origin'] = str_replace('/*',':args:',$r'origin']);
$params = explode('/',$url);
foreach($params as $k=>$v){
if(strpos($v,':')){
$p = explode(':',$v);
$r'params']$p[0]] = $p[1];
}
}
$r'redirreg'] = $redir;
$r'redirreg'] = str_replace('/*','(?<args>/?.*)',$r'redirreg']);
foreach($r'params'] as $k=>$v){
$r'redirreg'] = str_replace(":$k","(?P<$k>$v)",$r'redirreg']);
}
$r'redirreg'] = '/^'.str_replace('/', '\/', $r'redirreg']).'$/';
$r'redir'] = preg_replace('/:([a-z0-9]+)/',':${1}:',$redir);
$r'redir'] = str_replace('/*',':args:',$r'redir']);
self::$routes] = $r;
}