承接前面的tutorial小例子,本篇根据其官方网站的例子来一个url以及form的提交。难点在于正确得获取目标链接的url地址。Phalcon 4 这里默认不再指向IndexController.php,所以需要做个修改。
1.链接跳转
在index的view中添加上链接,app/views/index/index.phtml代码如下:
<?php
echo "<h1>Hello!!</h1><br>";
$path = strpos(BASE_PATH,'\\')? substr(BASE_PATH,strrpos(BASE_PATH,'\\')+1):substr(BASE_PATH,strrpos(BASE_PATH,'/')+1);
echo PHP_EOL;
echo PHP_EOL;
echo $this->tag->linkTo(
$path .'/'.'signup/hi',
'Sign Up Here!'
);
我这里的BASE_PATH是个xampp/htdocs/tutorial,需要把tutorial截取出来
substr(BASE_PATH,strrpos(BASE_PATH,’\’)+1):substr(BASE_PATH,strrpos(BASE_PATH,’/’)+1); 否则会跳到根目录。这里,我们把链接的目标指向SignupController.php的hiAction
然后,修改app/controllers/SignupController.php
<?php
declare(strict_types=1);
class SignupController extends ControllerBase
{
public function indexAction()
{
}
public function hiAction(){
$this->view->disable();
echo '<h1>Just say hi</h1>';
}
}
打开localhost/tutorial/,显示如下
然后,点击链接,后调到SignupController.php的hiAction
2.表单Form跳转
Form中可以拥有的元素很多,这里仅仅以文本框和get方法提交为例。更多的form元素类型,请查看phalcon 的Tag部分。app/views/signup/index.phtml代码如下。注意,仍然需要注意url路径的问题 。
<h2>Sign up using this form</h2>
<?php
$path = strpos(BASE_PATH,'\\')? substr(BASE_PATH,strrpos(BASE_PATH,'\\')+1):substr(BASE_PATH,strrpos(BASE_PATH,'/')+1);
echo $this->tag->form($path."/signup/register"); ?>
<p>
<label for="name">Name</label>
<?php echo $this->tag->textField("name"); ?>
</p>
<p>
<label for="email">E-Mail</label>
<?php echo $this->tag->textField("email"); ?>
</p>
<p>
<?php echo $this->tag->submitButton("Register"); ?>
</p>
</form>
然后,修改SignupController.php.这里的Request用来获取form的值。
<?php
declare(strict_types=1);
use Phalcon\Http\Request;
class SignupController extends ControllerBase
{
public function indexAction()
{
}
public function hiAction(){
$this->view->disable();
echo '<h1>Just say hi</h1>';
}
public function registerAction()
{
$request = new Request();
$name = $request->get('name');
$email = $request->get('email');
$this->view->disable();
echo $name.'=='.$email;
}
}
localhost/tutorial/signup效果如下
输入后,点击Register,显示如下:
齐活。
后记: 为方便起见,由于我没有修改Phalcon
4自己生成的.htaccess文件,所以没有修改其代码以更好得适应url路径。