用laravel4.2实现一个简单的图片墙博客(三)控制器(Controller)

Laravel Resource Controller 入门:CRUD 七种动作原理与工程实践 Resource Controller 是 Laravel 对 RESTful 资源操作的核心抽象,其本质是将增删改查(CRUD)标准化为 index、create、store、show、edit、update、destroy 七种语义化动作,并通过约定优于配置实现路由自动注册、模型绑定、表单验证集成与中间件统一管理。它并非代码生成器,而是 Web 应用数据交互模式的工程化封装,技术价值在于降低重复劳动、规避 URL 硬编码、防止 HTTP 方法错配,并天然支撑 API 优先架构。典型应用场景包括后台管理系 阅读详情

至此,我们完成了数据库的建立和初始填充工作,也建立的三个主要对象的模型User, Picture, Comment,接下来要实现控制器部分了。

与其把所有路由逻辑写在一个 routes.php 文件中,你也许更希望用控制器类来组织它们。控制器可以把相关的路由逻辑组织在一个类中,而且可以使用由框架提供的更为强大的功能,比如自动依赖注入。关于控制器方面的文档参看。

一.创建控制器

在Laravel中,我们通过扩展 app/controllers 目录的BaseController类来创建控制器,我们所有的控制器都存在app/controllers目录中。文件管理方面这一点类似MODEL,使用一个文件当作入口来管理所有的同类文件。

1#......BaseController.php

这是基控制器,$layout指定了初始布局,指向views目录下的master.blade.php。

调用setupLayout方法在控制器有非空布局时实现这个布局。其他的控制器基本都可以继承该控制器。

<?php

class BaseController extends \Controller {


	/**
	 * layout to use
	 * @var View
	 */
	protected $layout = 'master';

	/**
	 * Setup the layout used by the controller.
	 *
	 * @return void
	 */
	protected function setupLayout()
	{
		if ( ! is_null($this->layout) )
		{
			$this->layout = View::make($this->layout);
		}
	}

}

2#......BlogController.php

__construct使我们能够在控制器内部指定过滤器,过滤器的定义在app/filters.php。

getIndex()获取主页显示的元素,每页显示20张图片,调用布局home,在home.blade.php中的{{content}}部分填充布局index,布局由构造出的20张图片的键值对数组生成,这一步相当于显示了主页。

getLogin()获取验证状态并转移页面到管理员控制面板

getLogout()登出用户

postRegister()注册验证,需要验证未使用用户名和未使用的邮箱地址

postLogin()登陆验证

<?php

use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Schema;
class BlogController extends BaseController
{


    public function __construct()
    {
        //updated: prevents re-login.
        $this->beforeFilter('guest', ['only' => ['getLogin']]);
        $this->beforeFilter('auth', ['only' => ['getLogout']]);
    }

    public function getIndex()
    {
        $pictures = Picture::orderBy('id', 'desc')->paginate(10);
        $pictures->getFactory()->setViewName('pagination::slider');
        $this->layout->title = 'Home Page | Picture Wall Blog';
        $this->layout->main = View::make('home')->nest('content', 'index', compact('pictures'));
    }

    public function getSearch()
    {
    	$searchTerm = Input::get('s');
    	$pictures = Picture::whereRaw('match(title,description) against(? in boolean mode)', [$searchTerm])
    	->paginate(10);
    	$pictures->getFactory()->setViewName('pagination::slider');
    	$pictures->appends(['s' => $searchTerm]);
    	$this->layout->with('title', 'Search: ' . $searchTerm);
    	$this->layout->main = View::make('home')
    	->nest('content', 'index', ($pictures->isEmpty()) ? ['notFound' => true] : compact('pictures'));
    }
    public function getLiking()
    {
    	$pic_id = Input::get('pic_id');
    	if (Auth::check()){
    		$user_id = Auth::user()->id;
    	} else return 'not logined';
    	$like = DB::connection('mongodb')->table('likes')->where('picture_id', '=', $pic_id)->where('user_id', '=', $user_id)->get();
    	if (!empty($like)) return 'voted';
    	DB::connection('mongodb')->table('likes')->insert(array('user_id' => $user_id, 'picture_id' => $pic_id));
    	$count = DB::connection('mongodb')->table('count')->where('picture_id', '=', $pic_id)->lists('count');
    	if (empty($count)){
    		DB::connection('mongodb')->table('count')->insert(array('picture_id'=>$pic_id, 'count'=>'1'));
    	} else{
    		$up = $count[0]+1;
    		DB::connection('mongodb')->table('count')->where('picture_id',$pic_id)->
    				update(array('count'=>$up));
    	}
    	return "ok";
    	
    }
    public function getLikes()
    {
    	$pic_id = Input::get('pic_id');
    	$likecount = DB::connection('mongodb')->table('count')->where('picture_id', $pic_id)->lists('count');
    	if (empty($likecount)) return 0;
    	return $likecount[0];
    }
    public function getLogin()
    {
        $this->layout->title = 'login';
        $this->layout->main = View::make('login');
    }
	
    public function getRegister()
    {
    	$this->layout->title = 'register';
    	$this->layout->main = View::make('register');
    }
    
    public function postRegister()
    {
    	$credentials = [
    	'username' => Input::get('username'),
    	'password' => Input::get('password'),
    	'email' => Input::get('email')
    	];
    	$rules = [
    	'username' => 'required',
    	'password' => 'required',
    	'email' => 'required|email'
    			];
    	$validator = Validator::make($credentials, $rules);
    	if ($validator->passes()) {
    		$userCheck = DB::table('users')->where('username',$credentials['username'])->get();
    		if (!empty($userCheck)){
    			return Redirect::back()->withInput()->with('failure', 'username already exists!');
    		}
    		$emailCheck = DB::table('users')->where('email',$credentials['email'])->get();
    		if (!empty($emailCheck)){
    			return Redirect::back()->withInput()->with('failure', 'mail address already exists!');
    		}
    		$user = array(
            'username' => $credentials['username'],
            'password' => Hash::make($credentials['password']),
    		'email' => $credentials['email'],
            'created_at' => DB::raw('NOW()'),
            'updated_at' => DB::raw('NOW()'),
       	 	);
    		DB::table('users')->insert($user);
    		Auth::attempt($credentials);
    		return Redirect::to('admin/dash-board')->withInput()->with('success', 'register succeed!!!');
    	} else {
    		return Redirect::back()->withErrors($validator)->withInput();
    	}
    }
    
    public function postLogin()
    {
    	if (strcmp($_POST['operation'],"Register") == 0) return Redirect::to('register');
        $credentials = [
            'username' => Input::get('username'),
            'password' => Input::get('password')
        ];
        $rules = [
            'username' => 'required',
            'password' => 'required'
        ];
        $validator = Validator::make($credentials, $rules);
        if ($validator->passes()) {
            if (Auth::attempt($credentials))
                return Redirect::to('admin/dash-board');
            return Redirect::back()->withInput()->with('failure', 'username or password is invalid!');
        } else {
            return Redirect::back()->withErrors($validator)->withInput();
        }
    }

    public function getLogout()
    {
        Auth::logout();
        return Redirect::to('/');
    }

}



3#......PictureController.php

该文件定义了Picture的控制器,包括列举Picture,显示Picture,新建、编辑的界面,删除、保存、更新的操作等。这些方法会在app/routes.php中被引用。

其中用到了验证器的相关知识(请注意正则匹配的格式),参考 

<?php

class PictureController extends BaseController
{

    /* get functions */
    public function listPicture()
    {
        $pictures = Picture::orderBy('id', 'desc')->paginate(10);
        $this->layout->title = 'Picture listings';
        $this->layout->main = View::make('dash')->nest('content', 'pictures.list', compact('pictures'));
    }

    public function showPicture(Picture $picture)
    {
        $comments = $picture->comments()->get();
        $this->layout->title = $picture->title;
        $this->layout->main = View::make('home')->nest('content', 'pictures.single', compact('picture', 'comments'));
    }

    public function newPicture()
    {
        $this->layout->title = 'New Picture';
        $this->layout->main = View::make('dash')->nest('content', 'pictures.new');
    }

    public function editPicture(Picture $picture)
    {
        $this->layout->title = 'Edit Picture';
        $this->layout->main = View::make('dash')->nest('content', 'pictures.edit', compact('picture'));
    }

