fhalconでMVCに沿ったアプリケーションの作成方法
fhalconでMVCに沿ったアプリケーションの作成方法です。
チュートリアルやりましたが、英語しかなく、簡単なことをいちいち英語で参照するのはめんどくさいので、備忘録。
投稿ができるようになっていて、
「一覧、新規作成、削除,検索」
ができます。
編集も以下のコードを参考にやれば簡単です。
コントローラー作成
app/controllers/PostController.php
<?php
use Phalcon\Mvc\Controller;
class PostController extends Controller
{
public function indexAction()
{
#全てを取得
$this->view->posts = Posts::find();
}
#新規投稿ページ表示
public function newAction()
{
}
#新規投稿保存
public function createAction()
{
$post = new Posts();
// Store and check for errors
$success = $post->save(
$this->request->getPost(),
[
"message"
]
);
if ($success) {
echo "Thanks for registering!";
} else {
echo "Sorry, the following problems were generated: ";
$messages = $post->getMessages();
foreach ($messages as $message) {
echo $message->getMessage(), "<br/>";
}
}
$this->view->disable();
}
}
#formから送られてきた新しいデータを保存
public function createAction()
{
$post = new Posts();
$success = $post->save(
$this->request->getPost(),
[
"message"
]
);
if ($success) {
echo "Thanks for registering!";
} else {
echo "Sorry, the following problems were generated: ";
$messages = $post->getMessages();
foreach ($messages as $message) {
echo $message->getMessage(), "<br/>";
}
}
$this->view->disable();
}
#hogeAction($パラメータ)でurlにあるパラメータの値を取得
public function deleteAction($id)
{
$post = Posts::findFirstById($id);
$post->delete();
$this->response->redirect("/post");
}
public function sendAction()
{
#フォームから送られてきた値は$this->request->getPost('name属性');で取得可能
$id = $this->request->getPost('id');
$post = Posts::findFirst($id);
// privateメソッドを作り、参照することも可能
$this->sendToLine($post);
echo "Thanks for sending!";
$this->view->disable();
// return $this->response->redirect("/");
}
//privateメソッド
private function sendToLine($post)
{
#何らかの処理
}
#検索
public function searchAction()
{
$numberPage = 1;
#POSTメソッドで送られてきたかどうかチェック
if ($this->request->isPost()) {
$query = Criteria::fromInput($this->di, "Posts", $this->request->getPost());
$this->persistent->searchParams = $query->getParams();
} else {
$numberPage = $this->request->getQuery("page", "int");
}
$parameters = array();
if ($this->persistent->searchParams) {
$parameters = $this->persistent->searchParams;
}
#postリクエストで送られてきた$parametersを元にモデルから検索
$posts = Posts::find($parameters);
if (count($posts) == 0) {
$this->flash->notice("The search did not find any posts");
return $this->dispatcher->forward(
[
"controller" => "products",
"action" => "index",
]
);
}
//
$paginator = new Paginator(array(
"data" => $posts,
"limit" => 10,
"page" => $numberPage
));
#何だこれ。わかってない
$this->view->page = $paginator->getPaginate();
#viewで表示するように$this->view->postsに代入(viewでは$postsで参照可能)
$this->view->posts = $posts;
}
モデル作成
app/model/Post.php
<?php
use Phalcon\Mvc\Model;
class Posts extends Model
{
#カラム名追加
public $id;
public $message;
}
view作成
app/views/post/index.phtml
<!-- 検索フォーム -->
<form action='/post/search' method='post'>
<h2>message検索</h2>
<!-- <fieldset> -->
<!-- id検索 -->
<div class='control-group'>
<label for='id' class='control-label'>Id </label>
<input type='text' id='id' name='id' />
</div>
<!-- message検索 -->
<div class='control-group'>
<label for='message' class='control-label'>message</label>
<input type='text' id='message' name='message' />
</div>
<div class='control-group'>
<input type='submit' value='Search' class='btn btn-primary' />
</div>
<!-- </fieldset> -->
</form>
<!-- 検索フォーム -->
<form action='/post/search' method='post'>
<h2>message検索</h2>
<!-- <fieldset> -->
<!-- id検索 -->
<div class='control-group'>
<label for='id' class='control-label'>Id </label>
<input type='text' id='id' name='id' />
</div>
<!-- message検索 -->
<div class='control-group'>
<label for='message' class='control-label'>message</label>
<input type='text' id='message' name='message' />
</div>
<div class='control-group'>
<input type='submit' value='Search' class='btn btn-primary' />
</div>
<!-- </fieldset> -->
</form>
<?php
echo "<h1>post index</h1>";
if ($posts->count() >= 0) {
?>
<table class="table table-bordered table-hover">
<thead class="thead-light">
<tr>
<th>#</th>
<th>message</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">Posts quantity: <?php echo $posts->count(); ?></td>
</tr>
</tfoot>
<tbody>
<!--index controllerで定義した$this->view->postsは$postsで参照可能 -->
<?php foreach ($posts as $post) { ?>
<tr>
<!--$post->hogeでhogeカラムのデータ取得可能 -->
<td><?php echo $post->id; ?></td>
<td><?php echo $post->message; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
}
app/views/post/new.phtml
<!--ヘルパーを使ったフォームの書き方。-->
<h1>post/new</h1>
<?php echo $this->tag->form("post/create"); ?>
<p>
<label for="message">message</label>
<?php echo $this->tag->textField("message"); ?>
</p>
<p>
<?php echo $this->tag->submitButton("post your message"); ?>
</p>
</form>
app/controllers/PostController.php
<?php
use Phalcon\Mvc\Controller;
class PostController extends Controller
{
public function indexAction()
{
#全てを取得
$this->view->posts = Posts::find();
}
#新規投稿ページ表示
public function newAction()
{
}
#新規投稿保存
public function createAction()
{
$post = new Posts();
// Store and check for errors
$success = $post->save(
$this->request->getPost(),
[
"message"
]
);
if ($success) {
echo "Thanks for registering!";
} else {
echo "Sorry, the following problems were generated: ";
$messages = $post->getMessages();
foreach ($messages as $message) {
echo $message->getMessage(), "<br/>";
}
}
$this->view->disable();
}
}
#formから送られてきた新しいデータを保存
public function createAction()
{
$post = new Posts();
$success = $post->save(
$this->request->getPost(),
[
"message"
]
);
if ($success) {
echo "Thanks for registering!";
} else {
echo "Sorry, the following problems were generated: ";
$messages = $post->getMessages();
foreach ($messages as $message) {
echo $message->getMessage(), "<br/>";
}
}
$this->view->disable();
}
#hogeAction($パラメータ)でurlにあるパラメータの値を取得
public function deleteAction($id)
{
$post = Posts::findFirstById($id);
$post->delete();
$this->response->redirect("/post");
}
public function sendAction()
{
#フォームから送られてきた値は$this->request->getPost('name属性');で取得可能
$id = $this->request->getPost('id');
$post = Posts::findFirst($id);
// privateメソッドを作り、参照することも可能
$this->sendToLine($post);
echo "Thanks for sending!";
$this->view->disable();
// return $this->response->redirect("/");
}
//privateメソッド
private function sendToLine($post)
{
#何らかの処理
}
#検索
public function searchAction()
{
$numberPage = 1;
#POSTメソッドで送られてきたかどうかチェック
if ($this->request->isPost()) {
$query = Criteria::fromInput($this->di, "Posts", $this->request->getPost());
$this->persistent->searchParams = $query->getParams();
} else {
$numberPage = $this->request->getQuery("page", "int");
}
$parameters = array();
if ($this->persistent->searchParams) {
$parameters = $this->persistent->searchParams;
}
#postリクエストで送られてきた$parametersを元にモデルから検索
$posts = Posts::find($parameters);
if (count($posts) == 0) {
$this->flash->notice("The search did not find any posts");
return $this->dispatcher->forward(
[
"controller" => "products",
"action" => "index",
]
);
}
//
$paginator = new Paginator(array(
"data" => $posts,
"limit" => 10,
"page" => $numberPage
));
#何だこれ。わかってない
$this->view->page = $paginator->getPaginate();
#viewで表示するように$this->view->postsに代入(viewでは$postsで参照可能)
$this->view->posts = $posts;
}
app/model/Post.php
<?php
use Phalcon\Mvc\Model;
class Posts extends Model
{
#カラム名追加
public $id;
public $message;
}
view作成
app/views/post/index.phtml
<!-- 検索フォーム -->
<form action='/post/search' method='post'>
<h2>message検索</h2>
<!-- <fieldset> -->
<!-- id検索 -->
<div class='control-group'>
<label for='id' class='control-label'>Id </label>
<input type='text' id='id' name='id' />
</div>
<!-- message検索 -->
<div class='control-group'>
<label for='message' class='control-label'>message</label>
<input type='text' id='message' name='message' />
</div>
<div class='control-group'>
<input type='submit' value='Search' class='btn btn-primary' />
</div>
<!-- </fieldset> -->
</form>
<!-- 検索フォーム -->
<form action='/post/search' method='post'>
<h2>message検索</h2>
<!-- <fieldset> -->
<!-- id検索 -->
<div class='control-group'>
<label for='id' class='control-label'>Id </label>
<input type='text' id='id' name='id' />
</div>
<!-- message検索 -->
<div class='control-group'>
<label for='message' class='control-label'>message</label>
<input type='text' id='message' name='message' />
</div>
<div class='control-group'>
<input type='submit' value='Search' class='btn btn-primary' />
</div>
<!-- </fieldset> -->
</form>
<?php
echo "<h1>post index</h1>";
if ($posts->count() >= 0) {
?>
<table class="table table-bordered table-hover">
<thead class="thead-light">
<tr>
<th>#</th>
<th>message</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">Posts quantity: <?php echo $posts->count(); ?></td>
</tr>
</tfoot>
<tbody>
<!--index controllerで定義した$this->view->postsは$postsで参照可能 -->
<?php foreach ($posts as $post) { ?>
<tr>
<!--$post->hogeでhogeカラムのデータ取得可能 -->
<td><?php echo $post->id; ?></td>
<td><?php echo $post->message; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
}
app/views/post/new.phtml
<!--ヘルパーを使ったフォームの書き方。-->
<h1>post/new</h1>
<?php echo $this->tag->form("post/create"); ?>
<p>
<label for="message">message</label>
<?php echo $this->tag->textField("message"); ?>
</p>
<p>
<?php echo $this->tag->submitButton("post your message"); ?>
</p>
</form>
app/views/post/index.phtml
<!-- 検索フォーム -->
<form action='/post/search' method='post'>
<h2>message検索</h2>
<!-- <fieldset> -->
<!-- id検索 -->
<div class='control-group'>
<label for='id' class='control-label'>Id </label>
<input type='text' id='id' name='id' />
</div>
<!-- message検索 -->
<div class='control-group'>
<label for='message' class='control-label'>message</label>
<input type='text' id='message' name='message' />
</div>
<div class='control-group'>
<input type='submit' value='Search' class='btn btn-primary' />
</div>
<!-- </fieldset> -->
</form>
<!-- 検索フォーム -->
<form action='/post/search' method='post'>
<h2>message検索</h2>
<!-- <fieldset> -->
<!-- id検索 -->
<div class='control-group'>
<label for='id' class='control-label'>Id </label>
<input type='text' id='id' name='id' />
</div>
<!-- message検索 -->
<div class='control-group'>
<label for='message' class='control-label'>message</label>
<input type='text' id='message' name='message' />
</div>
<div class='control-group'>
<input type='submit' value='Search' class='btn btn-primary' />
</div>
<!-- </fieldset> -->
</form>
<?php
echo "<h1>post index</h1>";
if ($posts->count() >= 0) {
?>
<table class="table table-bordered table-hover">
<thead class="thead-light">
<tr>
<th>#</th>
<th>message</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">Posts quantity: <?php echo $posts->count(); ?></td>
</tr>
</tfoot>
<tbody>
<!--index controllerで定義した$this->view->postsは$postsで参照可能 -->
<?php foreach ($posts as $post) { ?>
<tr>
<!--$post->hogeでhogeカラムのデータ取得可能 -->
<td><?php echo $post->id; ?></td>
<td><?php echo $post->message; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
}
app/views/post/new.phtml
<!--ヘルパーを使ったフォームの書き方。-->
<h1>post/new</h1>
<?php echo $this->tag->form("post/create"); ?>
<p>
<label for="message">message</label>
<?php echo $this->tag->textField("message"); ?>
</p>
<p>
<?php echo $this->tag->submitButton("post your message"); ?>
</p>
</form>
Author And Source
この問題について(fhalconでMVCに沿ったアプリケーションの作成方法), 我々は、より多くの情報をここで見つけました https://qiita.com/wjtnk/items/e1ee1433f4e312a1d680著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .