controller 控制器
前面幾章節做下來route.php變得很臃腫,這樣不是好現象,未來整理會很麻煩。
所以我們將route.php轉移到一個個不同的controller中。
html 標籤部分應該放置到 blade 與後端分離,這裡只是方便教學示範。 實務上不建議這樣做。
修改route.php
將
Route::get('customer/{id}', function($id){
//這個很明顯阿!!就是抓資料庫!!
$customer = App\Customer::find($id);
echo $customer->name . "<br/>";
echo "Orders : <br/>";
//這裡是使用Model裡要使用的function名稱
$orders = $customer->forfun;
echo '<ul>';
foreach ($orders as $order) {
echo '<li>'.$order->name . "</li>";
}
echo '</ul>';
});
剪下(保留)程式碼,修改為
Route::get('customer/{id}', 'CustomerController@customer');
建立controller
還沒完,到CMD輸入php artisan make:controller CustomerController
新的 CustomerController.php 會被建置在 app->https->controllers之下
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class CustomerController extends Controller
{
//
}
加入程式碼
public function customerr($id){
//這個很明顯阿!!就是抓資料庫!!
$customer = App\Customer::find($id);
echo $customer->name . "<br/>";
echo "Orders : <br/>";
//這裡是使用Model裡要使用的function名稱
$orders = $customer->forfun;
echo '<ul>';
foreach ($orders as $order) {
echo '<li>'.$order->name . "</li>";
}
echo '</ul>';
其實就是之前保留的程式碼,我們將function命名為customerr別忘了將$id帶入
這時就可以去看網頁的樣子了。
http://localhost:8000/customer/1
保持不變。
簡化資料庫寫法
我們可以看到當我們需要使用資料庫時的語法$customer = App\Customer::find($id);
嘗試將它簡化,在前面的宣告加上use App\Customer as Customk
這時就可以將原先寫法改為$customer = Customk::find($id);
完整程式碼
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Customer as Customk;
class CustomerController extends Controller
{
//同一個controller可以有很多function,名稱也不同
public function customerr($id){
//這個很明顯阿!!就是抓資料庫!!
$customer = Customk::find($id);
echo $customer->name . "<br/>";
echo "Orders : <br/>";
//這裡是使用Model裡要使用的function名稱
$orders = $customer->forfun;
echo '<ul>';
foreach ($orders as $order) {
echo '<li>'.$order->name . "</li>";
}
echo '</ul>';
}
可以再去看一下網頁。
將網頁判斷移到view中 (.blade.php)
進一步實現MVC架構,將
echo $customer->name . "<br/>";
echo "Orders : <br/>";
//這裡是使用Model裡要使用的function名稱
$orders = $customer->forfun;
echo '<ul>';
foreach ($orders as $order) {
echo '<li>'.$order->name . "</li>";
}
echo '</ul>';
剪下(保留)程式碼,並修改為
$customer = Customk::find($id);
return view('customer',$array = array('customjj' => $customer ));
再到 resources->views 底下新增 customer.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Customer</title>
</head>
<body>
<h1>{{ $customjj->name }}</h1>
<h3>Order: </h3>
<ul>
@foreach ($customjj->forfun as $order)
<li>{{ $order->name }}</li>
@endforeach
</ul>
</body>
</html>
其實前面都教過了。如果前面都有照做的話,就可以明白這些都是再route的程式碼,被修改道不同的檔案,實現MVC管理(Model View Contorller)。
Request 簡單取得input值
首先 view 部分
<form action="setname" method="post"> <!-- post對應route中post方法 -->
<input type="text" name="context">
<button type="submit">送出</button>
<!-- 使用 POST 必須 !! 重要 !! -->
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
Route
// 這裡重點只有前面的post // 後面用啥名字都可以
Route::post('/setname','SetnameController@postaaa');
controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class ImageController extends Controller
{
public function index()
{
return view('home');
}
// 對應方法
public function postaaa(Request $request) // 取得 $request
{
// 從 $request抓取
echo $text = $request->input('context');
}
}
添加 客製化class
如何在自己的 controller , 引入 Class。
//首先你在 app 資料夾中添加自己的目錄與 PHP檔
app/LibraryK/First/YourClass.php
// YourClass.php
<?php namespace App\CustomStuff\First;
class Yourclass {}
// 接著在 需要使用的 controller 開頭添加
use App\LibraryK\First\YourClass;
就可以了