    public function deletePicture(Picture $picture)
    {
    	DB::connection('mongodb')->table('likes')->where('picture_id',$picture->id)->delete();
    	DB::connection('mongodb')->table('count')->where('picture_id',$picture->id)->delete();
        $picture->delete();
        return Redirect::route('picture.list')->with('success', 'Picture is deleted!');
    }

    /* picture functions */
    public function savePicture()
    {
    	$pre = "images/".date("YmdHis",time());
        $picture = [
            'title' => Input::get('title'),
            'description' => Input::get('description'),
            'image' => $_FILES['picture']['name'],
        ];
        $rules = [
            'title' => 'required',
            'description' => 'required',
            'image' => array('regex:/^[^&%]*\\.(jpg|gif|jpeg|png|bmp)$/u'),
        ];
        $messages = array(
        	'regex' => 'Please check there is no & and % character in the file path and is an image file!!'	
        );
        $valid = Validator::make($picture, $rules, $messages);
        if ($valid->passes()) {
        	$file_path = $_FILES['picture']['tmp_name'];
        	$image_path = "F:/mxampp/htdocs/piclist/public/".$pre.'/'.$_FILES['picture']['name'];
        	mkdir("F:/mxampp/htdocs/piclist/public/".$pre);
        	if (!move_uploaded_file($file_path, $image_path)){
        		return Redirect::to('admin/dash-board')->with('failure', 'wooops!!! failed on saving~');
        		//return Redirect::to('admin/dash_board')->with('failure', 'not valid picture');
        	} else{
        		$picture['image'] = $pre.'/'.$_FILES['picture']['name'];
            	$picture = new Picture($picture);
           	 	$picture->comment_count = 0;
            	$picture->save();
            	return Redirect::to('admin/dash-board')->with('success', 'Picture is saved!');
        	}
        } else
            return Redirect::back()->withErrors($valid)->withInput();
    }

    public function updatePicture(Picture $picture)
    {
        $data = [
            'title' => Input::get('title'),
            'description' => Input::get('description'),
        ];
        $rules = [
            'title' => 'required',
            'description' => 'required',
        ];
        $valid = Validator::make($data, $rules);
        if ($valid->passes()) {
            $picture->title = $data['title'];
            $picture->description = $data['description'];
            if (count($picture->getDirty()) > 0) /* avoiding resubmission of same content */ {
                $picture->save();
                return Redirect::back()->with('success', 'Picture is updated!');
            } else
                return Redirect::back()->with('success', 'Nothing to update!');
        } else
            return Redirect::back()->withErrors($valid)->withInput();
    }
	
}



4#......Comment.php

评论(Comment)的控制器,定义了所有评论相关的方法,注意picture->comment_count的改变,每次更新时也要更新这个计数器。

<?php


class CommentController extends BaseController
{


    /* get functions */
    public function listComment()
    {
        $comments = Comment::orderBy('id', 'desc')->paginate(20);
        $this->layout->title = 'Comment Listings';
        $this->layout->main = View::make('dash')->nest('content', 'comments.list', compact('comments'));
    }


    public function newComment(Picture $picture)
    {
        $comment = [
            'commenter' => Input::get('commenter'),
            'email' => Input::get('email'),
            'comment' => Input::get('comment'),
        ];
        $rules = [
            'commenter' => 'required',
            'email' => 'required | email',
            'comment' => 'required',
        ];
        $valid = Validator::make($comment, $rules);
        if ($valid->passes()) {
            $comment = new Comment($comment);
            $picture->comments()->save($comment);
            $picture->increment('comment_count');
            /* redirect back to the form portion of the page */
            return Redirect::to(URL::previous() . '#reply')
                ->with('success', 'Comment has been submitted!');
        } else {
            return Redirect::to(URL::previous() . '#reply')->withErrors($valid)->withInput();
        }
    }


    public function showComment(Comment $comment)
    {
        if (Request::ajax())
            return View::make('comments.show', compact('comment'));
        // handle non-ajax calls here
        //else{}
    }


    public function deleteComment(Comment $comment)
    {
        $picture = $comment->picture;
        $comment->delete();
        $picture->decrement('comment_count');
        return Redirect::back()->with('success', 'Comment deleted!');
    }


    /* picture functions */


    public function updateComment(Comment $comment)
    {
        $comment->save();
        $comment->picture->comment_count = Comment::where('picture_id', '=', $comment->picture->id)->count();
        $comment->picture->save();
        return Redirect::back();
    }


}

