laravel artisan命令开发用artisan创建控制器报错求助

[ Laravel 5.1 文档 ] 服务 —— Artisan 控制台
这篇文章对我很有帮助
这篇文章对我很有帮助
学院君 has written
资深PHP工程师,Laravel学院院长
Laravel 5.1laravel 基础教程 —— 控制器 - 简书
下载简书移动应用
写了137322字,被159人关注,获得了163个喜欢
laravel 基础教程 —— 控制器
HTTP 控制器
控制器允许你将相应的路由业务逻辑封装在控制器类中进行有效的管理,这样你不必将所有的路由逻辑集中到routes.php文件中,导致代码的臃肿与难以维护。所有的控制器类都被存储在app/Http/Controllers目录中.
基本控制器
一个基本的控制器应该继承自App\Http\Controllers\Controller控制器类:
namespace App\Http\C
use App\Http\Controllers\C
class UserController extends Controller {
public function showProfile($id) {
return view('user.profile', ['user' =& User::findOrFail($id)]);
我们可以通过下面的方式把控制器的行为分配到路由:
Route::get('user/{id}', 'UserController@showProfile');
一旦将控制器的行为分配到路由之后,每次客户端请求该路由,都会触发控制器的行为。这里即客户端每次请求user/{id}路由,showProfile方法都会被执行,路由中的参数也会被直接传递到该方法中.
控制器 & 命名空间
你应该知道我们在定义控制器路由时是不需要指定控制器的命名空间的,而只需要指定到类名就可以了,这是因为在RouteServiceProvider文件中自动加载的routes.php文件已经被指定了路由组的根命名空间App\Http\Controllers;
如果你想在App\Http\Controllers目录下使用php命名空间来嵌套或组织控制器,那么你只需要简单的指定相对于App\Http\Controllers部分的类名就可以了。所以如果你的控制器的全部类名为App\Http\Controllers\Photos\AdminController,那么你就可以这样来定义控制器路由:
Route::get('foo', 'Photos\AdminController@method');
命名控制器路由
就像定义命名路由一样,我们也可以给一个控制器路由命名:
Route::get('foo', ['uses' =& 'FooController@method', 'as' =& 'name']);
一旦你为一个路由进行了命名, 那么你就可以通过route帮助方法去快速的生成被命名路由的资源表述地址:
$url = route('name');
控制器中间件
中间件可以这样被分配到控制器路由中:
Route::get('profile', [
'middleware' =& 'auth',
'uses' =& 'UserController@showProfile'
当然你也可以在控制器类中直接使用middleware方法来进行中间件的分配,你也可以只允许类中的某些行为受到指定中间件的约束:
class UserController extends Controller {
public function __construct() {
$this-&middleware('auth');
$this-&middleware('log', ['only' =& [
'fooAction',
'barAction'
$this-&middleware('subscribed', ['except' =& [
'fooAction',
'barAction'
RESTful 资源控制器
资源控制器可以使你快速的构建RESTful型的控制器。你可以使用artisan命令来快速的创建:
php artisan make:controller PhotoController --resource
该命令会生成app\Http\Controllers\PhotoController.php文件,资源控制器中将包含每个可用的资源操作相应的方法.
你可以通过下面的方式来进行资源路由的注册:
Route::resource('photo', 'PhotoController');
这一个简单的声明会创造多条路由用来处理RESTful式的请求.相应的通过命令生成的资源型控制器也为这些请求设置了对应的处理方法.
资源控制器所处理的行为
控制器行为
photo.index
/photo/create
photo.create
photo.store
/photo/{photo}
photo.show
/photo/{photo}/edit
photo.edit
/photo/{photo}
photo.update
/photo/{photo}
photo.destroy
部分资源路由
有时候你可能并不想控制器处理全部的请求方式,那么你可以这么做:
Route::resource('photo', 'PhotoController', ['only' =& [
'index', 'show'
Route::resource('photo', 'PhotoController', ['except' =& [
'create', 'store', 'update', 'destroy'
命名资源路由
默认的,所有的资源控制器行为都被进行了相应的路由命名,你可以通过names参数来进行重命名:
Route::resource('photo', 'PhotoController', ['names' =& [
'create' =& 'photo.build'
命名资源路由参数
默认的,资源路由的路由参数都被命名为相应的资源名称,你可以用过parameters参数来进行重命名:
Route::resource('user', 'AdminUserController', ['parameters' =& [
'user' =& 'admin_user'
// /user/{admin_user}
有时候你可能希望资源路由的路由参数并不需要像默认的资源名称一样采取复数的形式,那么你可以通过传递parameters的选项设置为singular:
Route::resource('users.photos', 'PhotoController', [
'parameters' =& 'singular'
// /users/{user}/photos/{photo}
另外,你也可以全局设置你的资源路由参数为单数形式或者全局进行资源路由参数的命名映射:
Route::singularResourceParameters();
Route::resourceParameters([
'user' =& 'person',
'photo' =& 'image'
当你对资源路由参数进行定制时,你应该清楚的知道命名的顺序优先级:
参数被直接的传递给Route::resource
通过 Router::resourceParameters 进行全局参数映射
通过parameters数组选项传递给Route::resource 或者 通过 Route::singularResoureParameters 进行单数形式参数设置
资源控制器中意外的行为
如果你必须在资源控制器中添加额外的行为去注册相应的路由,那么你一定要在使用Route::resource之前进行注册,否则该行为很可能会被资源控制器意外的覆盖掉.
Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');
依赖注入 & 控制器
构造器注入
laravel的服务容器支持所有的laravel控制器的解析。由于这个原因,所以你可以在控制器的构造函数中添加你所需要依赖的相应类型提示,这些依赖会被自动的解析并注入进控制器实例.
namespace App\Http\C
use App\Repositories\UserR
class UserController extends Controller {
protected $
public function __construct(UserRepository $users) {
$this-&users = $
当然,你也被允许添加一些laravel contract的类型提示,只要服务容器能够正确的解析,你都可以被允许添加。
除了在构造函数中进行依赖注入,你也可以在控制器的行为方法中进行依赖注入,比如,将Illuminate\Http\Reqeust实例注入到控制器的store方法中:
namespace App\Http\C
use Illuminate\Http\R
class UserController extends Controller {
public function store (Request $request) {
$name = $request-&input('name');
如果你的控制器方法也接收从路由传递过来的参数,那么他们会在其它依赖解析完毕之后被传递,比如你的路由是这么定义的:
Route::put('user/{id}', 'UserController@update');
那么你可以这么修正你的控制器行为,来进行参数的接收:
namespace App\Http\
use Illuminate\Http\R
class UserController extends Controller {
public function update (Request $request, $id) {
注意:缓存路由不支持闭包函数定义的路由,如果你想使你的路由被缓存,那么你应该使用控制器来管理你的路由.
如果你所有的路由都是基于控制器的路由,那么你应该使用laravel推荐的缓存路由,你可以简单的通过artisan命令来缓存所有路由注册到同一个文件里,它会替代routes.php文件被解析,使用这种缓存注册路由的方式在某些情况下注册路由的时间将被大大的减少,从而提高了应用的响应速度。但是每次添加新的路由或者删除路由时,为了使路由生效,你需要重新生成一次缓存路由:
php artisan route:cache
你可以通过下面的方式去删除路由缓存:
php artisan route:clear
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常囧事等等,欢迎投稿《程序员》专题。
专题主编:小...
· 174899人关注
Laravel 学习与实战 交流群:
· 127人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:laravel开发用artisan创建控制器报错求助_百度知道[Laravel] Laravel 开发技巧 - 推酷
[Laravel] Laravel 开发技巧
这几天中笔者在使用 laravel 写一个博客网站,在开发过程中难免碰到一些问题,这篇博文就是关于一些常用的技巧的总结
1.laravel 的登录注册页面,你可以直接使用 命令
phpartisanmake:auth
使用该命令,laravel 将自动帮你生成包括视图,路由,控制器等一系列文件,你只需要做的只是把视图合并入你的项目中
在成功登陆后和注销登出后,laravel 自动会为你跳转到某些页面,你也可以自定义想要跳转的页面。在 AuthController 中我们设置了 $redirectAfterLogout 字段和 $redirectTo 字段,用来指定登录和退出后的重定向 URL
2.laravel 指定目录创建控制器,应该是
phpartisanmake:controllerAdmin/PostController
而不是如以下命名
phpartisanmake:controller /Admin/PostController
3.在使用 Laravel 自带的 Auth 验证系统时,需要注意一下几个常用方法 Auth::check(),Auth::guest(),Auth::guard(),Auth::logout()
4.laravel 的调试,你可以使用 dd()这个函数,也可以使用 laravel 自带的 Log 门面。关于调试问题,具体可以参考这篇博文/n/8496
5.laravel 的常用开发工具和扩展包(声明:不一定我都用过算是我收藏的)
jenssegers/agent——轻松识别客户端信息
stevenyangecho/laravel-u-editor——百度编辑器
overtrue/laravel-lang——laravel多个国家的语言包
predis/predis——最好的redis-php扩展包
teepluss/theme – 主题和资源管理
eternicode/bootstrap-datepicker —— 为Bootstrap设计的日期选择器
Anahkiasen/former —— 独立于Laravel的功能强大的表单构建器
6.laravel 使用 Bower+Gulp 集成前端资源,讲了上面那么多工具和扩展包,总要讲为什么要这么使用,首先 Bower 是一个基于前端的包管理工具,就像安装 Laravel 的时候的 Composer ,如果你在使用 Bower 来引入 Bootstrap ,你可能会看到 Less 文件,Less 按我的理解是一种介于 css 和 js 之间的一种预编译语言,能够帮助你更快的定义 html 的样式。最后讲讲 Gulp ,Gulp 是一款任务管理工具 为什么我们不直接引入这些文件而要通过 Gulp 来引入呢?按我的理解是 通过 Gulp 来引入能够在大型项目中能够帮助你提高效率!
至于如何使用,可以参考这篇博文http://laravelacademy.org/post/2299.html
以及极客学院上的视频
7.laravel 的分页功能,实现 laravel 的分页十分简单,我这里介绍的是基于 Eloquent 模型进行分页,Eloquent 模型的 paginate 方法,该方法基于当前用户查看页自动设置合适的偏移(offset)和限制(limit)。默认情况下,当前页通过 HTTP 请求查询字符串参数?page 的值判断。当然,该值由 Laravel 自动检测,然后自动插入分页器生成的链接中。在调用完paginate 函数后,在视图中你可以从 Blade模板中 调用 render()方法从而实现分页
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Laravel(2)
首先说下问题的由来,原因是想对Laravel5分模块拆分,这样逻辑上更清爽一些,由于项目也不大,所以决定在controller层面拆个前台和后台,所以很经典的做法也就是在app/Http/controllers下新建两个目录,分别为Home和Admin,所以对应的路由也发生变化这是对的
比如在Admin/下存在一个IndexController.php文件,根据官方文档路由定义成这样
Route::get('admin', 'Admin\IndexController@index');
然后在项目根目录执行一下下面的命令,这个命令主要是能够将新建的Admin下的类能够autoload
php artisan dump-autoload
!但是我这里执行后,发生如标题一样的错误
[InvalidArgumentException]
Command &dump-autoload& is not defined.
而且访问浏览器http://localhost/laravel/public/index.php/admin也是有问题的,糟糕问题来啦!
于是可以定位到,我的这个命令是有问题的,百度没查出来什么,只能Google了,最后终于查到一篇非常牛逼的博客,因为laravel的先进,我们可以通过许多命令非常省事的完成许多想做的事,比如我现在想新建一个控制器,只需要执行artisan如下的命令即可,这样就可以通过命令的方式来完成目的,而且已经是自动加载的了,甚至还帮我们定义好了许多函数。
php artisan make:controller Admin\NewsController
如何查看artisan这个神奇的东东都有哪些命令 ,只需执行如下命令
php artisan list
以后想弄什么,直接通过php artisan XXX 命令即可。
那篇神奇的博客是&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:27208次
排名:千里之外
原创:29篇
评论:25条
(2)(1)(5)(4)(2)(4)(1)(2)(10)(5)

我要回帖

更多关于 laravel artisan 的文章

 

随机推荐