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;

就可以了

更多說明 http://laraveldaily.com/how-to-use-external-classes-and-php-files-in-laravel-controller/

results matching ""

    No results matching ""