二.模型与路由的绑定

请查看

在app/routes.php中实现:

/* Model Bindings */
Route::model('picture', 'Picture');
Route::model('comment', 'Comment');
下一节将介绍路由和过滤器的相关设计


__________________________________________________________________________________________________

下一章将介绍路由和过滤器的实现,实现的路由和过滤器之后,我们整个博客的逻辑部分就算全部完成了~

对每个模型有对应的数据表,对模型的变化定义在控制器,通过路由的行为来调用控制器的方法,实现了用户与服务端交互的目的。

完成路由和过滤器之后,只要把所有页面的UI补充补充就能完成了,有点小激动呢~

LSM6DS3TR-C IMU传感器入门:从MEMS原理到姿态解算实战 惯性测量单元(IMU)是现代智能设备实现运动感知的核心部件,其基础原理基于微机电系统(MEMS)技术。MEMS加速度计通过检测质量块在惯性力作用下的位移来测量线性加速度,而陀螺仪则利用科里奥利力效应感知角速度。这种技术使得微型化、低成本的6自由度运动测量成为可能,为机器人、无人机、可穿戴设备等提供了关键的空间姿态和运动状态信息。在实际工程中,开发者需要掌握I2C/SPI通信协议、传感器数据读取与校准,并通过互补滤波等算法融合加速度计和陀螺仪数据,实现稳定的姿态解算。LSM6DS3TR-C作为一款高性价比的6 阅读详情

相关推荐

tuts4you-lena151-Crackme-tutorial06

一、前言      本次研究的是lena151-Crackme-tutorial06,也是一个应用程序,但因为平台迭代的关系,程序不能正常运行,只能完成部分破解。 (一)·本次我们要破解的目标是个应用程序,如下图 (二)、使用工具:x32dbg 二、过程 这个程序的破解的方法很多,首先最简单的一种不外乎就是搜索字符串,我就按照这个思路来完成。 (一)查找字符串&lt;Unregis...

h123120的专栏 518

Laravel控制器简单总结

控制器一般存储在app/controllers目录下,所有的控制器都要继承BaseController类。BaseController类也存储在app\controllers下,通常用来放置公用的控制器逻辑。BaseController 类继承自框架的Controller 类。在终端新建控制器和指定操作: php artisan controller:make PostController --o

宋子庆的博客 1596

VMware + ubuntu20.04 + qemu安装

遇到报错可参考:(从ubuntu裸系统开始安装)

NosONE 3230

Controller(一)

一、Controller是什么? 顾名思义,Controller就是控制器。它是玩家在游戏中的一个代理对象,也是玩家与游戏中人物或者AI之间的交互的桥梁。它的任务就是掌管人物或AI的所有行为。可以说Controller将人物和AI玩弄于股掌之间。 Controller是派生自Actor,所以它理所当然具有Actor的基本属性Tansform,这使得Controller具有存在于游戏Level中的能力;具有序列化功能,这在根类UObject中有实现;具有网络复制功能,赋予了...

刀客 1万+

物理信息神经网络(PINNs)在交通运输领域的应用

物理信息神经网络(PINNs)在交通运输领域的应用研究结合了数据驱动与物理模型约束,通过嵌入交通流守恒定律等物理信息,显著提升了交通状态估计与预测的精度。该技术仅需少量观测数据(流量、速度、密度等),即可实现高精度建模,尤其适用于数据稀疏场景。研究重点包括:交通状态估计与预测、参数辨识、交通控制优化等领域,同时面临计算成本高、物理模型依赖性等挑战。未来需解决大规模异构数据处理问题,以进一步推动智能交通系统发展。

qq_49609070的博客 944

基于Simulink的鲸鱼优化算法(WOA)MPPT仿真

摘要:本文介绍了基于Simulink的鲸鱼优化算法(WOA)在光伏MPPT控制中的应用。WOA模拟座头鲸的"气泡网捕食策略",通过包围猎物、螺旋收缩和随机搜索三阶段动态平衡全局探索与局部开发能力,有效解决局部阴影导致的多峰P-V曲线问题。文章详细讲解了WOA-MPPT的Simulink建模过程,包括多峰光伏阵列建模、WOA控制器实现和Boost变换器控制。仿真结果显示,在三种典型工况下,WOA-MPPT的追踪效率>99.3%,动态响应时间<0.15s,性能优于传统算法。最后提出了混合WO

