丝绸之路php
Silm routing php
我在 mySql 中创建了一个数据库,并且有一个用于投资组合项目的页面。但是,当我尝试通过 id 为投资组合的项目创建 link 时,我不断收到错误消息。
苗条的我看过了docs
我还查看了 Whosebug 上已有的各种问题,包括;
这个question
我还查看了一些关于组路由的内容,但仍然感到困惑。我已经在互联网上阅读过关于使用 PDO 的信息,但还没有涉及到。我正在徘徊是否有一种方法可以在单击模板时路由投资组合项目,其中 url 将使用 mysql table?[= 中行的 ID 号19=]
这是我的索引文件,如果您需要查看更多,请告诉我。
非常感谢
<?php
require __DIR__ . '/vendor/autoload.php';
date_default_timezone_set ( "Europe/London" );
$app = new \Slim\Slim( array(
'view' => new \Slim\Views\Twig()
));
$view = $app->view();
$view->parserOptions = array(
'debug' => true,
);
$view->parserExtensions = array(
new \Slim\Views\TwigExtension(),
);
$dbc = mysqli_connect('localhost','root','pass','tom_db')
or die('Error Connecting to mysql server');
$query = "SELECT id FROM documentaries";
$result = mysqli_query($dbc,$query);
while ($row = mysqli_fetch_assoc($result)){
$data[] = $row["id"];
}
//what happens here is what will run with our object
$app->get('/', function() use($app){
$app->render('about.twig');
});
//portfolio page
$app->get('/portfolio', function() use ($app) {
$app->render('portfolio.twig');
});
$app->get('portfolio/{id}', function ($id) {
$app->render('portfolioitem.twig', array(
'data' => $data
));
});
$app->get('/contact', function() use($app){
$app->render('contact.twig');
})->name('contact');
$app->run();
?>
EDIT/UPDATE:
我遇到的错误是,当单击投资组合 link 时,它不会呈现 url portfolio/1 但是如果我手动输入 url浏览器呈现 html 没有样式。我正在渲染一个树枝文件,但它似乎不起作用
这是我更新的索引文件;
<?php
require __DIR__ . '/vendor/autoload.php';
date_default_timezone_set ( "Europe/London" );
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$app = new \Slim\Slim( array(
'view' => new \Slim\Views\Twig()
));
$view = $app->view();
$view->parserOptions = array(
'debug' => true,
);
$view->parserExtensions = array(
new \Slim\Views\TwigExtension(),
);
//what happens here is what will run with our object
$app->get('/', function() use($app){
$app->render('about.twig');
});
//portfolio page
$app->get('/portfolio', function() use($app){
$app->render('portfolio.twig');
})->name('portfolio');
//this is function where the problem is, when in the portfolio.twig file it does not link to this
$app->get('/portfolio/:id', function ($id) use ($app) {
// include out mysql connection code and make the connection
$db = mysqli_connect('localhost', 'root', 'pass', 'tom_db');
// query the database
$rs = mysqli_query($db, "SELECT id FROM documentaries WHERE id=$id" );
// convert the record set into an associative array so we can work with it easily
$data = mysqli_fetch_assoc($rs);
$app->render('portfolioitem.twig', array(
'data' => $data
)
);
});
$app->get('/contact', function() use($app){
$app->render('contact.twig');
})->name('contact');
$app->run();
?>
编辑:添加了额外的树枝文件
这是我的portfolioitem.twig
{% extends 'main.twig' %}
{% block nav %}
<ul>
<li><a href="{{ baseUrl() }}" >About</a></li>
<li><a href="{{ siteUrl('/portfolio') }}" class="selected">Portfolio</a></li>
<li><a href="{{ siteUrl('/clients') }}">Clients</a></li>
<li><a href="{{ siteUrl('/teaching') }}">Teaching</a></li>
<li><a href="{{ siteUrl('/contact') }}">Contact</a></li>
</ul>
{% endblock nav %}
{% block content %}
<section>
<h2>This is a test</h2>
</section>
{% endblock content %}
这是我的portfolio.twig
{% extends 'main.twig' %}
{% block nav %}
<ul>
<li><a href="{{ baseUrl() }}" >About</a></li>
<li><a href="{{ siteUrl('/portfolio') }}" class="selected">Portfolio</a></li>
<li><a href="{{ siteUrl('/clients') }}">Clients</a></li>
<li><a href="{{ siteUrl('/teaching') }}">Teaching</a></li>
<li><a href="{{ siteUrl('/contact') }}">Contact</a></li>
</ul>
{% endblock nav %}
{% block content %}
<section>
<div class="showreel-container">
<iframe src="https://player.vimeo.com/video/148640837?title=0&byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</div>
</section>
<section>
<div id="controls" id="Controls">
<button class="filter" data-filter="all">All</button>
<button class="filter" data-filter=".documentaries">Documentary</button>
<button class="filter" data-filter=".commercial">Commercial</button>
<button class="filter" data-filter=".charity">Charity/NGO/Commisions</button>
<button class="filter" data-filter=".music">Music</button>
<button class="filter" data-filter=".drama">Drama</button>
</div>
<div id="Container" class="container">
<div class="mix documentaries" data-myorder="1"><a href="portfolio/{{ data.id }}"><img src="img/numbers-01" alt="Image one"/></a></div>
<div class="mix commercial" data-myorder="2"><a href=""><img src="img/numbers-02" alt="Image two"/></a></div>
<div class="mix commerical" data-myorder="3"><a href=""><img src="img/numbers-06" alt="Image six"/></a></div>
<div class="mix charity" data-myorder="4"><a href=""><img src="img/numbers-09" alt="Image nine"/></a></div>
<div class="mix music" data-myorder="5"><a href=""><img src="img/numbers-12" alt="Image twelve"/></a></div>
<div class="mix drama" data-myorder="6"><a href=""><img src="img/numbers-01" alt="Image one"/></a></div>
<div class="mix music" data-myorder="5"><a href=""><img src="img/numbers-12" alt="Image twelve"/></a></div>
<div class="mix charity" data-myorder="5"><a href=""><img src="img/numbers-12" alt="Image twelve"/></a></div>
<div class="gap"></div>
<div class="gap"></div>
</div>
</section>
{% endblock content %}
最后这是我的 main.twig 文件;
<!DOCTYPE html>
<html>
<head>
{% block head %}
<meta charset="utf-8">
<title>Tom Turner - Director of Photography</title>
<link rel="stylesheet" href="css/normalize.css">
<link href='https://fonts.googleapis.com/css?family=Changa+One|Open+Sans:400,400italic,700,700italic,800' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.mixitup.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/responsivemenu.js"></script>
{% endblock head %}
</head>
<body>
<header>
<a href="index.html" id="logo">
<h1>Tom Turner</h1>
<h2>Director of Photography</h2>
</a>
<nav>
{% block nav %}
<ul>
<li><a href="{{ baseUrl() }}" class="selected">About</a></li>
<li><a href="{{ siteUrl('/portfolio') }}">Portfolio</a></li>
<li><a href="{{ siteUrl('/clients') }}">Clients</a></li>
<li><a href="{{ siteUrl('/teaching') }}">Teaching</a></li>
<li><a href="{{ siteUrl('/contact') }}">Contact</a></li>
</ul>
{% endblock nav %}
</nav>
</header>
<div id="wrapper">
{% block content %}
{% endblock content %}
</div>
<footer class="main-footer">
{% block footer %}
<div id="footer-notes">
<p>Tom Turner - Director of Photography</p>
<p>© Tom Turner - All Rights Reserved</p>
</div>
<div id="mayur">
<p>© 2015 Website by <a href="https//:www.mayurpande.com">Mayur Pande</a></p>
</div>
<div class="social-media">
<ul>
<li><a href="mailto:tom@allritesreversed.co.uk"><img src="img/mail_circle.png" alt="Email Logo" /></a></li>
<li><a href="https://www.facebook.com/tom.turner.397501?fref=ts"><img src="img/fbcircle.png" alt="Facebook Logo" /></a></li>
<li><a href="https://vimeo.com/user6107855"><img src="img/vimeo_circle.png" alt="Vimeo Logo" /></a></li>
<li><a href="https://twitter.com/intent/tweet?screen_name=mayurpandeuk"><img src="img/twitter_circle.png" alt="Twitter Logo" /></a></li>
</ul>
</div>
{% endblock footer %}
</footer>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.mixitup.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/responsivemenu.js"></script>
</body>
</html>
我的 htaccess 文件;
RewriteEngine On
# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.
#
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
您的样式表是相对于当前 URL 路径的,因此当您位于
/portfolio
,它会寻找/portfolio/main.css
。更新您的 link 元素以包含站点 URL,或者使用 /main.css
使它们相对于根目录(注意开头的 /
)。
这同样适用于模板中的 links,portfolio/{{ data.id }}
将尝试指向 /portfolio/portfolio/{{ data.id }}
,再次将站点 url 添加到开头,或添加斜杠。
如果您使用的是 Slim V3,请考虑使用 https://github.com/slimphp/Twig-View
或者对于 V2,使用 https://github.com/slimphp/Slim-Views、编辑: 刚刚注意到您已经在使用它。
它允许您命名路线,例如:
$app->get('/portfolio/:id', function ($id) use ($app) {
...
$app->render('portfolioitem.twig', array(
'data' => $data
)
);
})->name('portfolio.id');
然后用
引用模板中的 url
{{ urlFor('portfolio.id', {"id": 17 }) }}
这意味着如果您的 URL 发生变化,所有引用它的 link 都会同时自动更新。
您还需要确保 .htaccess
文件配置正确。如 http://docs.slimframework.com/routing/rewrite/ 的 Slim 文档所示,它应该包含
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
第 2 期
您是 运行 您的查询,它在 $data
中产生一组结果,但是您正尝试使用 {{ data.id }}
访问第一个结果,首先,您需要循环数据使用
{% for item in data %}
,那么你就可以使用{{ item.id }}
了。或者,从您的 PHP 中获取第一项,例如 $data = $data[0]
,然后将其传递到您的模板中。
我在 mySql 中创建了一个数据库,并且有一个用于投资组合项目的页面。但是,当我尝试通过 id 为投资组合的项目创建 link 时,我不断收到错误消息。
苗条的我看过了docs
我还查看了 Whosebug 上已有的各种问题,包括;
这个question
我还查看了一些关于组路由的内容,但仍然感到困惑。我已经在互联网上阅读过关于使用 PDO 的信息,但还没有涉及到。我正在徘徊是否有一种方法可以在单击模板时路由投资组合项目,其中 url 将使用 mysql table?[= 中行的 ID 号19=]
这是我的索引文件,如果您需要查看更多,请告诉我。 非常感谢
<?php
require __DIR__ . '/vendor/autoload.php';
date_default_timezone_set ( "Europe/London" );
$app = new \Slim\Slim( array(
'view' => new \Slim\Views\Twig()
));
$view = $app->view();
$view->parserOptions = array(
'debug' => true,
);
$view->parserExtensions = array(
new \Slim\Views\TwigExtension(),
);
$dbc = mysqli_connect('localhost','root','pass','tom_db')
or die('Error Connecting to mysql server');
$query = "SELECT id FROM documentaries";
$result = mysqli_query($dbc,$query);
while ($row = mysqli_fetch_assoc($result)){
$data[] = $row["id"];
}
//what happens here is what will run with our object
$app->get('/', function() use($app){
$app->render('about.twig');
});
//portfolio page
$app->get('/portfolio', function() use ($app) {
$app->render('portfolio.twig');
});
$app->get('portfolio/{id}', function ($id) {
$app->render('portfolioitem.twig', array(
'data' => $data
));
});
$app->get('/contact', function() use($app){
$app->render('contact.twig');
})->name('contact');
$app->run();
?>
EDIT/UPDATE:
我遇到的错误是,当单击投资组合 link 时,它不会呈现 url portfolio/1 但是如果我手动输入 url浏览器呈现 html 没有样式。我正在渲染一个树枝文件,但它似乎不起作用
这是我更新的索引文件;
<?php
require __DIR__ . '/vendor/autoload.php';
date_default_timezone_set ( "Europe/London" );
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$app = new \Slim\Slim( array(
'view' => new \Slim\Views\Twig()
));
$view = $app->view();
$view->parserOptions = array(
'debug' => true,
);
$view->parserExtensions = array(
new \Slim\Views\TwigExtension(),
);
//what happens here is what will run with our object
$app->get('/', function() use($app){
$app->render('about.twig');
});
//portfolio page
$app->get('/portfolio', function() use($app){
$app->render('portfolio.twig');
})->name('portfolio');
//this is function where the problem is, when in the portfolio.twig file it does not link to this
$app->get('/portfolio/:id', function ($id) use ($app) {
// include out mysql connection code and make the connection
$db = mysqli_connect('localhost', 'root', 'pass', 'tom_db');
// query the database
$rs = mysqli_query($db, "SELECT id FROM documentaries WHERE id=$id" );
// convert the record set into an associative array so we can work with it easily
$data = mysqli_fetch_assoc($rs);
$app->render('portfolioitem.twig', array(
'data' => $data
)
);
});
$app->get('/contact', function() use($app){
$app->render('contact.twig');
})->name('contact');
$app->run();
?>
编辑:添加了额外的树枝文件
这是我的portfolioitem.twig
{% extends 'main.twig' %}
{% block nav %}
<ul>
<li><a href="{{ baseUrl() }}" >About</a></li>
<li><a href="{{ siteUrl('/portfolio') }}" class="selected">Portfolio</a></li>
<li><a href="{{ siteUrl('/clients') }}">Clients</a></li>
<li><a href="{{ siteUrl('/teaching') }}">Teaching</a></li>
<li><a href="{{ siteUrl('/contact') }}">Contact</a></li>
</ul>
{% endblock nav %}
{% block content %}
<section>
<h2>This is a test</h2>
</section>
{% endblock content %}
这是我的portfolio.twig
{% extends 'main.twig' %}
{% block nav %}
<ul>
<li><a href="{{ baseUrl() }}" >About</a></li>
<li><a href="{{ siteUrl('/portfolio') }}" class="selected">Portfolio</a></li>
<li><a href="{{ siteUrl('/clients') }}">Clients</a></li>
<li><a href="{{ siteUrl('/teaching') }}">Teaching</a></li>
<li><a href="{{ siteUrl('/contact') }}">Contact</a></li>
</ul>
{% endblock nav %}
{% block content %}
<section>
<div class="showreel-container">
<iframe src="https://player.vimeo.com/video/148640837?title=0&byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</div>
</section>
<section>
<div id="controls" id="Controls">
<button class="filter" data-filter="all">All</button>
<button class="filter" data-filter=".documentaries">Documentary</button>
<button class="filter" data-filter=".commercial">Commercial</button>
<button class="filter" data-filter=".charity">Charity/NGO/Commisions</button>
<button class="filter" data-filter=".music">Music</button>
<button class="filter" data-filter=".drama">Drama</button>
</div>
<div id="Container" class="container">
<div class="mix documentaries" data-myorder="1"><a href="portfolio/{{ data.id }}"><img src="img/numbers-01" alt="Image one"/></a></div>
<div class="mix commercial" data-myorder="2"><a href=""><img src="img/numbers-02" alt="Image two"/></a></div>
<div class="mix commerical" data-myorder="3"><a href=""><img src="img/numbers-06" alt="Image six"/></a></div>
<div class="mix charity" data-myorder="4"><a href=""><img src="img/numbers-09" alt="Image nine"/></a></div>
<div class="mix music" data-myorder="5"><a href=""><img src="img/numbers-12" alt="Image twelve"/></a></div>
<div class="mix drama" data-myorder="6"><a href=""><img src="img/numbers-01" alt="Image one"/></a></div>
<div class="mix music" data-myorder="5"><a href=""><img src="img/numbers-12" alt="Image twelve"/></a></div>
<div class="mix charity" data-myorder="5"><a href=""><img src="img/numbers-12" alt="Image twelve"/></a></div>
<div class="gap"></div>
<div class="gap"></div>
</div>
</section>
{% endblock content %}
最后这是我的 main.twig 文件;
<!DOCTYPE html>
<html>
<head>
{% block head %}
<meta charset="utf-8">
<title>Tom Turner - Director of Photography</title>
<link rel="stylesheet" href="css/normalize.css">
<link href='https://fonts.googleapis.com/css?family=Changa+One|Open+Sans:400,400italic,700,700italic,800' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.mixitup.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/responsivemenu.js"></script>
{% endblock head %}
</head>
<body>
<header>
<a href="index.html" id="logo">
<h1>Tom Turner</h1>
<h2>Director of Photography</h2>
</a>
<nav>
{% block nav %}
<ul>
<li><a href="{{ baseUrl() }}" class="selected">About</a></li>
<li><a href="{{ siteUrl('/portfolio') }}">Portfolio</a></li>
<li><a href="{{ siteUrl('/clients') }}">Clients</a></li>
<li><a href="{{ siteUrl('/teaching') }}">Teaching</a></li>
<li><a href="{{ siteUrl('/contact') }}">Contact</a></li>
</ul>
{% endblock nav %}
</nav>
</header>
<div id="wrapper">
{% block content %}
{% endblock content %}
</div>
<footer class="main-footer">
{% block footer %}
<div id="footer-notes">
<p>Tom Turner - Director of Photography</p>
<p>© Tom Turner - All Rights Reserved</p>
</div>
<div id="mayur">
<p>© 2015 Website by <a href="https//:www.mayurpande.com">Mayur Pande</a></p>
</div>
<div class="social-media">
<ul>
<li><a href="mailto:tom@allritesreversed.co.uk"><img src="img/mail_circle.png" alt="Email Logo" /></a></li>
<li><a href="https://www.facebook.com/tom.turner.397501?fref=ts"><img src="img/fbcircle.png" alt="Facebook Logo" /></a></li>
<li><a href="https://vimeo.com/user6107855"><img src="img/vimeo_circle.png" alt="Vimeo Logo" /></a></li>
<li><a href="https://twitter.com/intent/tweet?screen_name=mayurpandeuk"><img src="img/twitter_circle.png" alt="Twitter Logo" /></a></li>
</ul>
</div>
{% endblock footer %}
</footer>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.mixitup.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/responsivemenu.js"></script>
</body>
</html>
我的 htaccess 文件;
RewriteEngine On
# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.
#
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
您的样式表是相对于当前 URL 路径的,因此当您位于
/portfolio
,它会寻找/portfolio/main.css
。更新您的 link 元素以包含站点 URL,或者使用 /main.css
使它们相对于根目录(注意开头的 /
)。
这同样适用于模板中的 links,portfolio/{{ data.id }}
将尝试指向 /portfolio/portfolio/{{ data.id }}
,再次将站点 url 添加到开头,或添加斜杠。
如果您使用的是 Slim V3,请考虑使用 https://github.com/slimphp/Twig-View
或者对于 V2,使用 https://github.com/slimphp/Slim-Views、编辑: 刚刚注意到您已经在使用它。
它允许您命名路线,例如:
$app->get('/portfolio/:id', function ($id) use ($app) {
...
$app->render('portfolioitem.twig', array(
'data' => $data
)
);
})->name('portfolio.id');
然后用
引用模板中的 url{{ urlFor('portfolio.id', {"id": 17 }) }}
这意味着如果您的 URL 发生变化,所有引用它的 link 都会同时自动更新。
您还需要确保 .htaccess
文件配置正确。如 http://docs.slimframework.com/routing/rewrite/ 的 Slim 文档所示,它应该包含
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
第 2 期
您是 运行 您的查询,它在 $data
中产生一组结果,但是您正尝试使用 {{ data.id }}
访问第一个结果,首先,您需要循环数据使用
{% for item in data %}
,那么你就可以使用{{ item.id }}
了。或者,从您的 PHP 中获取第一项,例如 $data = $data[0]
,然后将其传递到您的模板中。