amy_mhd的博客 72

Controller 就该这么写

从统一返回结构到参数校验再到异常处理等方面改造Controller层,想写出优雅简洁的Controller逻辑,不要错过这篇文章

gelald的博客 1456

定位精度再突破!Inner-MPDIoU让YOLOv11边界框回归更精准

Inner-MPDIoU 凭借辅助边框与最小点距离的双机制创新,彻底解决了传统 IoU 损失在边界框回归上的精度瓶颈。本教程从原理到代码实现,再到工业场景适配,完整呈现了其在 YOLOv11 中的集成路径。只需简单修改两处核心脚本,你的目标检测模型就能在边界框定位精度上实现跨越式提升——无论是学术研究中的指标突破,还是工业场景下的精细检测需求,Inner-MPDIoU 都能成为你攻克边界框回归难题的利器。现在就动手尝试,让你的检测模型在定位精度上再上一个台阶吧。

FJN110的博客 158

Laravel 控制器 Controller 传值到 视图 View 的几种方法总结

单个值的传递 with public function index() { $test = "测试"; return view('test.index')->with('test',$test); } view public function index() { return view('test.index', ['test' => '测试...

weixin_30481087的博客 1261

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

statistics+insight+vista+power 530

用 sapgenpse 把 SAPCRYPTOLIB 的 SNC 真正配通

摘要: 在SAP系统中配置SNC(Secure Network Communications)时,sapgenpse工具是关键,尤其在旧版本或组件缺乏图形化维护工具时。核心步骤包括安装SAP Cryptographic Library、创建PSE(Personal Security Environment)、生成运行凭据,并确保证书交换顺序正确。常见问题如RFC连接失败或握手错误,往往源于PSE创建或凭据配置不当。需特别注意SECUDIR目录设置、PSE身份管理(单一或独立PSE方案)、以及服务账号凭据的权

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 66

laravel controller

一、准备工作 在routes/web.php中创建一个路由,如下 Route::get('/', function() { return view('welcome'); }); Route::get('user/name',function () { return 'Name page'; }); 当访问网址localhost/user/name时,会出现如下页面 ...

u012160319的专栏 945

第42章:AI代码生成的质量标准——何时用AI、何时自己写

> - AI代码生成的质量分级标准:可用、稳定、安全、优雅 > - 一个决策矩阵:什么场景适合用AI,什么场景必须人工编写 > - 如何评估AI生成的代码质量(复杂度、可读性、安全性) > - 实战对比:同一需求下AI生成代码 vs 人工编写代码 > - 团队落地:将质量标准集成到Code Review和CI流程 > - 我如何将团队AI代码接受率从70%提升到90%

sfishfly的博客 161

PHP Laravel 5.2 中文文档:HTTP控制器Controller

如果你的应用完全基于控制器路由,可以使用 Laravel 的路由缓存,使用路由缓存将会极大减少注册所有应用路由所花费的时间开销,在某些案例中,路由注册速度甚至能提高100倍!Laravel 的资源控制器使得构建围绕资源的 RESTful 控制器变得毫无痛苦,例如,你可能想要在应用中创建一个控制器,用于处理关于图片存储的 HTTP 请求,使用 Artisan 命令。除了构造函数注入之外,还可以在控制器的动作方法中进行依赖的类型提示,例如,我们可以在某个方法中类型提示。因此,如果你的完整控制器类是。

学亮编程手记 948

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

laravel学习(三)-----控制器Controller

路由器的部分会指向Controller,下面学习Controller相关知识 artisan命令自动生成controller文件 php artisan make:controller /Contro/Foo1Controller 在路由中添加中间件 public function __construct() { //添加中间件 // $this-...

Wu_ye123的博客 626

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

laravel框架上传图片实时预览

在laravel框架中上传图片并实时预览,其实并没有那么难,下面给大家展示一下;

q459691431的博客 3039

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

laravel笔记-控制器

laravel笔记-控制器写在前面时间可贵,善用目录↑学习Laravel的笔记,仅仅是作为laravel文档笔记,目的是强化对文档的理解,质量不高。什么是控制器(Controller) 将相关的 HTTP 请求封装到一个类中进行处理。通常控制器存放在 app/Http/Controllers 目录中。 继承App\Http\Controllers\Controller控制器嘛,起一个控制调度的作

Clew123的博客 546

laravel框架实现一个简单网站的思路

1配置好环境,使用make:auth,完成好网站的基本注册登录功能. 2.在访问网站的页面的时候,一个网站的头部和尾部都是相同的,就可以利用blade模板继承,将头部和尾部提出来,在写的页面中,include头部和尾部. 3.实现上传视频功能,创建模型(model): art make:model -m Video    创建控制器 art make:controller VideoCont

xiaoqingxinxin的博客 1526

laravel创建控制器,模型层,迁移数据库

laravel通过命令来创建控制器,模型层,及迁移数据库: 首先,通过cmd进入laravel框架中,如图所示,只是集成环境不同,只要访问到laravel框架就可以。 示例: 访问到目录以后,就可以执行命令了。 创建控制器:php artisan make:controller 控制器名称(采用驼峰命名) 创建控制器:php artisan make:controller 控制器名称(采用驼峰命...

qq_45192703的博客 678

php 控制器动作,Laravel资源控制器处理的动作

D:\hwamp\Apache24\htdocs\laravel\my_laravel>php artisan route:list+--------+-------------------------------------------------------------------------------------------------------------------------...

weixin_42662293的博客 282

Laravel5.3初步使用三(View层、Controller层)

一、View层1.前端制作好一些静态的文件,存放在public文件夹中,这些文件包括图片、js、css等 2.利用前端做好的页面,即html文件的代码,制作 *.blade.php模板页面或者普通php页面3.当多个页面有相同的布局,比如分上中下,上部导航栏和底部网页信息栏在多个页面都差不多,只有中间内容页更改的情况下,我们可以做一个模板页,在View文件夹下新建一个**Common的文件夹 源

My设计Road 4394

laravel-admin以及wangeditor扩展的安装

laravel-admin以及wangeditor扩展的安装 PHP版本 7.2.24 Laravel 版本 7.30.4 首先确保安装好了lnmp环境已经laravel框架。 第一步,安装laravel-admin扩展。 分别在laravel项目跟目录执行下面的三行代码: composer require encore/laravel-admin:1.* php artisan vendor:publish --provider=“Encore\Admin\AdminServiceProvider” ph

mengliwang的博客 1319

Laravel5.2目录结构及composer.json文件解析

Laravel5.2目录结构及composer.json文件解析       目录或文件 说明 |– app 包含Controller、Model、路由等在内的应用目录,大部分业务将在该目录下进行 |  |– Console 命令行程序目录 |  |  |– Commands 包含了用于命令行执行的类,可在该目录下自定义类 |  |  |...

狂奔的蜗牛 966

laravel 生成验证码的方法

在Laravel中有很多图片验证码的库可以使用,本篇介绍其中之一:gregwar/captcha,这个库比较简单,在Laravel中比较常用。下面我们就来介绍下使用细节: 首先, composer.json中如下加入配置: "require": { ... "gregwar/captcha": "1.*" }, 然后,已成习惯的命令:用cmd执

幻羽公子的博客 1119

Laravel5.3使用学习笔记---控制器

看完了laravel V5.3的路由和中间件部分,接着就是看控制器部分了。 参考官方英文文档,laravel 5.3控制器部分: https://laravel-china.org/docs/en/5.3/controllers一. 控制器的定义和基本路由访问 定义一个控制器相当简单,结合PSR规则,在App\Http\Controllers路径下,新建TestController.php文件,

Gavin_new的博客 2214

Laravel 5.1 Ajax上传图片方法

最近在做的项目基于Laravel 5.1开发,需要用到Ajax上传,查了些资料,自己整理了下可用的方法。 控制器: UploadController.php <?php namespace App\Http\Controllers\Admin; use App\Http\Requests; use App\Http\Contro...

weixin_34283445的博客 159
上一篇: xampp apache建立虚拟目录
下一篇: laravel框架下使用phpunit出现Fatal error: Cannot redeclare xxxx() (previously declared in...错误的解决
ipip2005
博客等级 码龄17年 100粉丝 20原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值